This is an automated email from the ASF dual-hosted git repository. ralaoui pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-vysper.git
The following commit(s) were added to refs/heads/master by this push: new 64f557e XEP-0313 MAM: missing attribute "by" on stanza-id element 64f557e is described below commit 64f557ef00a8520b4116ac159f515b7aa5c6ac81 Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Sun Sep 8 20:24:41 2019 +0200 XEP-0313 MAM: missing attribute "by" on stanza-id element --- .../extension/xep0313_mam/MessageStanzaWithId.java | 4 --- .../xep0313_mam/user/UserMessageStanzaBroker.java | 8 ++--- .../xep0313_mam/user/UserArchiveTest.java | 36 ++++++++++++++++------ 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java index 5de0fd2..73ad748 100644 --- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java +++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java @@ -46,10 +46,6 @@ public class MessageStanzaWithId { private final Entity archiveId; - public MessageStanzaWithId(ArchivedMessage archivedMessage) { - this(archivedMessage, null); - } - public MessageStanzaWithId(ArchivedMessage archivedMessage, Entity archiveId) { this.archivedMessage = requireNonNull(archivedMessage); this.archiveId = archiveId; diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java index b818253..4fcc1bc 100644 --- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java +++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java @@ -108,8 +108,7 @@ class UserMessageStanzaBroker extends DelegatingStanzaBroker { addToSenderArchive(messageStanza, sessionContext); return messageStanza; } else { - return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::new).map(MessageStanzaWithId::toStanza) - .orElse(stanza); + return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::toStanza).orElse(stanza); } } @@ -125,7 +124,7 @@ class UserMessageStanzaBroker extends DelegatingStanzaBroker { senderArchive.get().archive(new SimpleMessage(messageStanza)); } - private Optional<ArchivedMessage> addToReceiverArchive(MessageStanza messageStanza) { + private Optional<MessageStanzaWithId> addToReceiverArchive(MessageStanza messageStanza) { // Servers that expose archive messages of sent/received messages on behalf of // local users MUST expose these archives to the user on the user's bare JID. Entity receiverArchiveId = requireNonNull(messageStanza.getTo(), "No 'to' found in " + messageStanza) @@ -136,7 +135,8 @@ class UserMessageStanzaBroker extends DelegatingStanzaBroker { return Optional.empty(); } - return Optional.ofNullable(receiverArchive.get().archive(new SimpleMessage(messageStanza))); + ArchivedMessage archivedMessage = receiverArchive.get().archive(new SimpleMessage(messageStanza)); + return Optional.of(new MessageStanzaWithId(archivedMessage, receiverArchiveId)); } private MessageArchives messageArchives() { diff --git a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java index 9e1fbb4..ba577ed 100644 --- a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java +++ b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java @@ -22,7 +22,6 @@ package org.apache.vysper.xmpp.modules.extension.xep0313_mam.user; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -69,6 +68,25 @@ public class UserArchiveTest extends IntegrationTest { } @Test + public void receivedArchivedMessageShouldHaveAStanzaId() throws SmackException.NotConnectedException, InterruptedException { + AtomicReference<Message> carolReceivedMessage = new AtomicReference<>(); + ChatManager.getInstanceFor(carol()) + .addIncomingListener((from, message, chat) -> carolReceivedMessage.set(message)); + + Chat chatFromAliceToCarol = ChatManager.getInstanceFor(alice()).chatWith(carol().getUser().asEntityBareJid()); + chatFromAliceToCarol.send("Hello carol"); + + Thread.sleep(200); + + assertNotNull(carolReceivedMessage.get()); + + StanzaIdElement stanzaIdElement = extractStanzaId(carolReceivedMessage.get()); + assertNotNull(stanzaIdElement); + assertNotNull(stanzaIdElement.getId()); + assertEquals(carol().getUser().asEntityBareJid(), stanzaIdElement.getBy()); + } + + @Test public void sendMessageAndQuerySenderAndReceiverArchive() throws SmackException.NotConnectedException, InterruptedException, SmackException.NotLoggedInException, XMPPException.XMPPErrorException, SmackException.NoResponseException { @@ -89,7 +107,7 @@ public class UserArchiveTest extends IntegrationTest { assertEquals(alice().getUser(), toCarolArchivedMessage.getFrom()); assertEquals(carol().getUser().asEntityBareJidOrThrow(), toCarolArchivedMessage.getTo().asEntityBareJidOrThrow()); - String toCarolArchivedMessageId = extractStanzaId(toCarolArchivedMessage); + String toCarolArchivedMessageId = extractStanzaId(toCarolArchivedMessage).getId(); MamManager.MamQuery carolArchive = MamManager.getInstanceFor(carol()).queryArchive(fullQuery); @@ -100,10 +118,10 @@ public class UserArchiveTest extends IntegrationTest { assertEquals(alice().getUser(), fromAliceArchivedMessage.getFrom()); assertEquals(carol().getUser().asEntityBareJidOrThrow(), fromAliceArchivedMessage.getTo().asEntityBareJidOrThrow()); - String fromAliceArchivedMessageId = extractStanzaId(fromAliceArchivedMessage); + String fromAliceArchivedMessageId = extractStanzaId(fromAliceArchivedMessage).getId(); assertFalse(toCarolArchivedMessageId.equals(fromAliceArchivedMessageId)); - assertEquals(extractStanzaId(carolReceivedMessage.get()), fromAliceArchivedMessageId); + assertEquals(extractStanzaId(carolReceivedMessage.get()).getId(), fromAliceArchivedMessageId); } @Test @@ -193,10 +211,10 @@ public class UserArchiveTest extends IntegrationTest { assertEquals("Hello carol", carolReceivedMessage.get().getBody()); Message archivedMessage = fetchUniqueArchivedMessage(carol()); - String storedStanzaId = extractStanzaId(archivedMessage); + String storedStanzaId = extractStanzaId(archivedMessage).getId(); assertNotNull(storedStanzaId); - String receivedStanzaId = extractStanzaId(carolReceivedMessage.get()); + String receivedStanzaId = extractStanzaId(carolReceivedMessage.get()).getId(); assertEquals(storedStanzaId, receivedStanzaId); } @@ -220,7 +238,7 @@ public class UserArchiveTest extends IntegrationTest { Thread.sleep(200); Message archivedMessage = fetchUniqueArchivedMessage(carol()); - String storedStanzaId = extractStanzaId(archivedMessage); + String storedStanzaId = extractStanzaId(archivedMessage).getId(); assertNotNull(storedStanzaId); } @@ -284,14 +302,14 @@ public class UserArchiveTest extends IntegrationTest { return archive.getMessages().get(0); } - private String extractStanzaId(Stanza stanza) { + private StanzaIdElement extractStanzaId(Stanza stanza) { assertNotNull(stanza); ExtensionElement extensionElement = stanza.getExtension(NamespaceURIs.XEP0359_STANZA_IDS); if (!(extensionElement instanceof StanzaIdElement)) { fail("No stanza id in " + stanza); } - return ((StanzaIdElement) extensionElement).getId(); + return (StanzaIdElement) extensionElement; } }