PwDatabase: Save method now preserves the file format (kdbp vs. kdbx)
SaveDb: fixed bug with catching exceptions Added kdbp Tests Changed versionCode for new preview release
This commit is contained in:
		| @@ -663,7 +663,7 @@ namespace KeePassLib | |||||||
| 			Debug.Assert(ValidateUuidUniqueness()); | 			Debug.Assert(ValidateUuidUniqueness()); | ||||||
| 			Stream s = streamOfOriginalLocation; | 			Stream s = streamOfOriginalLocation; | ||||||
| 			KdbxFile kdb = new KdbxFile(this); | 			KdbxFile kdb = new KdbxFile(this); | ||||||
| 			kdb.Save(s, null, KdbxFormat.Default, slLogger); | 			kdb.Save(s, null, KdbpFile.GetFormatToUse(m_ioSource), slLogger); | ||||||
|  |  | ||||||
| 			m_pbHashOfLastIO = kdb.HashOfFileOnDisk; | 			m_pbHashOfLastIO = kdb.HashOfFileOnDisk; | ||||||
| 			m_pbHashOfFileOnDisk = kdb.HashOfFileOnDisk; | 			m_pbHashOfFileOnDisk = kdb.HashOfFileOnDisk; | ||||||
|   | |||||||
| @@ -136,8 +136,11 @@ namespace keepass2android | |||||||
| 		{ | 		{ | ||||||
| 			try | 			try | ||||||
| 			{ | 			{ | ||||||
| 				_workerThread = new Thread(runHandler); | 				_workerThread = new Thread(() => | ||||||
| 				_workerThread.Start(); | 					{ | ||||||
|  | 						try | ||||||
|  | 						{ | ||||||
|  | 							runHandler(); | ||||||
| 						} | 						} | ||||||
| 						catch (Exception e) | 						catch (Exception e) | ||||||
| 						{ | 						{ | ||||||
| @@ -145,6 +148,15 @@ namespace keepass2android | |||||||
| 							Finish(false, e.Message); | 							Finish(false, e.Message); | ||||||
| 						} | 						} | ||||||
| 						 | 						 | ||||||
|  | 					}); | ||||||
|  | 				_workerThread.Start(); | ||||||
|  | 			} | ||||||
|  | 			catch (Exception e) | ||||||
|  | 			{ | ||||||
|  | 				Kp2aLog.Log("Error starting worker thread of SaveDb: "+e); | ||||||
|  | 				Finish(false, e.Message); | ||||||
|  | 			} | ||||||
|  | 			 | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		public void JoinWorkerThread() | 		public void JoinWorkerThread() | ||||||
|   | |||||||
| @@ -91,5 +91,11 @@ namespace Kp2aUnitTests | |||||||
| 			 | 			 | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		[TestMethod] | ||||||
|  | 		public void TestLoadKdbpWithPasswordOnly() | ||||||
|  | 		{ | ||||||
|  | 			RunLoadTest("passwordonly.kdbp", DefaultPassword, ""); | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -263,6 +263,48 @@ namespace Kp2aUnitTests | |||||||
| 			 | 			 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		[TestMethod] | ||||||
|  | 		public void TestLoadKdbxAndSaveKdbp_TestIdenticalFiles() | ||||||
|  | 		{ | ||||||
|  | 			IKp2aApp app = LoadDatabase(DefaultDirectory + "complexDb.kdbx", "test", null); | ||||||
|  | 			//string kdbxXml = DatabaseToXml(app); | ||||||
|  |  | ||||||
|  | 			newFilename = TestDbDirectory + "tmp_complexDb.kdbp"; | ||||||
|  | 			if (File.Exists(newFilename)) | ||||||
|  | 				File.Delete(newFilename); | ||||||
|  | 			app.GetDb().KpDatabase.IOConnectionInfo.Path = newFilename; | ||||||
|  | 			app.GetDb().SaveData(Application.Context); | ||||||
|  |  | ||||||
|  | 			 | ||||||
|  | 			IKp2aApp appReloaded = LoadDatabase(newFilename, "test", null); | ||||||
|  | 			/* | ||||||
|  | 			 * Unfortunately we cannot compare the xml because there are slight differences: | ||||||
|  | 			 *  - the order of ProtectedStrings in the xml is different (which is ok) | ||||||
|  | 			 *  - the CustomIconUuids are serialized as Zeros instead of not being serialized (which is ok as well) | ||||||
|  | 			string kdbxReloadedXml = DatabaseToXml(appReloaded); | ||||||
|  |  | ||||||
|  | 			bool areEqual = kdbxXml.Equals(kdbxReloadedXml); | ||||||
|  |  | ||||||
|  | 			if (!areEqual) | ||||||
|  | 			{ | ||||||
|  | 				using (StreamWriter w1 = File.CreateText(TestDbDirectory + "FromOriginalKdbx.xml")) | ||||||
|  | 				{ | ||||||
|  | 					w1.Write(kdbxXml); | ||||||
|  | 				} | ||||||
|  | 				using (StreamWriter w2 = File.CreateText(TestDbDirectory + "FromKdbp.xml")) | ||||||
|  | 				{ | ||||||
|  | 					w2.Write(kdbxReloadedXml);	 | ||||||
|  | 				} | ||||||
|  | 				 | ||||||
|  | 			} | ||||||
|  | 			Assert.IsTrue(areEqual, "reloaded->xml differs from loaded->xml"); | ||||||
|  | 			*/ | ||||||
|  | 			AssertDatabasesAreEqual(app.GetDb().KpDatabase, appReloaded.GetDb().KpDatabase); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		private class OnCloseToStringMemoryStream : MemoryStream | 		private class OnCloseToStringMemoryStream : MemoryStream | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android"  | <manifest xmlns:android="http://schemas.android.com/apk/res/android"  | ||||||
| 			android:versionCode="15"  | 			android:versionCode="16"  | ||||||
| 			android:versionName="0.8.4 preview"  | 			android:versionName="0.8.4 preview 2"  | ||||||
| 			package="keepass2android.keepass2android"  | 			package="keepass2android.keepass2android"  | ||||||
| 			android:installLocation="auto"> | 			android:installLocation="auto"> | ||||||
| 	<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14" /> | 	<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14" /> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Crocoll
					Philipp Crocoll