diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp index 06571785fc95cc5749e15f9362e5ca7060c66005..502e79eb4809f7b6af03c8eb70f7462b2b050832 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 a010307983a3feb44ea86519eb695c7923cba5dd..15405b532ec1b6dfde5b8b02bc713b177e5254d9 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