Implemented Save-Test
This commit is contained in:
		| @@ -33,7 +33,7 @@ namespace keepass2android | ||||
| 		public HashSet<PwGroup> Dirty = new HashSet<PwGroup>(new PwGroupEqualityFromIdComparer()); | ||||
| 		public PwGroup Root; | ||||
| 		public PwDatabase KpDatabase; | ||||
| 		public IOConnectionInfo Ioc; | ||||
| 		public IOConnectionInfo Ioc { get { return KpDatabase.IOConnectionInfo; } } | ||||
| 		public DateTime LastChangeDate; | ||||
| 		public SearchDbHelper SearchHelper; | ||||
| 		 | ||||
| @@ -92,8 +92,6 @@ namespace keepass2android | ||||
| 		 | ||||
| 		public void LoadData(IKp2aApp app, IOConnectionInfo iocInfo, String password, String keyfile, UpdateStatus status) | ||||
| 		{ | ||||
| 			Ioc = iocInfo; | ||||
|  | ||||
| 			PwDatabase pwDatabase = new PwDatabase(); | ||||
|  | ||||
| 			CompositeKey compositeKey = new CompositeKey(); | ||||
| @@ -212,7 +210,6 @@ namespace keepass2android | ||||
| 			 | ||||
| 			Root = null; | ||||
| 			KpDatabase = null; | ||||
| 			Ioc = null; | ||||
| 			_loaded = false; | ||||
| 			_locked = false; | ||||
| 			_reloadRequested = false; | ||||
|   | ||||
| @@ -54,7 +54,6 @@ namespace keepass2android | ||||
| 			 | ||||
| 			// Set Database state | ||||
| 			db.Root = db.KpDatabase.RootGroup; | ||||
| 			db.Ioc = _ioc; | ||||
| 			db.Loaded = true; | ||||
| 			db.SearchHelper = new SearchDbHelper(_app); | ||||
|  | ||||
|   | ||||
| @@ -18,8 +18,8 @@ namespace Kp2aUnitTests | ||||
|         { | ||||
|             TestRunner runner = new TestRunner(); | ||||
|             // Run all tests from this assembly | ||||
|             //runner.AddTests(Assembly.GetExecutingAssembly()); | ||||
| 			runner.AddTests(new List<Type> { typeof(TestLoadDb)}); | ||||
|             runner.AddTests(Assembly.GetExecutingAssembly()); | ||||
| 			//runner.AddTests(new List<Type> { typeof(TestSaveDb)}); | ||||
| 			//runner.AddTests(typeof(TestLoadDb).GetMethod("TestLoadWithPasswordOnly"));}} | ||||
|             return runner; | ||||
|         } | ||||
|   | ||||
| @@ -28,12 +28,12 @@ namespace Kp2aUnitTests | ||||
| 				   item => | ||||
| 					   { | ||||
| 						   IStructureItem foundItem = db2.RootGroup.FindObject(item.Uuid, true, null); | ||||
| 						   Assert.IsNotNull(foundItem); | ||||
| 						   Assert.IsTrue(item.ParentGroup.Uuid.EqualsValue(foundItem.ParentGroup.Uuid)); | ||||
| 						   Assert.IsNotNull(foundItem, "didn't find item with uuid="+item.Uuid.ToHexString()); | ||||
| 						   Assert.IsTrue(item.ParentGroup.Uuid.EqualsValue(foundItem.ParentGroup.Uuid), "item.ParentGroup.Uuid ("+item.ParentGroup.Uuid+") != " + foundItem.ParentGroup.Uuid); | ||||
| 					   } | ||||
| 				); | ||||
|  | ||||
| 			Assert.AreEqual(db1.RootGroup.GetObjects(true,null).Count(),db2.RootGroup.GetObjects(true,null).Count()); | ||||
| 			Assert.AreEqual(db1.RootGroup.GetObjects(true,null).Count(),db2.RootGroup.GetObjects(true,null).Count(), "Wrong Object Count"); | ||||
| 		} | ||||
|  | ||||
| 		protected static string DefaultDirectory | ||||
| @@ -56,19 +56,27 @@ namespace Kp2aUnitTests | ||||
| 			get { return "secretpassword!"; } | ||||
| 		} | ||||
|  | ||||
| 		protected IKp2aApp LoadDatabase(string defaultFilename, string password, string keyfile) | ||||
| 		protected string TestDbDirectory | ||||
| 		{ | ||||
| 			get { return DefaultDirectory + "savedWithDesktop/"; } | ||||
| 		} | ||||
|  | ||||
| 		protected IKp2aApp LoadDatabase(string filename, string password, string keyfile) | ||||
| 		{ | ||||
| 			IKp2aApp app = new TestKp2aApp(); | ||||
| 			Handler handler = new Handler(Looper.MainLooper); | ||||
| 			app.CreateNewDatabase(); | ||||
| 			bool loadSuccesful = false; | ||||
| 			LoadDb task = new LoadDb(app, new IOConnectionInfo() { Path = defaultFilename }, password, keyfile, new ActionOnFinish((success, message) => | ||||
| 			LoadDb task = new LoadDb(app, new IOConnectionInfo() { Path = filename }, password, keyfile, new ActionOnFinish((success, message) => | ||||
| 				{ | ||||
| 					loadSuccesful = success; if (!success) | ||||
| 						Assert.Fail(message); | ||||
| 					if (!success) | ||||
| 						Android.Util.Log.Debug("KP2ATest", message); | ||||
| 					loadSuccesful = success;  | ||||
| 						 | ||||
| 				}) | ||||
| 				); | ||||
| 			ProgressTask pt = new ProgressTask(app, Application.Context, task, UiStringKey.loading_database); | ||||
| 			pt.Run(); | ||||
| 			pt.JoinWorkerThread(); | ||||
| 			Assert.IsTrue(loadSuccesful); | ||||
| 			return app; | ||||
| 		} | ||||
| @@ -78,8 +86,7 @@ namespace Kp2aUnitTests | ||||
| 			bool saveSuccesful = false; | ||||
| 			SaveDb save = new SaveDb(Application.Context, app.GetDb(), new ActionOnFinish((success, message) => | ||||
| 				{ | ||||
| 					saveSuccesful = success; if (!success) | ||||
| 						Assert.Fail(message); | ||||
| 					saveSuccesful = success;  | ||||
| 				}), false); | ||||
| 			save.Run(); | ||||
|  | ||||
| @@ -93,9 +100,12 @@ namespace Kp2aUnitTests | ||||
| 			Database db = app.CreateNewDatabase(); | ||||
|  | ||||
| 			db.KpDatabase = new PwDatabase(); | ||||
| 			//Key will be changed/created immediately after creation: | ||||
| 			CompositeKey tempKey = new CompositeKey(); | ||||
| 			db.KpDatabase.New(ioc, tempKey); | ||||
| 			 | ||||
| 			CompositeKey compositeKey = new CompositeKey(); | ||||
| 			compositeKey.AddUserKey(new KcpPassword(DefaultPassword)); | ||||
| 			if (!String.IsNullOrEmpty(DefaultKeyfile)) | ||||
| 				compositeKey.AddUserKey(new KcpKeyFile(DefaultKeyfile)); | ||||
| 			db.KpDatabase.New(ioc, compositeKey); | ||||
|  | ||||
|  | ||||
| 			db.KpDatabase.KeyEncryptionRounds = 3; | ||||
| @@ -104,7 +114,6 @@ namespace Kp2aUnitTests | ||||
|  | ||||
| 			// Set Database state | ||||
| 			db.Root = db.KpDatabase.RootGroup; | ||||
| 			db.Ioc = ioc; | ||||
| 			db.Loaded = true; | ||||
| 			db.SearchHelper = new SearchDbHelper(app); | ||||
|  | ||||
|   | ||||
| @@ -30,8 +30,7 @@ namespace Kp2aUnitTests | ||||
| 			bool createSuccesful = false; | ||||
| 			//create the task: | ||||
| 			CreateDb createDb = new CreateDb(app, Application.Context, ioc, new ActionOnFinish((success, message) => | ||||
| 				{ createSuccesful = success; if (!success)  | ||||
| 					Assert.Fail(message); | ||||
| 				{ createSuccesful = success;  | ||||
| 				}), false); | ||||
| 			//run it: | ||||
| 			createDb.Run(); | ||||
|   | ||||
| @@ -11,12 +11,6 @@ namespace Kp2aUnitTests | ||||
| 	[TestClass] | ||||
| 	internal class TestLoadDb : TestBase | ||||
| 	{ | ||||
| 		private string TestDbDirectory | ||||
| 		{ | ||||
| 			get { return DefaultDirectory + "savedWithDesktop/"; } | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 		private void RunLoadTest(string filenameWithoutDir, string password, string keyfile) | ||||
| 		{ | ||||
| 			Android.Util.Log.Debug("KP2ATest", "Starting for " + filenameWithoutDir+" with " + password+"/"+keyfile); | ||||
|   | ||||
| @@ -1,10 +1,13 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Security.Cryptography; | ||||
| using System.Text; | ||||
| using Android.App; | ||||
| using Android.OS; | ||||
| using KeePassLib; | ||||
| using KeePassLib.Serialization; | ||||
| using KeePassLib.Utility; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| using keepass2android; | ||||
|  | ||||
| @@ -13,6 +16,8 @@ namespace Kp2aUnitTests | ||||
| 	[TestClass] | ||||
| 	class TestSaveDb: TestBase | ||||
| 	{ | ||||
| 		private string newFilename; | ||||
|  | ||||
| 		[TestMethod] | ||||
| 		public void TestLoadEditSave() | ||||
| 		{ | ||||
| @@ -24,7 +29,7 @@ namespace Kp2aUnitTests | ||||
| 			//modify the database by adding a group: | ||||
| 			app.GetDb().KpDatabase.RootGroup.AddGroup(new PwGroup(true, true, "TestGroup", PwIcon.Apple), true); | ||||
| 			//save the database again: | ||||
| 			// -> Ensure Assert below works! SaveDatabase(app, DefaultFilename); | ||||
| 			SaveDatabase(app); | ||||
|  | ||||
| 			//load database to a new app instance: | ||||
| 			IKp2aApp resultApp = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile); | ||||
| @@ -36,7 +41,49 @@ namespace Kp2aUnitTests | ||||
| 		[TestMethod] | ||||
| 		public void TestLoadAndSave_TestIdenticalFiles() | ||||
| 		{ | ||||
| 			Assert.Fail("Todo: implement"); | ||||
| 			IKp2aApp app = LoadDatabase(DefaultDirectory + "complexDb.kdbx", "test", null); | ||||
| 			var kdbxXml = DatabaseToXml(app); | ||||
| 			 | ||||
| 			newFilename = TestDbDirectory + "tmp_complexDb.kdbx"; | ||||
| 			if (File.Exists(newFilename)) | ||||
| 				File.Delete(newFilename); | ||||
| 			app.GetDb().KpDatabase.IOConnectionInfo.Path = newFilename; | ||||
| 			app.GetDb().SaveData(Application.Context); | ||||
|  | ||||
|  | ||||
| 			IKp2aApp appReloaded = LoadDatabase(newFilename, "test", null); | ||||
| 			 | ||||
| 			var kdbxReloadedXml = DatabaseToXml(appReloaded); | ||||
|  | ||||
| 			Assert.AreEqual(kdbxXml,kdbxReloadedXml); | ||||
| 			 | ||||
|  | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		private class OnCloseToStringMemoryStream : MemoryStream | ||||
| 		{ | ||||
| 			public string Text { get; private set; } | ||||
| 			private bool _closed; | ||||
| 			public override void Close() | ||||
| 			{ | ||||
| 				if (!_closed) | ||||
| 				{ | ||||
| 					Position = 0; | ||||
| 					Text = new StreamReader(this).ReadToEnd();	 | ||||
| 				} | ||||
| 				base.Close(); | ||||
| 				_closed = true; | ||||
|  | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		private static string DatabaseToXml(IKp2aApp app) | ||||
| 		{ | ||||
| 			KdbxFile kdb = new KdbxFile(app.GetDb().KpDatabase); | ||||
| 			var sOutput = new OnCloseToStringMemoryStream(); | ||||
| 			kdb.Save(sOutput, app.GetDb().KpDatabase.RootGroup, KdbxFormat.PlainXml, null); | ||||
| 			return sOutput.Text; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										1342
									
								
								src/keepass2android/Resources/Resource.designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1342
									
								
								src/keepass2android/Resources/Resource.designer.cs
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -143,11 +143,11 @@ namespace MonoDroidUnitTesting { | ||||
|       foreach (TestClass testClass in runner.GetTestClassesSorted(CompareResults)) { | ||||
|         this.ListAdapter.Add(testClass); | ||||
|       } | ||||
|  | ||||
| 		/* | ||||
|       // Restore previous activity | ||||
|       if (!TestMethodResultActivity.RestoreActivity(this)) { | ||||
|         TestClassResultActivity.RestoreActivity(this); | ||||
|       } | ||||
|       }*/ | ||||
|     } | ||||
|  | ||||
|     private bool RunOnTestRunEnded() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Crocoll
					Philipp Crocoll