diff options
author | Tobias Markmann <tm@ayena.de> | 2017-04-03 14:02:33 (GMT) |
---|---|---|
committer | Kevin Smith <kevin.smith@isode.com> | 2017-04-10 08:54:25 (GMT) |
commit | ebd98c32281e2c2689480357f7e8ce6084e16384 (patch) | |
tree | 6e14aaf6211a79966edfe3e4536d6bb899a9eeeb /Swift/Controllers/Chat/UnitTest | |
parent | 0b4c4ade26c7ff77ba7f8b4ae83e4bd3581bf345 (diff) | |
download | swift-ebd98c32281e2c2689480357f7e8ce6084e16384.zip swift-ebd98c32281e2c2689480357f7e8ce6084e16384.tar.bz2 |
Ignore incoming duplicates of messages
This might happen with some servers and their MUC implementation
which send you not only the original message but also multiple
carbon copies of it for MUC PM conversations.
This change will ignore any message that has the same
non-empty message ID as the previously incoming message.
Test-Information:
Added unit test to verify new behaviour. Tested in a MUC where
the server would send you the original message and multiple
carbon copies of the message. Previously the chat view would
show and incoming MUC PM message 4 times. Now it’s only shown
once.
Builds and tests pass on macOS 10.12.4.
Change-Id: Ie7bd29dacc00f8f3962131a529b52a69ff09bd6c
Diffstat (limited to 'Swift/Controllers/Chat/UnitTest')
-rw-r--r-- | Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp | 40 | ||||
-rw-r--r-- | Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp | 2 |
2 files changed, 41 insertions, 1 deletions
diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp index 2f77ec7..d104fbd 100644 --- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp +++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp @@ -135,6 +135,7 @@ class ChatsManagerTest : public CppUnit::TestFixture { // Carbons tests CPPUNIT_TEST(testCarbonsForwardedIncomingMessageToSecondResource); CPPUNIT_TEST(testCarbonsForwardedOutgoingMessageFromSecondResource); + CPPUNIT_TEST(testCarbonsForwardedIncomingDuplicates); CPPUNIT_TEST_SUITE_END(); @@ -1265,6 +1266,45 @@ public: } } + void testCarbonsForwardedIncomingDuplicates() { + JID messageJID("testling@test.com/resource1"); + JID jid2 = jid_.toBare().withResource("someOtherResource"); + + MockChatWindow* window = new MockChatWindow(); + mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID, uiEventStream_).Return(window); + + std::shared_ptr<Message> message(new Message()); + message->setFrom(messageJID); + std::string body("This is a legible message. >HEH@)oeueu"); + message->setBody(body); + manager_->handleIncomingMessage(message); + CPPUNIT_ASSERT_EQUAL(body, MockChatWindow::bodyFromMessage(window->lastAddedMessage_)); + + // incoming carbons message from another resource and duplicate of it + { + auto originalMessage = std::make_shared<Message>(); + originalMessage->setFrom(messageJID); + originalMessage->setTo(jid2); + originalMessage->setID("BDD82F0B-2523-48BF-B8CA-17B23A314BC2"); + originalMessage->setType(Message::Chat); + std::string forwardedBody = "Some further text."; + originalMessage->setBody(forwardedBody); + + auto messageWrapper = createCarbonsMessage(std::make_shared<CarbonsReceived>(), originalMessage); + + manager_->handleIncomingMessage(messageWrapper); + + CPPUNIT_ASSERT_EQUAL(forwardedBody, MockChatWindow::bodyFromMessage(window->lastAddedMessage_)); + CPPUNIT_ASSERT_EQUAL(false, window->lastAddedMessageSenderIsSelf_); + window->resetLastMessages(); + + messageWrapper = createCarbonsMessage(std::make_shared<CarbonsReceived>(), originalMessage); + manager_->handleIncomingMessage(messageWrapper); + CPPUNIT_ASSERT_EQUAL(std::string(), MockChatWindow::bodyFromMessage(window->lastAddedMessage_)); + CPPUNIT_ASSERT_EQUAL(false, window->lastAddedMessageSenderIsSelf_); + } + } + private: std::shared_ptr<Message> makeDeliveryReceiptTestMessage(const JID& from, const std::string& id) { std::shared_ptr<Message> message = std::make_shared<Message>(); diff --git a/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp b/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp index 59c3a87..e7b4b3e 100644 --- a/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp +++ b/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp @@ -439,7 +439,7 @@ public: message->setType(Message::Groupchat); message->setTo(self_); message->setFrom(mucJID_.withResource("SomeNickname")); - message->setID(iqChannel_->getNewIQID()); + message->setID("3FB99C56-7C92-4755-91B0-9C0098BC7AE0"); message->setSubject("New Room Subject"); controller_->handleIncomingMessage(std::make_shared<MessageEvent>(message)); |