diff --git a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java index d4e4b75317..f42327195c 100644 --- a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java +++ b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java @@ -48,6 +48,7 @@ import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import org.jivesoftware.smack.AbstractXMPPConnection; import org.jivesoftware.smack.ConnectionConfiguration; @@ -57,6 +58,7 @@ import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.SmackException.NoResponseException; import org.jivesoftware.smack.SmackException.NotConnectedException; +import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.XMPPException.XMPPErrorException; import org.jivesoftware.smack.util.StringUtils; @@ -483,7 +485,13 @@ private void runTests(Set> classes) for (Method testMethod : smackIntegrationTestMethods) { switch (testType) { case Normal: { - ConcreteTest.Executor concreteTestExecutor = () -> testMethod.invoke(test); + ConcreteTest.Executor concreteTestExecutor = () -> { + AbstractSmackIntegrationTest abstractTest = (AbstractSmackIntegrationTest) test; + + throwIfDisconnectedConnections(abstractTest, testMethod, "Cannot execute test of"); + testMethod.invoke(test); + throwIfDisconnectedConnections(abstractTest, testMethod, "There where disconnected connections after executing"); + }; ConcreteTest concreteTest = new ConcreteTest(testType, testMethod, concreteTestExecutor); concreteTests.add(concreteTest); } @@ -1098,4 +1106,12 @@ static TestMethodParameterType determineTestMethodParameterType(Method testMetho return null; } + private static void throwIfDisconnectedConnections(AbstractSmackIntegrationTest abstractTest, Method testMethod, String message) throws IOException { + List disconnectedConnections = abstractTest.connections.stream().filter(c -> c.isConnected()).collect(Collectors.toList()); + if (disconnectedConnections.isEmpty()) return; + + throw new IOException(message + " " + testMethod.getDeclaringClass().getSimpleName() + "." + + testMethod.getName() + ", as not all connections are connected. Disconnected connections: " + + disconnectedConnections); + } }