From 99cbe848795cac10e12514eb39efa3cad9cfafa0 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Sat, 13 Jul 2013 20:13:45 +0200 Subject: [PATCH] Added test for merge with kdbp file and fixed it in SaveDB --- .../Serialization/ProtoBuf/KdbpFile.cs | 2 +- src/Kp2aBusinessLogic/database/edit/SaveDB.cs | 2 +- src/Kp2aUnitTests/MainActivity.cs | 6 ++--- src/Kp2aUnitTests/TestBase.cs | 22 ++++++++++----- src/Kp2aUnitTests/TestSaveDb.cs | 27 +++++++++++++------ 5 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs b/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs index 3e4a3dd6..73af3b71 100644 --- a/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs +++ b/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs @@ -11,7 +11,7 @@ using ProtoBuf.Meta; namespace KeePassLib.Serialization { - internal class KdbpFile + public class KdbpFile { public const string FileNameExtension = "kdbp"; diff --git a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs index febdb280..71794a0c 100644 --- a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs @@ -175,7 +175,7 @@ namespace keepass2android pwImp.MemoryProtection = pwDatabase.MemoryProtection.CloneDeep(); pwImp.MasterKey = pwDatabase.MasterKey; KdbxFile kdbx = new KdbxFile(pwImp); - kdbx.Load(fileStorage.OpenFileForRead(ioc), KdbxFormat.Default, null); + kdbx.Load(fileStorage.OpenFileForRead(ioc), KdbpFile.GetFormatToUse(ioc), null); pwDatabase.MergeIn(pwImp, PwMergeMethod.Synchronize, null); diff --git a/src/Kp2aUnitTests/MainActivity.cs b/src/Kp2aUnitTests/MainActivity.cs index d1370c27..cce4f45a 100644 --- a/src/Kp2aUnitTests/MainActivity.cs +++ b/src/Kp2aUnitTests/MainActivity.cs @@ -18,10 +18,10 @@ namespace Kp2aUnitTests { TestRunner runner = new TestRunner(); // Run all tests from this assembly - runner.AddTests(Assembly.GetExecutingAssembly()); + //runner.AddTests(Assembly.GetExecutingAssembly()); //runner.AddTests(new List { typeof(TestSaveDb)}); - //runner.AddTests(typeof(TestSaveDb).GetMethod("TestLoadEditSaveWithSyncConflict")); - //runner.AddTests(typeof(TestSaveDb).GetMethod("TestLoadEditSave")); + runner.AddTests(typeof(TestSaveDb).GetMethod("TestLoadEditSaveWithSyncKdbp")); + //runner.AddTests(typeof(TestSaveDb).GetMethod("TestLoadKdbxAndSaveKdbp_TestIdenticalFiles")); return runner; } } diff --git a/src/Kp2aUnitTests/TestBase.cs b/src/Kp2aUnitTests/TestBase.cs index 328fa767..430b3e69 100644 --- a/src/Kp2aUnitTests/TestBase.cs +++ b/src/Kp2aUnitTests/TestBase.cs @@ -105,13 +105,21 @@ namespace Kp2aUnitTests } protected IKp2aApp SetupAppWithDefaultDatabase() + { + string filename = DefaultFilename; + + return SetupAppWithDatabase(filename); + } + + protected IKp2aApp SetupAppWithDatabase(string filename) { IKp2aApp app = new TestKp2aApp(); - IOConnectionInfo ioc = new IOConnectionInfo {Path = DefaultFilename}; + + IOConnectionInfo ioc = new IOConnectionInfo {Path = filename}; Database db = app.CreateNewDatabase(); db.KpDatabase = new PwDatabase(); - + CompositeKey compositeKey = new CompositeKey(); compositeKey.AddUserKey(new KcpPassword(DefaultPassword)); if (!String.IsNullOrEmpty(DefaultKeyfile)) @@ -130,18 +138,18 @@ namespace Kp2aUnitTests // Add a couple default groups db.KpDatabase.RootGroup.AddGroup(new PwGroup(true, true, "Internet", PwIcon.Key), true); - + mailGroup = new PwGroup(true, true, "eMail", PwIcon.UserCommunication); db.KpDatabase.RootGroup.AddGroup(mailGroup, true); - mailGroup.AddGroup(new PwGroup(true, true, "business", PwIcon.BlackBerry), true ); + mailGroup.AddGroup(new PwGroup(true, true, "business", PwIcon.BlackBerry), true); mailEntry = new PwEntry(true, true); mailEntry.Strings.Set(PwDefs.UserNameField, new ProtectedString( - true, "me@there.com")); + true, "me@there.com")); mailEntry.Strings.Set(PwDefs.TitleField, new ProtectedString( - true, "me@there.com Entry")); - mailGroup.AddEntry(mailEntry , true); + true, "me@there.com Entry")); + mailGroup.AddEntry(mailEntry, true); db.KpDatabase.RootGroup.AddGroup(new PwGroup(true, true, "eMail2", PwIcon.UserCommunication), true); diff --git a/src/Kp2aUnitTests/TestSaveDb.cs b/src/Kp2aUnitTests/TestSaveDb.cs index c1fef6b7..b3316575 100644 --- a/src/Kp2aUnitTests/TestSaveDb.cs +++ b/src/Kp2aUnitTests/TestSaveDb.cs @@ -44,13 +44,25 @@ namespace Kp2aUnitTests [TestMethod] public void TestLoadEditSaveWithSync() { - //create the default database: - IKp2aApp app = SetupAppWithDefaultDatabase(); + TestSync(DefaultFilename); + } + + [TestMethod] + public void TestLoadEditSaveWithSyncKdbp() + { + TestSync(DefaultDirectory+"savetest.kdbp"); + } + + + private void TestSync(string filename) + { +//create the default database: + IKp2aApp app = SetupAppWithDatabase(filename); //save it and reload it so we have a base version SaveDatabase(app); - app = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile); + app = LoadDatabase(filename, DefaultPassword, DefaultKeyfile); //load it once again: - IKp2aApp app2 = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile); + IKp2aApp app2 = LoadDatabase(filename, DefaultPassword, DefaultKeyfile); //modify the database by adding a group in both databases: app.GetDb().KpDatabase.RootGroup.AddGroup(new PwGroup(true, true, "TestGroup", PwIcon.Apple), true); @@ -59,23 +71,22 @@ namespace Kp2aUnitTests //save the database from app 1: SaveDatabase(app); - ((TestKp2aApp)app2).SetYesNoCancelResult(TestKp2aApp.YesNoCancelResult.Yes); + ((TestKp2aApp) app2).SetYesNoCancelResult(TestKp2aApp.YesNoCancelResult.Yes); //save the database from app 2: This save operation must detect the changes made from app 1 and ask if it should sync: SaveDatabase(app2); //make sure the right question was asked - Assert.AreEqual(UiStringKey.TitleSyncQuestion, ((TestKp2aApp)app2).LastYesNoCancelQuestionTitle); + Assert.AreEqual(UiStringKey.TitleSyncQuestion, ((TestKp2aApp) app2).LastYesNoCancelQuestionTitle); //add group 2 to app 1: app.GetDb().KpDatabase.RootGroup.AddGroup(group2, true); //load database to a new app instance: - IKp2aApp resultApp = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile); + IKp2aApp resultApp = LoadDatabase(filename, DefaultPassword, DefaultKeyfile); //ensure the sync was successful: AssertDatabasesAreEqual(app.GetDb().KpDatabase, resultApp.GetDb().KpDatabase); - }