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 ae7a450 Message archive management: do not archive message without
bodies
ae7a450 is described below
commit ae7a45012824228135a07d733903f8f267f8519b
Author: Réda Housni Alaoui <[email protected]>
AuthorDate: Sat Sep 7 23:59:22 2019 +0200
Message archive management: do not archive message without bodies
---
.../xep0313_mam/user/UserMessageStanzaBroker.java | 19 +++++++++++--
.../user/UserMessageStanzaBrokerTest.java | 32 ++++++++++++++++------
2 files changed, 40 insertions(+), 11 deletions(-)
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 1acac01..9e6f77c 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
@@ -21,8 +21,11 @@ package
org.apache.vysper.xmpp.modules.extension.xep0313_mam.user;
import static java.util.Objects.requireNonNull;
+import java.util.Map;
import java.util.Optional;
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLSemanticError;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityUtils;
import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
@@ -91,8 +94,20 @@ class UserMessageStanzaBroker extends DelegatingStanzaBroker
{
LOG.debug("Message {} is neither of type 'normal' or 'chat'. It
will not be archived.", messageStanza);
return messageStanza;
}
-
- // TODO Check preferences and no-store element
+
+ Map<String, XMLElement> bodies;
+ try {
+ bodies = messageStanza.getBodies();
+ } catch (XMLSemanticError xmlSemanticError) {
+ return messageStanza;
+ }
+ if (bodies.isEmpty()) {
+ // A server SHOULD include in a user archive all of the messages a
user sends
+ // or receives of type 'normal' or 'chat' that contain a <body>
element.
+ return messageStanza;
+ }
+
+ // TODO Check preferences
addToSenderArchive(messageStanza, sessionContext);
return
addToReceiverArchive(messageStanza).map(MessageStanzaWithId::new).map(MessageStanzaWithId::toStanza)
diff --git
a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java
b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java
index dcfb7f7..2c88020 100644
---
a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java
+++
b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java
@@ -27,8 +27,8 @@ import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityImpl;
import
org.apache.vysper.xmpp.modules.extension.xep0313_mam.ServerRuntimeContextMock;
import org.apache.vysper.xmpp.modules.extension.xep0313_mam.SessionContextMock;
-import
org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.UserMessageArchiveMock;
import
org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.MessageArchivesMock;
+import
org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.UserMessageArchiveMock;
import org.apache.vysper.xmpp.protocol.StanzaBroker;
import org.apache.vysper.xmpp.stanza.MessageStanza;
import org.apache.vysper.xmpp.stanza.MessageStanzaType;
@@ -82,9 +82,8 @@ public class UserMessageStanzaBrokerTest {
return new UserMessageStanzaBroker(delegate, serverRuntimeContext,
sessionContext, isOutboundStanza);
}
- private MessageStanza buildMessageStanza(MessageStanzaType
messageStanzaType, Entity from, Entity to) {
- return new MessageStanza(
- StanzaBuilder.createMessageStanza(from, to, messageStanzaType,
"en", "hello world").build());
+ private MessageStanza buildMessageStanza(MessageStanzaType
messageStanzaType, Entity from, Entity to, String body) {
+ return new MessageStanza(StanzaBuilder.createMessageStanza(from, to,
messageStanzaType, "en", body).build());
}
@Test
@@ -93,7 +92,8 @@ public class UserMessageStanzaBrokerTest {
Stream.of(MessageStanzaType.values()).filter(messageStanzaType ->
messageStanzaType != MessageStanzaType.NORMAL)
.filter(messageStanzaType -> messageStanzaType !=
MessageStanzaType.CHAT).forEach(messageStanzaType -> {
- MessageStanza stanza =
buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE);
+ MessageStanza stanza =
buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE,
+ "hello world");
tested.writeToSession(stanza);
@@ -105,7 +105,8 @@ public class UserMessageStanzaBrokerTest {
Stream.of(MessageStanzaType.CHAT,
MessageStanzaType.NORMAL).forEach(messageStanzaType -> {
julietArchive.clear();
- MessageStanza messageStanza =
buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE);
+ MessageStanza messageStanza =
buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE,
+ "hello world");
tested.writeToSession(messageStanza);
@@ -117,7 +118,7 @@ public class UserMessageStanzaBrokerTest {
public void outboundMessageHavingFrom() {
UserMessageStanzaBroker tested = buildTested(true);
MessageStanza messageStanza =
buildMessageStanza(MessageStanzaType.NORMAL, ROMEO_IN_ORCHARD,
- ALICE_IN_RABBIT_HOLE);
+ ALICE_IN_RABBIT_HOLE, "hello world");
tested.writeToSession(messageStanza);
@@ -128,7 +129,8 @@ public class UserMessageStanzaBrokerTest {
public void outboundMessageWithoutFrom() {
UserMessageStanzaBroker tested = buildTested(true);
- MessageStanza messageStanza =
buildMessageStanza(MessageStanzaType.NORMAL, null, ALICE_IN_RABBIT_HOLE);
+ MessageStanza messageStanza =
buildMessageStanza(MessageStanzaType.NORMAL, null, ALICE_IN_RABBIT_HOLE,
+ "hello world");
tested.writeToSession(messageStanza);
@@ -140,7 +142,7 @@ public class UserMessageStanzaBrokerTest {
UserMessageStanzaBroker tested = buildTested(true);
MessageStanza messageStanza =
buildMessageStanza(MessageStanzaType.NORMAL, ALICE_IN_RABBIT_HOLE,
- ALICE_IN_RABBIT_HOLE);
+ ALICE_IN_RABBIT_HOLE, "hello world");
tested.writeToSession(messageStanza);
@@ -149,4 +151,16 @@ public class UserMessageStanzaBrokerTest {
macbethArchive.assertEmpty();
}
+ @Test
+ public void messageWithoutBody() {
+ UserMessageStanzaBroker tested = buildTested(true);
+ MessageStanza messageStanza =
buildMessageStanza(MessageStanzaType.NORMAL, JULIET_IN_CHAMBER,
ROMEO_IN_ORCHARD,
+ null);
+
+ tested.writeToSession(messageStanza);
+
+ julietArchive.assertEmpty();
+ romeoArchive.assertEmpty();
+ }
+
}
\ No newline at end of file