mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2025-09-10 18:59:41 +02:00
Improve Roster API
Make Roster entries Map from BareJid to RosterEntry, since only bare JIDs are allowed as roster items as per RFC 6121 § 3.1.1 When a user sends a presence subscription request to a potential instant messaging and presence contact, the value of the 'to' attribute MUST be a bare JID <contact@domainpart> rather than a full JID <contact@domainpart/resourcepart>,… Also some further Roster API changes regarding JIDs.
This commit is contained in:
parent
c125a3b055
commit
1d1ea5dd10
11 changed files with 109 additions and 84 deletions
|
@ -48,6 +48,7 @@ import org.jivesoftware.smack.util.PacketParserUtils;
|
|||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.jxmpp.jid.BareJid;
|
||||
import org.jxmpp.jid.Jid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
import org.jxmpp.stringprep.XmppStringprepException;
|
||||
|
@ -133,7 +134,7 @@ public class RosterTest extends InitSmackIm {
|
|||
@Test
|
||||
public void testAddRosterItem() throws Throwable {
|
||||
// Constants for the new contact
|
||||
final Jid contactJID = JidCreate.from("nurse@example.com");
|
||||
final BareJid contactJID = JidCreate.bareFrom("nurse@example.com");
|
||||
final String contactName = "Nurse";
|
||||
final String[] contactGroup = {"Servants"};
|
||||
|
||||
|
@ -146,9 +147,9 @@ public class RosterTest extends InitSmackIm {
|
|||
final RosterUpdateResponder serverSimulator = new RosterUpdateResponder() {
|
||||
void verifyUpdateRequest(final RosterPacket updateRequest) {
|
||||
final Item item = updateRequest.getRosterItems().iterator().next();
|
||||
assertSame("The provided JID doesn't match the requested!",
|
||||
assertEquals("The provided JID doesn't match the requested!",
|
||||
contactJID,
|
||||
item.getUser());
|
||||
item.getJid());
|
||||
assertSame("The provided name doesn't match the requested!",
|
||||
contactName,
|
||||
item.getName());
|
||||
|
@ -217,9 +218,9 @@ public class RosterTest extends InitSmackIm {
|
|||
final RosterUpdateResponder serverSimulator = new RosterUpdateResponder() {
|
||||
void verifyUpdateRequest(final RosterPacket updateRequest) {
|
||||
final Item item = updateRequest.getRosterItems().iterator().next();
|
||||
assertSame("The provided JID doesn't match the requested!",
|
||||
assertEquals("The provided JID doesn't match the requested!",
|
||||
contactJID,
|
||||
item.getUser());
|
||||
item.getJid());
|
||||
assertSame("The provided name doesn't match the requested!",
|
||||
contactName,
|
||||
item.getName());
|
||||
|
@ -290,9 +291,9 @@ public class RosterTest extends InitSmackIm {
|
|||
final RosterUpdateResponder serverSimulator = new RosterUpdateResponder() {
|
||||
void verifyUpdateRequest(final RosterPacket updateRequest) {
|
||||
final Item item = updateRequest.getRosterItems().iterator().next();
|
||||
assertSame("The provided JID doesn't match the requested!",
|
||||
assertEquals("The provided JID doesn't match the requested!",
|
||||
contactJID,
|
||||
item.getUser());
|
||||
item.getJid());
|
||||
}
|
||||
};
|
||||
serverSimulator.start();
|
||||
|
@ -370,7 +371,7 @@ public class RosterTest extends InitSmackIm {
|
|||
*/
|
||||
@Test
|
||||
public void testIgnoreInvalidFrom() throws XmppStringprepException {
|
||||
final Jid spammerJid = JidCreate.from("spam@example.com");
|
||||
final BareJid spammerJid = JidCreate.bareFrom("spam@example.com");
|
||||
RosterPacket packet = new RosterPacket();
|
||||
packet.setType(Type.set);
|
||||
packet.setTo(connection.getUser());
|
||||
|
@ -398,7 +399,7 @@ public class RosterTest extends InitSmackIm {
|
|||
@Test(timeout=5000)
|
||||
public void testAddEmptyGroupEntry() throws Throwable {
|
||||
// Constants for the new contact
|
||||
final Jid contactJID = JidCreate.from("nurse@example.com");
|
||||
final BareJid contactJID = JidCreate.bareFrom("nurse@example.com");
|
||||
final String contactName = "Nurse";
|
||||
final String[] contactGroup = {""};
|
||||
|
||||
|
@ -413,7 +414,7 @@ public class RosterTest extends InitSmackIm {
|
|||
final Item item = updateRequest.getRosterItems().iterator().next();
|
||||
assertSame("The provided JID doesn't match the requested!",
|
||||
contactJID,
|
||||
item.getUser());
|
||||
item.getJid());
|
||||
assertSame("The provided name doesn't match the requested!",
|
||||
contactName,
|
||||
item.getName());
|
||||
|
@ -518,7 +519,7 @@ public class RosterTest extends InitSmackIm {
|
|||
rosterPush.setTo(connection.getUser());
|
||||
|
||||
// prepare the buddy's item entry which should be removed
|
||||
final RosterPacket.Item item = new RosterPacket.Item(entry.getUser(), entry.getName());
|
||||
final RosterPacket.Item item = new RosterPacket.Item(entry.getJid(), entry.getName());
|
||||
item.setItemType(ItemType.remove);
|
||||
rosterPush.addRosterItem(item);
|
||||
|
||||
|
@ -555,18 +556,18 @@ public class RosterTest extends InitSmackIm {
|
|||
rosterResult.setStanzaId(rosterRequest.getStanzaId());
|
||||
|
||||
// prepare romeo's roster entry
|
||||
final Item romeo = new Item(JidCreate.from("romeo@example.net"), "Romeo");
|
||||
final Item romeo = new Item(JidCreate.bareFrom("romeo@example.net"), "Romeo");
|
||||
romeo.addGroupName("Friends");
|
||||
romeo.setItemType(ItemType.both);
|
||||
rosterResult.addRosterItem(romeo);
|
||||
|
||||
// prepare mercutio's roster entry
|
||||
final Item mercutio = new Item(JidCreate.from("mercutio@example.com"), "Mercutio");
|
||||
final Item mercutio = new Item(JidCreate.bareFrom("mercutio@example.com"), "Mercutio");
|
||||
mercutio.setItemType(ItemType.from);
|
||||
rosterResult.addRosterItem(mercutio);
|
||||
|
||||
// prepare benvolio's roster entry
|
||||
final Item benvolio = new Item(JidCreate.from("benvolio@example.net"), "Benvolio");
|
||||
final Item benvolio = new Item(JidCreate.bareFrom("benvolio@example.net"), "Benvolio");
|
||||
benvolio.setItemType(ItemType.both);
|
||||
rosterResult.addRosterItem(benvolio);
|
||||
|
||||
|
|
|
@ -160,13 +160,13 @@ public class RosterVersioningTest {
|
|||
|
||||
Roster roster = Roster.getInstanceFor(connection);
|
||||
assertEquals("Size of roster", 1, roster.getEntries().size());
|
||||
RosterEntry entry = roster.getEntry(vaglafItem.getUser());
|
||||
RosterEntry entry = roster.getEntry(vaglafItem.getJid());
|
||||
assertNotNull("Roster contains vaglaf entry", entry);
|
||||
assertEquals("vaglaf entry in roster equals the sent entry", vaglafItem, RosterEntry.toRosterItem(entry));
|
||||
|
||||
RosterStore store = roster.getRosterStore();
|
||||
assertEquals("Size of store", 1, store.getEntries().size());
|
||||
Item item = store.getEntry(vaglafItem.getUser());
|
||||
Item item = store.getEntry(vaglafItem.getJid());
|
||||
assertNotNull("Store contains vaglaf entry");
|
||||
assertEquals("vaglaf entry in store equals the sent entry", vaglafItem, item);
|
||||
}
|
||||
|
@ -214,20 +214,20 @@ public class RosterVersioningTest {
|
|||
rosterPush.setType(Type.set);
|
||||
rosterPush.setVersion("v98");
|
||||
|
||||
Item item = new Item(JidCreate.from("vaglaf@example.com"), "vaglaf the only");
|
||||
Item item = new Item(JidCreate.bareFrom("vaglaf@example.com"), "vaglaf the only");
|
||||
item.setItemType(ItemType.remove);
|
||||
rosterPush.addRosterItem(item);
|
||||
rosterListener.reset();
|
||||
connection.processPacket(rosterPush);
|
||||
rosterListener.waitAndReset();
|
||||
|
||||
assertNull("Store doses not contain vaglaf", store.getEntry(JidCreate.from("vaglaf@example.com")));
|
||||
assertNull("Store doses not contain vaglaf", store.getEntry(JidCreate.bareFrom("vaglaf@example.com")));
|
||||
assertEquals("Expect store version after push", "v98", store.getRosterVersion());
|
||||
}
|
||||
}
|
||||
|
||||
private static Item vaglafItem() throws XmppStringprepException {
|
||||
Item item = new Item(JidCreate.from("vaglaf@example.com"), "vaglaf the only");
|
||||
Item item = new Item(JidCreate.bareFrom("vaglaf@example.com"), "vaglaf the only");
|
||||
item.setItemType(ItemType.both);
|
||||
item.addGroupName("all");
|
||||
item.addGroupName("friends");
|
||||
|
@ -236,14 +236,14 @@ public class RosterVersioningTest {
|
|||
}
|
||||
|
||||
private static void populateStore(RosterStore store) throws IOException {
|
||||
store.addEntry(new RosterPacket.Item(JidCreate.from("geoff@example.com"), "geoff hurley"), "");
|
||||
store.addEntry(new RosterPacket.Item(JidCreate.bareFrom("geoff@example.com"), "geoff hurley"), "");
|
||||
|
||||
RosterPacket.Item item = new RosterPacket.Item(JidCreate.from("joe@example.com"), "joe stevens");
|
||||
RosterPacket.Item item = new RosterPacket.Item(JidCreate.bareFrom("joe@example.com"), "joe stevens");
|
||||
item.addGroupName("friends");
|
||||
item.addGroupName("partners");
|
||||
store.addEntry(item, "");
|
||||
|
||||
item = new RosterPacket.Item(JidCreate.from("higgins@example.com"), "higgins mcmann");
|
||||
item = new RosterPacket.Item(JidCreate.bareFrom("higgins@example.com"), "higgins mcmann");
|
||||
item.addGroupName("all");
|
||||
item.addGroupName("friends");
|
||||
store.addEntry(item, "v96");
|
||||
|
|
|
@ -37,6 +37,7 @@ import org.jivesoftware.smack.roster.packet.SubscriptionPreApproval;
|
|||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.jxmpp.jid.BareJid;
|
||||
import org.jxmpp.jid.Jid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
|
||||
|
@ -77,7 +78,7 @@ public class SubscriptionPreApprovalTest extends InitSmackIm {
|
|||
|
||||
@Test
|
||||
public void testPreApproveAndCreate() throws Throwable {
|
||||
final Jid contactJID = JidCreate.from("preapproval@example.com");
|
||||
final BareJid contactJID = JidCreate.bareFrom("preapproval@example.com");
|
||||
final String contactName = "PreApproval";
|
||||
final String[] contactGroup = {};
|
||||
connection.enableStreamFeature(SubscriptionPreApproval.INSTANCE);
|
||||
|
@ -88,7 +89,7 @@ public class SubscriptionPreApprovalTest extends InitSmackIm {
|
|||
final Item item = updateRequest.getRosterItems().iterator().next();
|
||||
assertSame("The provided JID doesn't match the requested!",
|
||||
contactJID,
|
||||
item.getUser());
|
||||
item.getJid());
|
||||
assertSame("The provided name doesn't match the requested!",
|
||||
contactName,
|
||||
item.getName());
|
||||
|
|
|
@ -34,7 +34,7 @@ import org.junit.Before;
|
|||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import org.jxmpp.jid.Jid;
|
||||
import org.jxmpp.jid.BareJid;
|
||||
import org.jxmpp.jid.JidTestUtil;
|
||||
|
||||
/**
|
||||
|
@ -88,7 +88,7 @@ public class DirectoryRosterStoreTest {
|
|||
|
||||
assertEquals("Initial roster version", "", store.getRosterVersion());
|
||||
|
||||
Jid userName = JidTestUtil.DUMMY_AT_EXAMPLE_ORG;
|
||||
BareJid userName = JidTestUtil.DUMMY_AT_EXAMPLE_ORG;
|
||||
|
||||
final RosterPacket.Item item1 = new Item(userName, null);
|
||||
final String version1 = "1";
|
||||
|
@ -99,7 +99,7 @@ public class DirectoryRosterStoreTest {
|
|||
RosterPacket.Item storedItem = store.getEntry(userName);
|
||||
assertNotNull("Added entry not found found", storedItem);
|
||||
assertEquals("User of added entry",
|
||||
item1.getUser(), storedItem.getUser());
|
||||
item1.getJid(), storedItem.getJid());
|
||||
assertEquals("Name of added entry",
|
||||
item1.getName(), storedItem.getName());
|
||||
assertEquals("Groups", item1.getGroupNames(), storedItem.getGroupNames());
|
||||
|
@ -123,7 +123,7 @@ public class DirectoryRosterStoreTest {
|
|||
storedItem = store.getEntry(userName);
|
||||
assertNotNull("Added entry not found", storedItem);
|
||||
assertEquals("User of added entry",
|
||||
item2.getUser(), storedItem.getUser());
|
||||
item2.getJid(), storedItem.getJid());
|
||||
assertEquals("Name of added entry",
|
||||
item2.getName(), storedItem.getName());
|
||||
assertEquals("Groups", item2.getGroupNames(), storedItem.getGroupNames());
|
||||
|
@ -160,7 +160,7 @@ public class DirectoryRosterStoreTest {
|
|||
storedItem = store.getEntry(JidTestUtil.BARE_JID_1);
|
||||
assertNotNull("Added entry not found", storedItem);
|
||||
assertEquals("User of added entry",
|
||||
item3.getUser(), storedItem.getUser());
|
||||
item3.getJid(), storedItem.getJid());
|
||||
assertEquals("Name of added entry",
|
||||
item3.getName(), storedItem.getName());
|
||||
assertEquals("Groups", item3.getGroupNames(), storedItem.getGroupNames());
|
||||
|
@ -175,7 +175,7 @@ public class DirectoryRosterStoreTest {
|
|||
storedItem = store.getEntry(JidTestUtil.BARE_JID_2);
|
||||
assertNotNull("Added entry not found", storedItem);
|
||||
assertEquals("User of added entry",
|
||||
item4.getUser(), storedItem.getUser());
|
||||
item4.getJid(), storedItem.getJid());
|
||||
assertEquals("Name of added entry",
|
||||
item4.getName(), storedItem.getName());
|
||||
assertEquals("Groups", item4.getGroupNames(), storedItem.getGroupNames());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue