TestDeletedObjects.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /*
  2. * Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 2 or (at your option)
  7. * version 3 of the License.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #include "TestDeletedObjects.h"
  18. #include "TestGlobal.h"
  19. #include "config-keepassx-tests.h"
  20. #include "crypto/Crypto.h"
  21. #include "format/KdbxXmlReader.h"
  22. #include "format/KeePass2.h"
  23. QTEST_GUILESS_MAIN(TestDeletedObjects)
  24. void TestDeletedObjects::initTestCase()
  25. {
  26. QVERIFY(Crypto::init());
  27. }
  28. void TestDeletedObjects::createAndDelete(QSharedPointer<Database> db, int delObjectsSize)
  29. {
  30. QCOMPARE(db->deletedObjects().size(), delObjectsSize);
  31. Group* root = db->rootGroup();
  32. int rootChildrenCount = root->children().size();
  33. Group* g = new Group();
  34. g->setParent(root);
  35. QUuid gUuid = QUuid::createUuid();
  36. g->setUuid(gUuid);
  37. delete g;
  38. QCOMPARE(db->deletedObjects().size(), ++delObjectsSize);
  39. QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, gUuid);
  40. QCOMPARE(rootChildrenCount, root->children().size());
  41. Group* g1 = new Group();
  42. g1->setParent(root);
  43. QUuid g1Uuid = QUuid::createUuid();
  44. g1->setUuid(g1Uuid);
  45. Entry* e1 = new Entry();
  46. e1->setGroup(g1);
  47. QUuid e1Uuid = QUuid::createUuid();
  48. e1->setUuid(e1Uuid);
  49. Group* g2 = new Group();
  50. g2->setParent(g1);
  51. QUuid g2Uuid = QUuid::createUuid();
  52. g2->setUuid(g2Uuid);
  53. Entry* e2 = new Entry();
  54. e2->setGroup(g2);
  55. QUuid e2Uuid = QUuid::createUuid();
  56. e2->setUuid(e2Uuid);
  57. delete g1;
  58. delObjectsSize += 4;
  59. QCOMPARE(db->deletedObjects().size(), delObjectsSize);
  60. QCOMPARE(db->deletedObjects().at(delObjectsSize - 4).uuid, e1Uuid);
  61. QCOMPARE(db->deletedObjects().at(delObjectsSize - 3).uuid, e2Uuid);
  62. QCOMPARE(db->deletedObjects().at(delObjectsSize - 2).uuid, g2Uuid);
  63. QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, g1Uuid);
  64. QCOMPARE(rootChildrenCount, root->children().size());
  65. Entry* e3 = new Entry();
  66. e3->setGroup(root);
  67. QUuid e3Uuid = QUuid::createUuid();
  68. e3->setUuid(e3Uuid);
  69. delete e3;
  70. QCOMPARE(db->deletedObjects().size(), ++delObjectsSize);
  71. QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, e3Uuid);
  72. QCOMPARE(rootChildrenCount, root->children().size());
  73. }
  74. void TestDeletedObjects::testDeletedObjectsFromFile()
  75. {
  76. KdbxXmlReader reader(KeePass2::FILE_VERSION_3_1);
  77. reader.setStrictMode(true);
  78. QString xmlFile = QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.xml");
  79. auto db = reader.readDatabase(xmlFile);
  80. createAndDelete(db, 2);
  81. }
  82. void TestDeletedObjects::testDeletedObjectsFromNewDb()
  83. {
  84. auto db = QSharedPointer<Database>::create();
  85. createAndDelete(db, 0);
  86. }
  87. void TestDeletedObjects::testDatabaseChange()
  88. {
  89. auto db = QSharedPointer<Database>::create();
  90. Group* root = db->rootGroup();
  91. int delObjectsSize = 0;
  92. auto db2 = QSharedPointer<Database>::create();
  93. Group* root2 = db2->rootGroup();
  94. int delObjectsSize2 = 0;
  95. auto* e = new Entry();
  96. e->setGroup(root);
  97. QCOMPARE(db->deletedObjects().size(), delObjectsSize);
  98. QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
  99. e->setGroup(root2);
  100. QCOMPARE(db->deletedObjects().size(), ++delObjectsSize);
  101. QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
  102. delete e;
  103. QCOMPARE(db->deletedObjects().size(), delObjectsSize);
  104. QCOMPARE(db2->deletedObjects().size(), ++delObjectsSize2);
  105. auto* g1 = new Group();
  106. g1->setParent(root);
  107. QUuid g1Uuid = QUuid::createUuid();
  108. g1->setUuid(g1Uuid);
  109. auto* e1 = new Entry();
  110. e1->setGroup(g1);
  111. QUuid e1Uuid = QUuid::createUuid();
  112. e1->setUuid(e1Uuid);
  113. g1->setParent(root2);
  114. delObjectsSize += 2;
  115. QCOMPARE(db->deletedObjects().size(), delObjectsSize);
  116. QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
  117. QCOMPARE(db->deletedObjects().at(delObjectsSize - 2).uuid, e1Uuid);
  118. QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, g1Uuid);
  119. auto* group = new Group();
  120. auto* entry = new Entry();
  121. entry->setGroup(group);
  122. entry->setGroup(root);
  123. QCOMPARE(db->deletedObjects().size(), delObjectsSize);
  124. QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
  125. delete group;
  126. }