commit 959b72ad103c5ad4b4ba24cc65dc4731fcfe05fd
parent 10f4472f138d3852fe171112ba570efc12d7de56
Author: Daniel Gultsch <daniel@gultsch.de>
Date:   Wed, 23 Aug 2017 17:58:38 +0200
fixed disco features checker for multiple namespaces
Diffstat:
4 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/src/main/java/eu/siacs/compliance/tests/AbstractDiscoTest.java b/src/main/java/eu/siacs/compliance/tests/AbstractDiscoTest.java
@@ -1,11 +1,15 @@
 package eu.siacs.compliance.tests;
 
 import eu.siacs.compliance.Result;
+import eu.siacs.utils.TestUtils;
 import rocks.xmpp.addr.Jid;
+import rocks.xmpp.core.XmppException;
 import rocks.xmpp.core.session.XmppClient;
+import rocks.xmpp.extensions.disco.ServiceDiscoveryManager;
 import rocks.xmpp.util.concurrent.AsyncResult;
 
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 public abstract class AbstractDiscoTest extends AbstractTest {
@@ -22,15 +26,12 @@ public abstract class AbstractDiscoTest extends AbstractTest {
     @Override
     public Result run() {
         Jid target = checkOnServer() ? Jid.of(client.getConnectedResource().getDomain()) : client.getConnectedResource().asBareJid();
-        for(String namespace : getNamespaces()) {
-            AsyncResult<Boolean> result = client.isSupported(namespace, target);
-            try {
-                Boolean hasCarbons = result.getResult(10, TimeUnit.SECONDS);
-                return hasCarbons ? Result.PASSED : Result.FAILED;
-            } catch (Exception e) {
-                //ignore and go to next namespace
-            }
+        final ServiceDiscoveryManager serviceDiscoveryManager = client.getManager(ServiceDiscoveryManager.class);
+        try {
+            Set<String> features = serviceDiscoveryManager.discoverInformation(target).getResult().getFeatures();
+            return TestUtils.hasAnyone(getNamespaces(),features) ? Result.PASSED : Result.FAILED;
+        } catch (XmppException e) {
+            return Result.FAILED;
         }
-        return Result.FAILED;
     }
 }
diff --git a/src/main/java/eu/siacs/compliance/tests/MAM.java b/src/main/java/eu/siacs/compliance/tests/MAM.java
@@ -3,17 +3,20 @@ package eu.siacs.compliance.tests;
 import rocks.xmpp.core.session.XmppClient;
 
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
 public class MAM extends AbstractDiscoTest {
 
+    public static final List<String> NAMESPACES = Arrays.asList("urn:xmpp:mam:0","urn:xmpp:mam:1","urn:xmpp:mam:2");
+
     public MAM(XmppClient client) {
         super(client);
     }
 
     @Override
     List<String> getNamespaces() {
-        return Arrays.asList("urn:xmpp:mam:0","urn:xmpp:mam:1","urn:xmpp:mam:2");
+        return NAMESPACES;
     }
 
     @Override
diff --git a/src/main/java/eu/siacs/compliance/tests/MamMuc.java b/src/main/java/eu/siacs/compliance/tests/MamMuc.java
@@ -1,6 +1,7 @@
 package eu.siacs.compliance.tests;
 
 import eu.siacs.compliance.Result;
+import eu.siacs.utils.TestUtils;
 import rocks.xmpp.core.XmppException;
 import rocks.xmpp.core.session.XmppClient;
 import rocks.xmpp.extensions.disco.ServiceDiscoveryManager;
@@ -29,8 +30,8 @@ public class MamMuc extends AbstractTest {
             ChatService chatService = chatServices.get(0);
             ChatRoom room = chatService.createRoom(UUID.randomUUID().toString());
             room.enter("test");
-            final Set<String> f = serviceDiscoveryManager.discoverInformation(room.getAddress()).getResult().getFeatures();
-            final boolean mam = f.contains("urn:xmpp:mam:0") || f.contains("urn:xmpp:mam:1") || f.contains("urn:xmpp:mam:2");
+            final Set<String> features = serviceDiscoveryManager.discoverInformation(room.getAddress()).getResult().getFeatures();
+            final boolean mam = TestUtils.hasAnyone(MAM.NAMESPACES,features);
             room.destroy().getResult();
             return mam ? Result.PASSED : Result.FAILED;
         } catch (XmppException e) {
diff --git a/src/main/java/eu/siacs/utils/TestUtils.java b/src/main/java/eu/siacs/utils/TestUtils.java
@@ -0,0 +1,16 @@
+package eu.siacs.utils;
+
+import java.util.List;
+import java.util.Set;
+
+public class TestUtils {
+
+    public static boolean hasAnyone(List<String> needles, Set<String> haystack) {
+        for(String needle : needles) {
+            if (haystack.contains(needle)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}