aboutsummaryrefslogtreecommitdiff
path: root/autotests/testkeyverification.cpp
diff options
context:
space:
mode:
authorTobias Fella <fella@posteo.de>2022-09-06 21:35:27 +0200
committerTobias Fella <fella@posteo.de>2022-09-06 21:35:27 +0200
commitecf6b855b0fc8cbe16d34b67ae1dca7bd9b69948 (patch)
tree5e091f5c114cecd1082d45fb17361438a39f3624 /autotests/testkeyverification.cpp
parent66127730592eadf9ee717a53a521ac2ec14f1051 (diff)
downloadlibquotient-ecf6b855b0fc8cbe16d34b67ae1dca7bd9b69948.tar.gz
libquotient-ecf6b855b0fc8cbe16d34b67ae1dca7bd9b69948.zip
Add autotest for key verification and fix several edge-cases
Diffstat (limited to 'autotests/testkeyverification.cpp')
-rw-r--r--autotests/testkeyverification.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/autotests/testkeyverification.cpp b/autotests/testkeyverification.cpp
new file mode 100644
index 00000000..fbbb7614
--- /dev/null
+++ b/autotests/testkeyverification.cpp
@@ -0,0 +1,50 @@
+// SPDX-FileCopyrightText: 2022 Tobias Fella <fella@posteo.de>
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+#include "testkeyverification.h"
+#include "qt_connection_util.h"
+
+void TestKeyVerificationSession::testVerification()
+{
+ CREATE_CONNECTION(a, "alice1", "secret", "AliceDesktop")
+ CREATE_CONNECTION(b, "alice1", "secret", "AlicePhone")
+
+ KeyVerificationSession *aSession = nullptr;
+ connect(a.get(), &Connection::newKeyVerificationSession, this, [&](KeyVerificationSession* session) {
+ aSession = session;
+ QVERIFY(session->remoteDeviceId() == b->deviceId());
+ QVERIFY(session->state() == KeyVerificationSession::WAITINGFORREADY);
+ connectSingleShot(session, &KeyVerificationSession::stateChanged, this, [=](){
+ QVERIFY(session->state() == KeyVerificationSession::ACCEPTED);
+ connectSingleShot(session, &KeyVerificationSession::stateChanged, this, [=](){
+ QVERIFY(session->state() == KeyVerificationSession::WAITINGFORVERIFICATION);
+ session->sendMac();
+ });
+ });
+ });
+ a->startKeyVerificationSession(b->deviceId());
+ connect(b.get(), &Connection::newKeyVerificationSession, this, [=](KeyVerificationSession* session) {
+ QVERIFY(session->remoteDeviceId() == a->deviceId());
+ QVERIFY(session->state() == KeyVerificationSession::INCOMING);
+ session->sendReady();
+ // KeyVerificationSession::READY is skipped because we have only one method
+ QVERIFY(session->state() == KeyVerificationSession::WAITINGFORACCEPT);
+ connectSingleShot(session, &KeyVerificationSession::stateChanged, this, [=](){
+ QVERIFY(session->state() == KeyVerificationSession::WAITINGFORKEY || session->state() == KeyVerificationSession::ACCEPTED);
+ connectSingleShot(session, &KeyVerificationSession::stateChanged, this, [=]() {
+ QVERIFY(session->state() == KeyVerificationSession::WAITINGFORVERIFICATION);
+ QVERIFY(aSession);
+ QVERIFY(aSession->sasEmojis() == session->sasEmojis());
+ session->sendMac();
+ QVERIFY(session->state() == KeyVerificationSession::WAITINGFORMAC);
+ });
+ });
+
+ });
+ b->syncLoop();
+ a->syncLoop();
+ QSignalSpy spy(b.get(), &Connection::incomingKeyVerificationDone);
+ spy.wait(10000);
+}
+QTEST_GUILESS_MAIN(TestKeyVerificationSession)