[network/ruqola] src/core/localdatabase/autotests: Prepare e2eroomsdatabasetest

Laurent Montel <[email protected]> Wed, 5 Aug 2026 05:29:20 +0000 (UTC)
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 6e88907b840cd7e9818de0e58c0af9489fb33722 by Laurent Montel.
Committed on 05/08/2026 at 05:12.
Pushed by mlaurent into branch 'master'.

Prepare e2eroomsdatabasetest

M  +1    -0    src/core/localdatabase/autotests/CMakeLists.txt
A  +94   -0    src/core/localdatabase/autotests/e2eroomsdatabasetest.cpp     [License: LGPL(v2.0+)]
A  +19   -0    src/core/localdatabase/autotests/e2eroomsdatabasetest.h     [License: LGPL(v2.0+)]

https://invent.kde.org/network/ruqola/-/commit/6e88907b840cd7e9818de0e58c0af9489fb33722

diff --git a/src/core/localdatabase/autotests/CMakeLists.txt b/src/core/localdatabase/autotests/CMakeLists.txt
index 37f9f72ffc..d82041777c 100644
--- a/src/core/localdatabase/autotests/CMakeLists.txt
+++ b/src/core/localdatabase/autotests/CMakeLists.txt
@@ -35,6 +35,7 @@ add_ruqola_localdatabase_test(localroomsdatabasetest.cpp)
 add_ruqola_localdatabase_test(localdatabasebasetest.cpp)
 if(USE_E2E_SUPPORT)
     add_ruqola_localdatabase_test(e2edatabasetest.cpp)
+    add_ruqola_localdatabase_test(e2eroomsdatabasetest.cpp)
 endif()
 add_ruqola_localdatabase_test(localroompendingtypedinfodatabasetest.cpp)
 add_ruqola_localdatabase_test(localroomsubscriptionsdatabasetest.cpp)
diff --git a/src/core/localdatabase/autotests/e2eroomsdatabasetest.cpp b/src/core/localdatabase/autotests/e2eroomsdatabasetest.cpp
new file mode 100644
index 0000000000..38cc7794f6
--- /dev/null
+++ b/src/core/localdatabase/autotests/e2eroomsdatabasetest.cpp
@@ -0,0 +1,94 @@
+/*
+   SPDX-FileCopyrightText: 2025 Andro Ranogajec <[email protected]>
+   SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "e2eroomsdatabasetest.h"
+#include "encryption/encryptionutils.h"
+#include "localdatabase/e2eroomsdatabase.h"
+#include <QTest>
+
+QTEST_GUILESS_MAIN(E2ERoomsDataBaseTest)
+using namespace Qt::Literals::StringLiterals;
+const auto testUser = QStringLiteral("testuser");
+const auto otherUser = QStringLiteral("otheruser");
+static QString accountName()
+{
+    return u"myAccount"_s;
+}
+using namespace Qt::Literals::StringLiterals;
+void E2ERoomsDataBaseTest::initTestCase()
+{
+    E2ERoomsDataBase store;
+    QVERIFY(store.deleteKey(accountName(), testUser));
+    QVERIFY(store.deleteKey(accountName(), otherUser));
+}
+
+void E2ERoomsDataBaseTest::shouldDefaultValues()
+{
+    E2ERoomsDataBase E2ERoomsDataBase;
+    QCOMPARE(E2ERoomsDataBase.schemaDatabaseStr(), u"CREATE TABLE E2EKEYS (userId TEXT PRIMARY KEY NOT NULL, encryptedPrivateKey BLOB, publicKey BLOB)"_s);
+}
+
+void E2ERoomsDataBaseTest::testSaveLoadDelete()
+{
+    E2ERoomsDataBase store;
+    const auto userId = testUser;
+    const auto rsaKeyPair = EncryptionUtils::generateRSAKey();
+    const auto priv = rsaKeyPair.publicKey;
+    const auto pub = rsaKeyPair.privateKey;
+
+    QVERIFY(store.saveKey(accountName(), userId, priv, pub));
+    QVERIFY(store.hasKey(accountName(), userId));
+
+    QByteArray loadedPriv;
+    QByteArray loadedPub;
+    QVERIFY(store.loadKey(accountName(), userId, loadedPriv, loadedPub));
+    QCOMPARE(loadedPriv, priv);
+    QCOMPARE(loadedPub, pub);
+
+    QVERIFY(store.deleteKey(accountName(), userId));
+    QVERIFY(!store.hasKey(accountName(), userId));
+}
+
+void E2ERoomsDataBaseTest::testOverwrite()
+{
+    E2ERoomsDataBase store;
+    const auto userId = testUser;
+    const auto rsaKeyPair1 = EncryptionUtils::generateRSAKey();
+    const auto rsaKeyPair2 = EncryptionUtils::generateRSAKey();
+
+    const auto priv1 = rsaKeyPair1.privateKey;
+    const auto pub1 = rsaKeyPair1.publicKey;
+    const auto priv2 = rsaKeyPair2.privateKey;
+    const auto pub2 = rsaKeyPair2.publicKey;
+
+    QVERIFY(store.saveKey(accountName(), userId, priv1, pub1));
+    {
+        QByteArray loadedPriv, loadedPub;
+        QVERIFY(store.loadKey(accountName(), userId, loadedPriv, loadedPub));
+        QCOMPARE(loadedPriv, priv1);
+        QCOMPARE(loadedPub, pub1);
+    }
+
+    QVERIFY(store.saveKey(accountName(), userId, priv2, pub2));
+    {
+        QByteArray loadedPriv, loadedPub;
+        QVERIFY(store.loadKey(accountName(), userId, loadedPriv, loadedPub));
+        QCOMPARE(loadedPriv, priv2);
+        QCOMPARE(loadedPub, pub2);
+    }
+    QVERIFY(store.deleteKey(accountName(), userId));
+}
+
+void E2ERoomsDataBaseTest::testNonExistentKey()
+{
+    E2ERoomsDataBase store;
+    const auto userId = otherUser;
+    QByteArray priv, pub;
+    QVERIFY(!store.hasKey(accountName(), userId));
+    QVERIFY(!store.loadKey(accountName(), userId, priv, pub));
+    QVERIFY(store.deleteKey(accountName(), userId));
+}
+
+#include "moc_e2eroomsdatabasetest.cpp"
diff --git a/src/core/localdatabase/autotests/e2eroomsdatabasetest.h b/src/core/localdatabase/autotests/e2eroomsdatabasetest.h
new file mode 100644
index 0000000000..62905894b4
--- /dev/null
+++ b/src/core/localdatabase/autotests/e2eroomsdatabasetest.h
@@ -0,0 +1,19 @@
+/*
+   SPDX-FileCopyrightText: 2025 Andro Ranogajec <[email protected]>
+   SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#pragma once
+
+#include <QObject>
+
+class E2ERoomsDataBaseTest : public QObject
+{
+    Q_OBJECT
+private Q_SLOTS:
+    void initTestCase();
+    void testSaveLoadDelete();
+    void testOverwrite();
+    void testNonExistentKey();
+    void shouldDefaultValues();
+};