mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
tests: fix some sporadic failures
Use member event signal to check if a member is removed and avoid merge id Change-Id: Ifc18d5e12594bedf2f47bbc5d6d88a9c0dfbd6c7
This commit is contained in:
@ -57,6 +57,7 @@ struct UserData {
|
||||
std::string payloadTrustRequest;
|
||||
std::vector<libjami::SwarmMessage> messages;
|
||||
std::vector<libjami::SwarmMessage> messagesUpdated;
|
||||
std::map<std::string, int> members;
|
||||
};
|
||||
|
||||
class ConversationMembersEventTest : public CppUnit::TestFixture
|
||||
@ -269,6 +270,19 @@ ConversationMembersEventTest::connectSignals()
|
||||
}
|
||||
cv.notify_one();
|
||||
}));
|
||||
confHandlers.insert(libjami::exportable_callback<libjami::ConversationSignal::ConversationMemberEvent>(
|
||||
[&](const std::string& accountId, const std::string& conversationId, const auto& member, auto status) {
|
||||
if (accountId == aliceId) {
|
||||
aliceData.members[member] = status;
|
||||
} else if (accountId == bobId) {
|
||||
bobData.members[member] = status;
|
||||
} else if (accountId == bob2Id) {
|
||||
bob2Data.members[member] = status;
|
||||
} else if (accountId == carlaId) {
|
||||
carlaData.members[member] = status;
|
||||
}
|
||||
cv.notify_one();
|
||||
}));
|
||||
confHandlers.insert(
|
||||
libjami::exportable_callback<libjami::ConfigurationSignal::IncomingTrustRequest>(
|
||||
[&](const std::string& account_id,
|
||||
@ -890,26 +904,22 @@ ConversationMembersEventTest::testMemberCannotBanOther()
|
||||
libjami::addConversationMember(aliceId, convId, bobUri);
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() { return bobData.requestReceived; }));
|
||||
auto aliceMsgSize = aliceData.messages.size();
|
||||
libjami::acceptConversationRequest(bobId, convId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !bobData.conversationId.empty() && aliceMsgSize + 1 == aliceData.messages.size(); }));
|
||||
auto bobMsgSize = bobData.messages.size();
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !bobData.conversationId.empty() && aliceData.members[bobUri] == 1; }));
|
||||
libjami::addConversationMember(aliceId, convId, carlaUri);
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() {
|
||||
return aliceMsgSize + 2 == aliceData.messages.size() && bobMsgSize + 1 == bobData.messages.size() && carlaData.requestReceived; }));
|
||||
aliceMsgSize = aliceData.messages.size();
|
||||
bobMsgSize = bobData.messages.size();
|
||||
return aliceData.members.find(carlaUri) != aliceData.members.end() && bobData.members.find(carlaUri) != bobData.members.end() && carlaData.requestReceived; }));
|
||||
libjami::acceptConversationRequest(carlaId, convId);
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() { return !carlaData.conversationId.empty() && aliceMsgSize + 1 == aliceData.messages.size() && bobMsgSize + 1 == bobData.messages.size(); }));
|
||||
cv.wait_for(lk, 30s, [&]() { return !carlaData.conversationId.empty() && aliceData.members[carlaUri] == 1 && bobData.members[carlaUri] == 1; }));
|
||||
|
||||
// Now Carla remove Bob as a member
|
||||
// remove from member & add into banned without voting for the ban
|
||||
simulateRemoval(carlaAccount, convId, bobUri);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return aliceData.errorDetected; }));
|
||||
|
||||
bobMsgSize = bobData.messages.size();
|
||||
auto bobMsgSize = bobData.messages.size();
|
||||
libjami::sendMessage(aliceId, convId, "hi"s, "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return bobMsgSize + 1 == bobData.messages.size(); }));
|
||||
}
|
||||
@ -939,27 +949,22 @@ ConversationMembersEventTest::testMemberCannotUnBanOther()
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() { return carlaData.requestReceived; }));
|
||||
aliceMsgSize = aliceData.messages.size();
|
||||
auto bobMsgSize = bobData.messages.size();
|
||||
libjami::acceptConversationRequest(carlaId, convId);
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() { return !carlaData.conversationId.empty()
|
||||
&& aliceMsgSize + 1 == aliceData.messages.size()
|
||||
&& bobMsgSize + 1 == bobData.messages.size(); }));
|
||||
&& aliceData.members[carlaUri] == 1
|
||||
&& bobData.members[carlaUri] == 1; }));
|
||||
|
||||
// Now check that alice, has the only admin, can remove bob
|
||||
aliceMsgSize = aliceData.messages.size();
|
||||
libjami::removeConversationMember(aliceId, convId, bobUri);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return aliceMsgSize + 2 == aliceData.messages.size(); }));
|
||||
auto msgId = aliceData.messages.rbegin()->id;
|
||||
auto getMessage = [](const auto& data, const auto& mid) -> bool {
|
||||
return std::find_if(data.messages.begin(), data.messages.end(), [&](auto& msg) { return msg.id == mid; }) != data.messages.end();
|
||||
};
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return getMessage(carlaData, msgId); }));
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() { return aliceData.members[bobUri] == 3
|
||||
&& carlaData.members[bobUri] == 3; }));
|
||||
|
||||
aliceMsgSize = aliceData.messages.size();
|
||||
libjami::addConversationMember(carlaId, convId, bobUri);
|
||||
CPPUNIT_ASSERT(
|
||||
!cv.wait_for(lk, 30s, [&]() { return aliceMsgSize + 2 == aliceData.messages.size();; }));
|
||||
!cv.wait_for(lk, 10s, [&]() { return aliceData.members[bobUri] == 1
|
||||
&& carlaData.members[bobUri] == 1; }));
|
||||
auto members = libjami::getConversationMembers(aliceId, convId);
|
||||
auto bobBanned = false;
|
||||
for (auto& member : members) {
|
||||
@ -1574,9 +1579,16 @@ ConversationMembersEventTest::testBanUnbanGotFirstConv()
|
||||
|
||||
// Alice can sends some messages now
|
||||
aliceMsgSize = aliceData.messages.size();
|
||||
auto getMessageFromBody = [](const auto& data, const auto& body) -> std::string {
|
||||
auto it = std::find_if(data.messages.begin(), data.messages.end(), [&](auto& msg) { return msg.body.find("body") != msg.body.end() && msg.body.at("body") == body; });
|
||||
if (it != data.messages.end()) {
|
||||
return it->id;
|
||||
}
|
||||
return {};
|
||||
};
|
||||
libjami::sendMessage(aliceId, aliceData.conversationId, "hi"s, "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return aliceMsgSize != aliceData.messages.size(); }));
|
||||
msgId = aliceData.messages.rbegin()->id;
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !getMessageFromBody(aliceData, "hi").empty(); }));
|
||||
msgId = getMessageFromBody(aliceData, "hi");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return getMessage(bobData, msgId) && getMessage(bob2Data, msgId); }));
|
||||
}
|
||||
|
||||
|
@ -57,6 +57,7 @@ struct UserData {
|
||||
std::vector<libjami::SwarmMessage> messages;
|
||||
std::vector<libjami::SwarmMessage> messagesLoaded;
|
||||
std::vector<libjami::SwarmMessage> messagesUpdated;
|
||||
std::map<std::string, int> members;
|
||||
};
|
||||
|
||||
class SyncHistoryTest : public CppUnit::TestFixture
|
||||
@ -210,6 +211,17 @@ SyncHistoryTest::connectSignals()
|
||||
alice2Data.profilePath = path;
|
||||
cv.notify_one();
|
||||
}));
|
||||
confHandlers.insert(libjami::exportable_callback<libjami::ConversationSignal::ConversationMemberEvent>(
|
||||
[&](const std::string& accountId, const std::string& conversationId, const auto& member, auto status) {
|
||||
if (accountId == aliceId) {
|
||||
aliceData.members[member] = status;
|
||||
} else if (accountId == bobId) {
|
||||
bobData.members[member] = status;
|
||||
} else if (accountId == alice2Id) {
|
||||
alice2Data.members[member] = status;
|
||||
}
|
||||
cv.notify_one();
|
||||
}));
|
||||
confHandlers.insert(
|
||||
libjami::exportable_callback<libjami::ConfigurationSignal::AccountMessageStatusChanged>(
|
||||
[&](const std::string& accountId,
|
||||
@ -283,6 +295,8 @@ SyncHistoryTest::connectSignals()
|
||||
aliceData.messages.emplace_back(message);
|
||||
} else if (accountId == bobId) {
|
||||
bobData.messages.emplace_back(message);
|
||||
} else if (accountId == alice2Id) {
|
||||
alice2Data.messages.emplace_back(message);
|
||||
}
|
||||
cv.notify_one();
|
||||
}));
|
||||
@ -874,34 +888,55 @@ SyncHistoryTest::testLastInteractionAfterSomeMessages()
|
||||
details[ConfProperties::ARCHIVE_PIN] = "";
|
||||
details[ConfProperties::ARCHIVE_PATH] = aliceArchive;
|
||||
alice2Id = Manager::instance().addAccount(details);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() {return alice2Data.deviceAnnounced; }));
|
||||
auto getMessageFromBody = [](const auto& data, const auto& body) -> std::string {
|
||||
auto it = std::find_if(data.messages.begin(), data.messages.end(), [&](auto& msg) { return msg.body.find("body") != msg.body.end() && msg.body.at("body") == body; });
|
||||
if (it != data.messages.end()) {
|
||||
return it->id;
|
||||
}
|
||||
return {};
|
||||
};
|
||||
auto getMessage = [](const auto& data, const auto& mid) -> bool {
|
||||
return std::find_if(data.messages.begin(), data.messages.end(), [&](auto& msg) { return msg.id == mid; }) != data.messages.end();
|
||||
};
|
||||
|
||||
aliceAccount->addContact(bobUri);
|
||||
aliceAccount->sendTrustRequest(bobUri, {});
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return bobData.requestReceived && !alice2Data.conversationId.empty(); }));
|
||||
|
||||
auto aliceMsgSize = aliceData.messages.size();
|
||||
CPPUNIT_ASSERT(bobAccount->acceptTrustRequest(aliceUri));
|
||||
CPPUNIT_ASSERT(
|
||||
cv.wait_for(lk, 30s, [&]() { return aliceMsgSize + 1 == aliceData.messages.size(); }));
|
||||
cv.wait_for(lk, 30s, [&]() { return aliceData.members[bobUri] == 1 && alice2Data.members[bobUri] == 1; }));
|
||||
|
||||
// Start conversation
|
||||
bobData.messages.clear();
|
||||
libjami::sendMessage(bobId, aliceData.conversationId, std::string("Message 1"), "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return aliceMsgSize + 2 == aliceData.messages.size(); }));
|
||||
libjami::sendMessage(bobId, aliceData.conversationId, std::string("Message 2"), "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return aliceMsgSize + 3 == aliceData.messages.size(); }));
|
||||
libjami::sendMessage(bobId, aliceData.conversationId, std::string("Message 3"), "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return aliceMsgSize + 4 == aliceData.messages.size(); }));
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !getMessageFromBody(bobData, "Message 1").empty(); }));
|
||||
auto msgId = getMessageFromBody(bobData, "Message 1");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return getMessage(aliceData, msgId) && getMessage(alice2Data, msgId); }));
|
||||
|
||||
auto displayedId = aliceData.messages.rbegin()->id;
|
||||
libjami::setMessageDisplayed(aliceId, "swarm:" + aliceData.conversationId, displayedId, 3);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return aliceData.sent && alice2Data.sent; }));
|
||||
bobData.messages.clear();
|
||||
libjami::sendMessage(bobId, aliceData.conversationId, std::string("Message 2"), "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !getMessageFromBody(bobData, "Message 2").empty(); }));
|
||||
msgId = getMessageFromBody(bobData, "Message 2");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return getMessage(aliceData, msgId) && getMessage(alice2Data, msgId); }));
|
||||
|
||||
bobData.messages.clear();
|
||||
libjami::sendMessage(bobId, aliceData.conversationId, std::string("Message 3"), "");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !getMessageFromBody(bobData, "Message 3").empty(); }));
|
||||
msgId = getMessageFromBody(bobData, "Message 3");
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return getMessage(aliceData, msgId) && getMessage(alice2Data, msgId); }));
|
||||
|
||||
libjami::setMessageDisplayed(aliceId, "swarm:" + aliceData.conversationId, msgId, 3);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] {
|
||||
return aliceData.sent && alice2Data.sent; }));
|
||||
|
||||
auto membersInfos = libjami::getConversationMembers(alice2Id, alice2Data.conversationId);
|
||||
CPPUNIT_ASSERT(std::find_if(membersInfos.begin(),
|
||||
membersInfos.end(),
|
||||
[&](auto infos) {
|
||||
return infos["uri"] == aliceUri
|
||||
&& infos["lastDisplayed"] == displayedId;
|
||||
&& infos["lastDisplayed"] == msgId;
|
||||
})
|
||||
!= membersInfos.end());
|
||||
}
|
||||
|
Reference in New Issue
Block a user