diff --git a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/util/IntegrationTestRosterUtil.java b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/util/IntegrationTestRosterUtil.java new file mode 100644 index 000000000..11a0d7b59 --- /dev/null +++ b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/util/IntegrationTestRosterUtil.java @@ -0,0 +1,97 @@ +/** + * + * Copyright 2015-2018 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.igniterealtime.smack.inttest.util; + +import java.util.concurrent.TimeoutException; + +import org.jivesoftware.smack.SmackException.NoResponseException; +import org.jivesoftware.smack.SmackException.NotConnectedException; +import org.jivesoftware.smack.SmackException.NotLoggedInException; +import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.XMPPException.XMPPErrorException; +import org.jivesoftware.smack.packet.Presence; +import org.jivesoftware.smack.roster.AbstractPresenceEventListener; +import org.jivesoftware.smack.roster.Roster; +import org.jivesoftware.smack.roster.RosterEntry; +import org.jivesoftware.smack.roster.SubscribeListener; + +import org.jxmpp.jid.BareJid; +import org.jxmpp.jid.Jid; + +public class IntegrationTestRosterUtil { + + public static void ensureBothAccountsAreSubscribedToEachOther(XMPPConnection conOne, XMPPConnection conTwo, long timeout) throws TimeoutException, Exception { + ensureSubscribedTo(conOne, conTwo, timeout); + ensureSubscribedTo(conTwo, conOne, timeout); + } + + public static void ensureSubscribedTo(final XMPPConnection conOne, final XMPPConnection conTwo, long timeout) throws TimeoutException, Exception { + Roster rosterOne = Roster.getInstanceFor(conOne); + Roster rosterTwo = Roster.getInstanceFor(conTwo); + + if (rosterOne.isSubscribedToMyPresence(conTwo.getUser())) { + return; + } + + final SubscribeListener subscribeListener = new SubscribeListener() { + @Override + public SubscribeAnswer processSubscribe(Jid from, Presence subscribeRequest) { + if (from.equals(conTwo.getUser().asBareJid())) { + return SubscribeAnswer.Approve; + } + return SubscribeAnswer.Deny; + } + }; + rosterOne.addSubscribeListener(subscribeListener); + + final SimpleResultSyncPoint syncPoint = new SimpleResultSyncPoint(); + rosterTwo.addPresenceEventListener(new AbstractPresenceEventListener() { + @Override + public void presenceSubscribed(BareJid address, Presence subscribedPresence) { + if (!address.equals(conOne.getUser().asBareJid())) { + return; + } + syncPoint.signal(); + } + }); + rosterTwo.sendSubscriptionRequest(conOne.getUser().asBareJid()); + + try { + syncPoint.waitForResult(timeout); + } finally { + rosterOne.removeSubscribeListener(subscribeListener); + } + } + + public static void ensureBothAccountsAreNotInEachOthersRoster(XMPPConnection conOne, XMPPConnection conTwo) + throws NotLoggedInException, NoResponseException, XMPPErrorException, NotConnectedException, + InterruptedException { + notInRoster(conOne, conTwo); + notInRoster(conTwo, conOne); + } + + private static void notInRoster(XMPPConnection c1, XMPPConnection c2) throws NotLoggedInException, + NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { + Roster roster = Roster.getInstanceFor(c1); + RosterEntry c2Entry = roster.getEntry(c2.getUser().asBareJid()); + if (c2Entry == null) { + return; + } + roster.removeEntry(c2Entry); + } + +} diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/LowLevelRosterIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/LowLevelRosterIntegrationTest.java index a492c0bce..04e2cdc18 100644 --- a/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/LowLevelRosterIntegrationTest.java +++ b/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/LowLevelRosterIntegrationTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2016-2017 Florian Schmaus + * Copyright 2016-2018 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import org.jivesoftware.smack.tcp.XMPPTCPConnection; import org.igniterealtime.smack.inttest.AbstractSmackLowLevelIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment; +import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil; import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint; import org.jxmpp.jid.FullJid; @@ -35,7 +36,7 @@ public class LowLevelRosterIntegrationTest extends AbstractSmackLowLevelIntegrat @SmackIntegrationTest public void testPresenceEventListenersOffline(final XMPPTCPConnection conOne, final XMPPTCPConnection conTwo) throws TimeoutException, Exception { - RosterIntegrationTest.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); + IntegrationTestRosterUtil.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); final Roster rosterOne = Roster.getInstanceFor(conOne); final Roster rosterTwo = Roster.getInstanceFor(conTwo); @@ -46,7 +47,7 @@ public class LowLevelRosterIntegrationTest extends AbstractSmackLowLevelIntegrat // TODO Change timeout form '5000' to something configurable. final long timeout = 5000; - RosterIntegrationTest.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); + IntegrationTestRosterUtil.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); final SimpleResultSyncPoint offlineTriggered = new SimpleResultSyncPoint(); diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/RosterIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/RosterIntegrationTest.java index f86425ed5..fafa776d3 100644 --- a/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/RosterIntegrationTest.java +++ b/smack-integration-test/src/main/java/org/jivesoftware/smack/roster/RosterIntegrationTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2015-2016 Florian Schmaus + * Copyright 2015-2018 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,11 +21,6 @@ import static org.junit.Assert.assertTrue; import java.util.Collection; import java.util.concurrent.TimeoutException; -import org.jivesoftware.smack.SmackException.NoResponseException; -import org.jivesoftware.smack.SmackException.NotConnectedException; -import org.jivesoftware.smack.SmackException.NotLoggedInException; -import org.jivesoftware.smack.XMPPConnection; -import org.jivesoftware.smack.XMPPException.XMPPErrorException; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.roster.packet.RosterPacket.ItemType; import org.jivesoftware.smack.util.StringUtils; @@ -33,6 +28,7 @@ import org.jivesoftware.smack.util.StringUtils; import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment; +import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil; import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint; import org.jxmpp.jid.BareJid; import org.jxmpp.jid.Jid; @@ -50,7 +46,7 @@ public class RosterIntegrationTest extends AbstractSmackIntegrationTest { @SmackIntegrationTest public void subscribeRequestListenerTest() throws TimeoutException, Exception { - ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); + IntegrationTestRosterUtil.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); final SubscribeListener subscribeListener = new SubscribeListener() { @Override @@ -112,64 +108,4 @@ public class RosterIntegrationTest extends AbstractSmackIntegrationTest { } } - public static void ensureBothAccountsAreNotInEachOthersRoster(XMPPConnection conOne, XMPPConnection conTwo) throws NotLoggedInException, - NoResponseException, XMPPErrorException, NotConnectedException, - InterruptedException { - notInRoster(conOne, conTwo); - notInRoster(conTwo, conOne); - } - - private static void notInRoster(XMPPConnection c1, XMPPConnection c2) throws NotLoggedInException, - NoResponseException, XMPPErrorException, NotConnectedException, - InterruptedException { - Roster roster = Roster.getInstanceFor(c1); - RosterEntry c2Entry = roster.getEntry(c2.getUser().asBareJid()); - if (c2Entry == null) { - return; - } - roster.removeEntry(c2Entry); - } - - public static void ensureBothAccountsAreSubscribedToEachOther(XMPPConnection conOne, XMPPConnection conTwo, long timeout) throws TimeoutException, Exception { - ensureSubscribedTo(conOne, conTwo, timeout); - ensureSubscribedTo(conTwo, conOne, timeout); - } - - private static void ensureSubscribedTo(final XMPPConnection conOne, final XMPPConnection conTwo, long timeout) throws TimeoutException, Exception { - Roster rosterOne = Roster.getInstanceFor(conOne); - Roster rosterTwo = Roster.getInstanceFor(conTwo); - - if (rosterOne.isSubscribedToMyPresence(conTwo.getUser())) { - return; - } - - final SubscribeListener subscribeListener = new SubscribeListener() { - @Override - public SubscribeAnswer processSubscribe(Jid from, Presence subscribeRequest) { - if (from.equals(conTwo.getUser().asBareJid())) { - return SubscribeAnswer.Approve; - } - return SubscribeAnswer.Deny; - } - }; - rosterOne.addSubscribeListener(subscribeListener); - - final SimpleResultSyncPoint syncPoint = new SimpleResultSyncPoint(); - rosterTwo.addPresenceEventListener(new AbstractPresenceEventListener() { - @Override - public void presenceSubscribed(BareJid address, Presence subscribedPresence) { - if (!address.equals(conOne.getUser().asBareJid())) { - return; - } - syncPoint.signal(); - } - }); - rosterTwo.sendSubscriptionRequest(conOne.getUser().asBareJid()); - - try { - syncPoint.waitForResult(timeout); - } finally { - rosterOne.removeSubscribeListener(subscribeListener); - } - } } diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTControlIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTControlIntegrationTest.java index f88a910dd..3d959f227 100644 --- a/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTControlIntegrationTest.java +++ b/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTControlIntegrationTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2016 Florian Schmaus + * Copyright 2016-2018 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ import java.util.Collection; import java.util.concurrent.TimeoutException; import org.jivesoftware.smack.XMPPException.XMPPErrorException; -import org.jivesoftware.smack.roster.RosterIntegrationTest; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.iot.control.IoTControlManager; @@ -34,6 +33,7 @@ import org.jivesoftware.smackx.iot.control.element.SetData; import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment; +import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil; import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint; import org.jxmpp.jid.Jid; @@ -83,7 +83,7 @@ public class IoTControlIntegrationTest extends AbstractSmackIntegrationTest { IoTControlManagerOne.installThing(controlThing); try { - RosterIntegrationTest.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); + IntegrationTestRosterUtil.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); SetData data = new SetBoolData(testRunId, true); IoTSetResponse response = IoTControlManagerTwo.setUsingIq(conOne.getUser(), data); @@ -91,7 +91,7 @@ public class IoTControlIntegrationTest extends AbstractSmackIntegrationTest { } finally { IoTControlManagerOne.uninstallThing(controlThing); - RosterIntegrationTest.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); + IntegrationTestRosterUtil.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); } syncPoint.waitForResult(timeout); diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTDataIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTDataIntegrationTest.java index 3da896b65..36a9831a3 100644 --- a/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTDataIntegrationTest.java +++ b/smack-integration-test/src/main/java/org/jivesoftware/smackx/iot/IoTDataIntegrationTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2016 Florian Schmaus + * Copyright 2016-2018 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.TimeoutException; -import org.jivesoftware.smack.roster.RosterIntegrationTest; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.iot.data.IoTDataManager; @@ -38,6 +37,7 @@ import org.jivesoftware.smackx.iot.data.element.TimestampElement; import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment; +import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil; public class IoTDataIntegrationTest extends AbstractSmackIntegrationTest { @@ -75,13 +75,13 @@ public class IoTDataIntegrationTest extends AbstractSmackIntegrationTest { List values; try { - RosterIntegrationTest.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); + IntegrationTestRosterUtil.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); values = iotDataManagerTwo.requestMomentaryValuesReadOut(conOne.getUser()); } finally { iotDataManagerOne.uninstallThing(dataThing); - RosterIntegrationTest.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); + IntegrationTestRosterUtil.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); } assertEquals(1, values.size()); diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/mood/MoodIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/mood/MoodIntegrationTest.java index cd4e8a34c..2e1143aa7 100644 --- a/smack-integration-test/src/main/java/org/jivesoftware/smackx/mood/MoodIntegrationTest.java +++ b/smack-integration-test/src/main/java/org/jivesoftware/smackx/mood/MoodIntegrationTest.java @@ -19,12 +19,13 @@ package org.jivesoftware.smackx.mood; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Message; -import org.jivesoftware.smack.roster.RosterIntegrationTest; + import org.jivesoftware.smackx.mood.element.MoodElement; import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment; +import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil; import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint; import org.junit.AfterClass; import org.jxmpp.jid.BareJid; @@ -42,7 +43,7 @@ public class MoodIntegrationTest extends AbstractSmackIntegrationTest { @SmackIntegrationTest public void test() throws Exception { - RosterIntegrationTest.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); + IntegrationTestRosterUtil.ensureBothAccountsAreSubscribedToEachOther(conOne, conTwo, timeout); final SimpleResultSyncPoint moodReceived = new SimpleResultSyncPoint(); @@ -64,6 +65,6 @@ public class MoodIntegrationTest extends AbstractSmackIntegrationTest { public void unsubscribe() throws SmackException.NotLoggedInException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException { - RosterIntegrationTest.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); + IntegrationTestRosterUtil.ensureBothAccountsAreNotInEachOthersRoster(conOne, conTwo); } } diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/omemo/AbstractTwoUsersOmemoIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/omemo/AbstractTwoUsersOmemoIntegrationTest.java index 5f38bded6..6d595ef39 100644 --- a/smack-integration-test/src/main/java/org/jivesoftware/smackx/omemo/AbstractTwoUsersOmemoIntegrationTest.java +++ b/smack-integration-test/src/main/java/org/jivesoftware/smackx/omemo/AbstractTwoUsersOmemoIntegrationTest.java @@ -23,10 +23,10 @@ import java.util.logging.Level; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPException; -import org.jivesoftware.smack.roster.RosterIntegrationTest; import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment; import org.igniterealtime.smack.inttest.TestNotPossibleException; +import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -54,7 +54,7 @@ public abstract class AbstractTwoUsersOmemoIntegrationTest extends AbstractOmemo assertFalse(alice.getDeviceId().equals(bob.getDeviceId())); // Subscribe presences - RosterIntegrationTest.ensureBothAccountsAreSubscribedToEachOther(alice.getConnection(), bob.getConnection(), timeout); + IntegrationTestRosterUtil.ensureBothAccountsAreSubscribedToEachOther(alice.getConnection(), bob.getConnection(), timeout); OmemoManagerSetupHelper.trustAllIdentitiesWithTests(alice, bob); // Alice trusts Bob's devices OmemoManagerSetupHelper.trustAllIdentitiesWithTests(bob, alice); // Bob trusts Alice' and Mallory's devices