From 51df87226b9b07027bb387300b04be6c3844fcee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?= <francois-simon.fauteux-chapleau@savoirfairelinux.com> Date: Mon, 22 Jul 2024 10:48:06 -0400 Subject: [PATCH] contact_list: fix trust request update bugs https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1804 Change-Id: I8cb3ffc7d5b1b2b8bbfe018b922c260a569411fb --- src/jamidht/contact_list.cpp | 3 ++- .../conversation/conversationMembersEvent.cpp | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp index 06571785fc..502e79eb48 100644 --- a/src/jamidht/contact_list.cpp +++ b/src/jamidht/contact_list.cpp @@ -327,8 +327,9 @@ ContactList::onTrustRequest(const dht::InfoHash& peer_account, .first; } else { // Update trust request - if (received < req->second.received) { + if (received > req->second.received) { req->second.device = peer_device; + req->second.conversationId = conversationId; req->second.received = received; req->second.payload = payload; } else { diff --git a/test/unitTest/conversation/conversationMembersEvent.cpp b/test/unitTest/conversation/conversationMembersEvent.cpp index a010307983..15405b532e 100644 --- a/test/unitTest/conversation/conversationMembersEvent.cpp +++ b/test/unitTest/conversation/conversationMembersEvent.cpp @@ -1657,12 +1657,25 @@ ConversationMembersEventTest::testAddContactTwice() std::cout << "\nRunning test: " << __func__ << std::endl; auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); + auto aliceUri = aliceAccount->getUsername(); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); auto bobUri = bobAccount->getUsername(); + // Add contact aliceAccount->addContact(bobUri); aliceAccount->sendTrustRequest(bobUri, {}); CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return bobData.requestReceived; })); + auto oldConversationId = aliceData.conversationId; + CPPUNIT_ASSERT(!oldConversationId.empty()); + + // Check that the trust request's data is correct + auto bobTrustRequests = bobAccount->getTrustRequests(); + CPPUNIT_ASSERT(bobTrustRequests.size() == 1); + auto request = bobTrustRequests[0]; + CPPUNIT_ASSERT(request["from"] == aliceUri); + CPPUNIT_ASSERT(request["conversationId"] == oldConversationId); + + // Remove and re-add contact aliceAccount->removeContact(bobUri, false); CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return aliceData.removed; })); // wait that connections are closed. @@ -1671,6 +1684,17 @@ ConversationMembersEventTest::testAddContactTwice() aliceAccount->addContact(bobUri); aliceAccount->sendTrustRequest(bobUri, {}); CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return bobData.requestRemoved && bobData.requestReceived; })); + auto newConversationId = aliceData.conversationId; + CPPUNIT_ASSERT(!newConversationId.empty()); + CPPUNIT_ASSERT(newConversationId != oldConversationId); + + // Check that the trust request's data was correctly + // updated when we received the second request + bobTrustRequests = bobAccount->getTrustRequests(); + CPPUNIT_ASSERT(bobTrustRequests.size() == 1); + request = bobTrustRequests[0]; + CPPUNIT_ASSERT(request["from"] == aliceUri); + CPPUNIT_ASSERT(request["conversationId"] == newConversationId); } void -- GitLab