Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCarlo Teubner <435950+c4rlo@users.noreply.github.com>2019-12-21 17:25:17 +0300
committerJonathan White <support@dmapps.us>2019-12-21 17:25:17 +0300
commitc70ebe6dce3c23a5090a102a4e9d5fb05838401d (patch)
tree6e634f10d2bf81571e0b4ce749db625d35c86ada /tests
parentc0f29cc790dc64b574229e9506d1d581cfbdb511 (diff)
Fix memory leaks (mostly) in tests (#3922)
This makes most tests run successfully with asan. The GUI tests still have a bunch of leaks, some from library code, and some that look real but which I didn't immediately manage to figure out. * TestOpVaultReader: use QSharedPointer
Diffstat (limited to 'tests')
-rw-r--r--tests/TestGroup.cpp71
-rw-r--r--tests/TestOpVaultReader.cpp38
2 files changed, 54 insertions, 55 deletions
diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp
index 9fc39dc64..47a917e43 100644
--- a/tests/TestGroup.cpp
+++ b/tests/TestGroup.cpp
@@ -20,6 +20,7 @@
#include "TestGlobal.h"
#include "mock/MockClock.h"
+#include <QScopedPointer>
#include <QSignalSpy>
#include "core/Metadata.h"
@@ -798,16 +799,16 @@ void TestGroup::testAddEntryWithPath()
void TestGroup::testIsRecycled()
{
- Database* db = new Database();
- db->metadata()->setRecycleBinEnabled(true);
+ Database db;
+ db.metadata()->setRecycleBinEnabled(true);
Group* group1 = new Group();
group1->setName("group1");
- group1->setParent(db->rootGroup());
+ group1->setParent(db.rootGroup());
Group* group2 = new Group();
group2->setName("group2");
- group2->setParent(db->rootGroup());
+ group2->setParent(db.rootGroup());
Group* group3 = new Group();
group3->setName("group3");
@@ -815,16 +816,16 @@ void TestGroup::testIsRecycled()
Group* group4 = new Group();
group4->setName("group4");
- group4->setParent(db->rootGroup());
+ group4->setParent(db.rootGroup());
- db->recycleGroup(group2);
+ db.recycleGroup(group2);
QVERIFY(!group1->isRecycled());
QVERIFY(group2->isRecycled());
QVERIFY(group3->isRecycled());
QVERIFY(!group4->isRecycled());
- db->recycleGroup(group4);
+ db.recycleGroup(group4);
QVERIFY(group4->isRecycled());
}
@@ -1052,12 +1053,12 @@ void TestGroup::testChildrenSort()
void TestGroup::testHierarchy()
{
- Group* group1 = new Group();
- group1->setName("group1");
+ Group group1;
+ group1.setName("group1");
Group* group2 = new Group();
group2->setName("group2");
- group2->setParent(group1);
+ group2->setParent(&group1);
Group* group3 = new Group();
group3->setName("group3");
@@ -1085,11 +1086,11 @@ void TestGroup::testHierarchy()
void TestGroup::testApplyGroupIconRecursively()
{
// Create a database with two nested groups with one entry each
- Database* database = new Database();
+ Database database;
Group* subgroup = new Group();
subgroup->setName("Subgroup");
- subgroup->setParent(database->rootGroup());
+ subgroup->setParent(database.rootGroup());
QVERIFY(subgroup);
Group* subsubgroup = new Group();
@@ -1108,10 +1109,10 @@ void TestGroup::testApplyGroupIconRecursively()
// Set an icon per number to the root group and apply recursively
// -> all groups and entries have the same icon
const int rootIconNumber = 42;
- database->rootGroup()->setIcon(rootIconNumber);
- QVERIFY(database->rootGroup()->iconNumber() == rootIconNumber);
- database->rootGroup()->applyGroupIconToChildGroups();
- database->rootGroup()->applyGroupIconToChildEntries();
+ database.rootGroup()->setIcon(rootIconNumber);
+ QVERIFY(database.rootGroup()->iconNumber() == rootIconNumber);
+ database.rootGroup()->applyGroupIconToChildGroups();
+ database.rootGroup()->applyGroupIconToChildEntries();
QVERIFY(subgroup->iconNumber() == rootIconNumber);
QVERIFY(subgroupEntry->iconNumber() == rootIconNumber);
QVERIFY(subsubgroup->iconNumber() == rootIconNumber);
@@ -1124,7 +1125,7 @@ void TestGroup::testApplyGroupIconRecursively()
QVERIFY(subsubgroup->iconNumber() == subsubgroupIconNumber);
subsubgroup->applyGroupIconToChildGroups();
subsubgroup->applyGroupIconToChildEntries();
- QVERIFY(database->rootGroup()->iconNumber() == rootIconNumber);
+ QVERIFY(database.rootGroup()->iconNumber() == rootIconNumber);
QVERIFY(subgroup->iconNumber() == rootIconNumber);
QVERIFY(subgroupEntry->iconNumber() == rootIconNumber);
QVERIFY(subsubgroup->iconNumber() == subsubgroupIconNumber);
@@ -1135,11 +1136,11 @@ void TestGroup::testApplyGroupIconRecursively()
const QUuid subgroupIconUuid = QUuid::createUuid();
QImage subgroupIcon(16, 16, QImage::Format_RGB32);
subgroupIcon.setPixel(0, 0, qRgb(255, 0, 0));
- database->metadata()->addCustomIcon(subgroupIconUuid, subgroupIcon);
+ database.metadata()->addCustomIcon(subgroupIconUuid, subgroupIcon);
subgroup->setIcon(subgroupIconUuid);
subgroup->applyGroupIconToChildGroups();
subgroup->applyGroupIconToChildEntries();
- QVERIFY(database->rootGroup()->iconNumber() == rootIconNumber);
+ QVERIFY(database.rootGroup()->iconNumber() == rootIconNumber);
QCOMPARE(subgroup->iconUuid(), subgroupIconUuid);
QCOMPARE(subgroup->icon(), subgroupIcon);
QCOMPARE(subgroupEntry->iconUuid(), subgroupIconUuid);
@@ -1150,10 +1151,10 @@ void TestGroup::testApplyGroupIconRecursively()
QCOMPARE(subsubgroupEntry->icon(), subgroupIcon);
// Reset all icons to root icon
- database->rootGroup()->setIcon(rootIconNumber);
- QVERIFY(database->rootGroup()->iconNumber() == rootIconNumber);
- database->rootGroup()->applyGroupIconToChildGroups();
- database->rootGroup()->applyGroupIconToChildEntries();
+ database.rootGroup()->setIcon(rootIconNumber);
+ QVERIFY(database.rootGroup()->iconNumber() == rootIconNumber);
+ database.rootGroup()->applyGroupIconToChildGroups();
+ database.rootGroup()->applyGroupIconToChildEntries();
QVERIFY(subgroup->iconNumber() == rootIconNumber);
QVERIFY(subgroupEntry->iconNumber() == rootIconNumber);
QVERIFY(subsubgroup->iconNumber() == rootIconNumber);
@@ -1161,10 +1162,10 @@ void TestGroup::testApplyGroupIconRecursively()
// Apply only for child groups
const int iconForGroups = 10;
- database->rootGroup()->setIcon(iconForGroups);
- QVERIFY(database->rootGroup()->iconNumber() == iconForGroups);
- database->rootGroup()->applyGroupIconToChildGroups();
- QVERIFY(database->rootGroup()->iconNumber() == iconForGroups);
+ database.rootGroup()->setIcon(iconForGroups);
+ QVERIFY(database.rootGroup()->iconNumber() == iconForGroups);
+ database.rootGroup()->applyGroupIconToChildGroups();
+ QVERIFY(database.rootGroup()->iconNumber() == iconForGroups);
QVERIFY(subgroup->iconNumber() == iconForGroups);
QVERIFY(subgroupEntry->iconNumber() == rootIconNumber);
QVERIFY(subsubgroup->iconNumber() == iconForGroups);
@@ -1172,10 +1173,10 @@ void TestGroup::testApplyGroupIconRecursively()
// Apply only for child entries
const int iconForEntries = 20;
- database->rootGroup()->setIcon(iconForEntries);
- QVERIFY(database->rootGroup()->iconNumber() == iconForEntries);
- database->rootGroup()->applyGroupIconToChildEntries();
- QVERIFY(database->rootGroup()->iconNumber() == iconForEntries);
+ database.rootGroup()->setIcon(iconForEntries);
+ QVERIFY(database.rootGroup()->iconNumber() == iconForEntries);
+ database.rootGroup()->applyGroupIconToChildEntries();
+ QVERIFY(database.rootGroup()->iconNumber() == iconForEntries);
QVERIFY(subgroup->iconNumber() == iconForGroups);
QVERIFY(subgroupEntry->iconNumber() == iconForEntries);
QVERIFY(subsubgroup->iconNumber() == iconForGroups);
@@ -1184,15 +1185,15 @@ void TestGroup::testApplyGroupIconRecursively()
void TestGroup::testUsernamesRecursive()
{
- Database* database = new Database();
+ Database database;
// Create a subgroup
Group* subgroup = new Group();
subgroup->setName("Subgroup");
- subgroup->setParent(database->rootGroup());
+ subgroup->setParent(database.rootGroup());
// Generate entries in the root group and the subgroup
- Entry* rootGroupEntry = database->rootGroup()->addEntryWithPath("Root group entry");
+ Entry* rootGroupEntry = database.rootGroup()->addEntryWithPath("Root group entry");
rootGroupEntry->setUsername("Name1");
Entry* subgroupEntry = subgroup->addEntryWithPath("Subgroup entry");
@@ -1201,7 +1202,7 @@ void TestGroup::testUsernamesRecursive()
Entry* subgroupEntryReusingUsername = subgroup->addEntryWithPath("Another subgroup entry");
subgroupEntryReusingUsername->setUsername("Name2");
- QList<QString> usernames = database->rootGroup()->usernamesRecursive();
+ QList<QString> usernames = database.rootGroup()->usernamesRecursive();
QCOMPARE(usernames.size(), 2);
QVERIFY(usernames.contains("Name1"));
QVERIFY(usernames.contains("Name2"));
diff --git a/tests/TestOpVaultReader.cpp b/tests/TestOpVaultReader.cpp
index af332fd32..15f30f2c9 100644
--- a/tests/TestOpVaultReader.cpp
+++ b/tests/TestOpVaultReader.cpp
@@ -49,24 +49,24 @@ QPair<QString, QString>* split1PTextExportKV(QByteArray& line)
return new QPair<QString, QString>(k, v);
}
-QJsonArray* read1PasswordTextExport(QFile& f)
+QSharedPointer<QJsonArray> read1PasswordTextExport(QFile& f)
{
- auto result = new QJsonArray;
- auto current = new QJsonObject;
-
if (!f.open(QIODevice::ReadOnly)) {
qCritical("Unable to open your text export file for reading");
- return nullptr;
+ return {};
}
+ auto result = QSharedPointer<QJsonArray>::create();
+ QJsonObject current;
+
while (!f.atEnd()) {
auto line = f.readLine(1024);
if (line.size() == 1 and line[0] == '\n') {
- if (!current->isEmpty()) {
- result->append(*current);
+ if (!current.isEmpty()) {
+ result->append(current);
}
- current = new QJsonObject;
+ current = QJsonObject();
continue;
}
const auto kv = split1PTextExportKV(line);
@@ -95,14 +95,14 @@ QJsonArray* read1PasswordTextExport(QFile& f)
}
}
auto v = lines.join("");
- (*current)[k] = v;
+ current[k] = v;
} else {
- (*current)[k] = kv->second;
+ current[k] = kv->second;
}
delete kv;
}
- if (!current->isEmpty()) {
- result->append(*current);
+ if (!current.isEmpty()) {
+ result->append(current);
}
f.close();
@@ -120,10 +120,9 @@ void TestOpVaultReader::initTestCase()
m_password = "freddy";
QFile testData(m_opVaultTextExportPath);
- QJsonArray* data = read1PasswordTextExport(testData);
+ auto data = read1PasswordTextExport(testData);
QVERIFY(data);
QCOMPARE(data->size(), 27);
- delete data;
m_categoryMap.insert("001", "Login");
m_categoryMap.insert("002", "Credit Card");
@@ -149,9 +148,9 @@ void TestOpVaultReader::testReadIntoDatabase()
{
QDir opVaultDir(m_opVaultPath);
- auto reader = new OpVaultReader();
- auto db = reader->readDatabase(opVaultDir, m_password);
- QVERIFY2(!reader->hasError(), qPrintable(reader->errorString()));
+ OpVaultReader reader;
+ QScopedPointer<Database> db(reader.readDatabase(opVaultDir, m_password));
+ QVERIFY2(!reader.hasError(), qPrintable(reader.errorString()));
QVERIFY(db);
QVERIFY(!db->children().isEmpty());
@@ -179,7 +178,6 @@ void TestOpVaultReader::testReadIntoDatabase()
QUuid u = Tools::hexToUuid(value["uuid"].toString());
objectsByUuid[u] = value;
}
- delete testData;
QCOMPARE(objectsByUuid.size(), 27);
for (QUuid u : objectsByUuid.keys()) {
@@ -240,11 +238,11 @@ void TestOpVaultReader::testKeyDerivation()
void TestOpVaultReader::testBandEntry1()
{
- auto reader = new OpVaultReader();
+ OpVaultReader reader;
QByteArray json(R"({"hello": "world"})");
QJsonDocument doc = QJsonDocument::fromJson(json);
QJsonObject data;
QByteArray entryKey;
QByteArray entryHmacKey;
- QVERIFY(!reader->decryptBandEntry(doc.object(), data, entryKey, entryHmacKey));
+ QVERIFY(!reader.decryptBandEntry(doc.object(), data, entryKey, entryHmacKey));
}