mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-05-05 08:05:21 -04:00
Improve Database and CLI tests
This commit is contained in:
parent
744b4abce8
commit
1e694271a3
9 changed files with 127 additions and 91 deletions
|
@ -23,7 +23,6 @@
|
|||
|
||||
#include "config-keepassx-tests.h"
|
||||
#include "core/Metadata.h"
|
||||
#include "core/Tools.h"
|
||||
#include "crypto/Crypto.h"
|
||||
#include "format/KeePass2Writer.h"
|
||||
#include "keys/PasswordKey.h"
|
||||
|
@ -31,6 +30,8 @@
|
|||
|
||||
QTEST_GUILESS_MAIN(TestDatabase)
|
||||
|
||||
static QString dbFileName = QStringLiteral(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx");
|
||||
|
||||
void TestDatabase::initTestCase()
|
||||
{
|
||||
QVERIFY(Crypto::init());
|
||||
|
@ -45,7 +46,7 @@ void TestDatabase::testOpen()
|
|||
auto key = QSharedPointer<CompositeKey>::create();
|
||||
key->addKey(QSharedPointer<PasswordKey>::create("a"));
|
||||
|
||||
bool ok = db->open(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"), key);
|
||||
bool ok = db->open(dbFileName, key);
|
||||
QVERIFY(ok);
|
||||
|
||||
QVERIFY(db->isInitialized());
|
||||
|
@ -57,16 +58,8 @@ void TestDatabase::testOpen()
|
|||
|
||||
void TestDatabase::testSave()
|
||||
{
|
||||
QByteArray data;
|
||||
QFile sourceDbFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"));
|
||||
QVERIFY(sourceDbFile.open(QIODevice::ReadOnly));
|
||||
QVERIFY(Tools::readAllFromDevice(&sourceDbFile, data));
|
||||
sourceDbFile.close();
|
||||
|
||||
TemporaryFile tempFile;
|
||||
QVERIFY(tempFile.open());
|
||||
QCOMPARE(tempFile.write(data), static_cast<qint64>((data.size())));
|
||||
tempFile.close();
|
||||
QVERIFY(tempFile.copyFromFile(dbFileName));
|
||||
|
||||
auto db = QSharedPointer<Database>::create();
|
||||
auto key = QSharedPointer<CompositeKey>::create();
|
||||
|
@ -79,15 +72,63 @@ void TestDatabase::testSave()
|
|||
// Test safe saves
|
||||
db->metadata()->setName("test");
|
||||
QVERIFY(db->isModified());
|
||||
|
||||
// Test unsafe saves
|
||||
QVERIFY2(db->save(&error, false, false), error.toLatin1());
|
||||
|
||||
QVERIFY2(db->save(&error), error.toLatin1());
|
||||
QVERIFY(!db->isModified());
|
||||
|
||||
// Test unsafe saves
|
||||
db->metadata()->setName("test2");
|
||||
QVERIFY2(db->save(&error, false, false), error.toLatin1());
|
||||
QVERIFY(!db->isModified());
|
||||
|
||||
// Test save backups
|
||||
db->metadata()->setName("test3");
|
||||
QVERIFY2(db->save(&error, true, true), error.toLatin1());
|
||||
QVERIFY(!db->isModified());
|
||||
|
||||
// Confirm backup exists and then delete it
|
||||
auto re = QRegularExpression("(\\.[^.]+)$");
|
||||
auto match = re.match(tempFile.fileName());
|
||||
auto backupFilePath = tempFile.fileName();
|
||||
backupFilePath = backupFilePath.replace(re, "") + ".old" + match.captured(1);
|
||||
QVERIFY(QFile::exists(backupFilePath));
|
||||
QFile::remove(backupFilePath);
|
||||
QVERIFY(!QFile::exists(backupFilePath));
|
||||
}
|
||||
|
||||
void TestDatabase::testSignals()
|
||||
{
|
||||
TemporaryFile tempFile;
|
||||
QVERIFY(tempFile.copyFromFile(dbFileName));
|
||||
|
||||
auto db = QSharedPointer<Database>::create();
|
||||
auto key = QSharedPointer<CompositeKey>::create();
|
||||
key->addKey(QSharedPointer<PasswordKey>::create("a"));
|
||||
|
||||
QSignalSpy spyFilePathChanged(db.data(), SIGNAL(filePathChanged(const QString&, const QString&)));
|
||||
QString error;
|
||||
bool ok = db->open(tempFile.fileName(), key, &error);
|
||||
QVERIFY(ok);
|
||||
QCOMPARE(spyFilePathChanged.count(), 1);
|
||||
|
||||
QSignalSpy spyModified(db.data(), SIGNAL(databaseModified()));
|
||||
db->metadata()->setName("test1");
|
||||
QTRY_COMPARE(spyModified.count(), 1);
|
||||
|
||||
QSignalSpy spySaved(db.data(), SIGNAL(databaseSaved()));
|
||||
QVERIFY(db->save(&error));
|
||||
QCOMPARE(spySaved.count(), 1);
|
||||
|
||||
QSignalSpy spyFileChanged(db.data(), SIGNAL(databaseFileChanged()));
|
||||
QVERIFY(tempFile.copyFromFile(dbFileName));
|
||||
QTRY_COMPARE(spyFileChanged.count(), 1);
|
||||
QTRY_VERIFY(!db->isModified());
|
||||
|
||||
db->metadata()->setName("test2");
|
||||
QTRY_VERIFY(db->isModified());
|
||||
|
||||
QSignalSpy spyDiscarded(db.data(), SIGNAL(databaseDiscarded()));
|
||||
QVERIFY(db->open(tempFile.fileName(), key, &error));
|
||||
QCOMPARE(spyDiscarded.count(), 1);
|
||||
}
|
||||
|
||||
void TestDatabase::testEmptyRecycleBinOnDisabled()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue