Author: ngn
Date: Fri Aug 14 09:18:53 2009
New Revision: 804134
URL: http://svn.apache.org/viewvc?rev=804134&view=rev
Log:
Implement exit room (VYSPER-110)
Implementing HandlerDictionary for the module
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
- copied, changed from r802822,
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCPresenceHandlerTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java
- copied, changed from r802822,
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerVerifyTestCase.java
Removed:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/TestUtil.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCItemsDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/ConferenceTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTestCase.java
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
Fri Aug 14 09:18:53 2009
@@ -19,17 +19,15 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
+import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.DefaultDiscoAwareModule;
+import
org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler.MUCPresenceHandler;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
import
org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage.OccupantStorageProvider;
import
org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage.RoomStorageProvider;
-import org.apache.vysper.xmpp.modules.servicediscovery.management.Feature;
-import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
import
org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
@@ -38,7 +36,7 @@
import
org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
import
org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
import org.apache.vysper.xmpp.protocol.HandlerDictionary;
-import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.SubdomainHandlerDictionary;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,14 +49,17 @@
public class MUCModule extends DefaultDiscoAwareModule implements
ServerInfoRequestListener, InfoRequestListener, ItemRequestListener {
private Conference conference;
+ private Entity domain;
private final Logger logger = LoggerFactory.getLogger(MUCModule.class);
- public MUCModule() {
+ public MUCModule(Entity domain) {
+ this.domain = domain;
this.conference = new Conference("Conference");
}
- public MUCModule(Conference conference) {
+ public MUCModule(Entity domain, Conference conference) {
+ this.domain = domain;
this.conference = conference;
}
@@ -136,8 +137,13 @@
}
@Override
- protected void addHandlerDictionaries(List<HandlerDictionary> dictionary) {
+ protected void addHandlerDictionaries(List<HandlerDictionary>
dictionaries) {
+ // MUC is only supported for running on a subdomain
+ SubdomainHandlerDictionary dictionary = new
SubdomainHandlerDictionary(domain);
+ dictionary.register(new MUCPresenceHandler(conference));
+
+ dictionaries.add(dictionary);
}
/**
Copied:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
(from r802822,
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java)
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java?p2=mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java&p1=mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java&r1=802822&r2=804134&rev=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
Fri Aug 14 09:18:53 2009
@@ -19,6 +19,8 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+import java.util.Set;
+
import org.apache.vysper.compliance.SpecCompliant;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityImpl;
@@ -49,19 +51,34 @@
* @author The Apache MINA Project ([email protected])
*/
@SpecCompliant(spec="xep-0045", section="7.1", status=
SpecCompliant.ComplianceStatus.IN_PROGRESS, coverage =
SpecCompliant.ComplianceCoverage.PARTIAL)
-public class MUCEnterRoomHandler extends DefaultPresenceHandler {
+public class MUCPresenceHandler extends DefaultPresenceHandler {
- final Logger logger = LoggerFactory.getLogger(MUCEnterRoomHandler.class);
+ final Logger logger = LoggerFactory.getLogger(MUCPresenceHandler.class);
private Conference conference;
- public MUCEnterRoomHandler(Conference conference) {
+ public MUCPresenceHandler(Conference conference) {
this.conference = conference;
}
@Override
protected boolean verifyNamespace(Stanza stanza) {
- return verifyInnerNamespace(stanza, NamespaceURIs.XEP0045_MUC);
+ // either, the stanza should have a x element with the MUC namespace.
Or, no extension
+ // element at all. Else, return false
+
+ XMLElement xElement = stanza.getFirstInnerElement();
+ if(xElement != null && xElement.getName().equals("x")
+ &&
xElement.getNamespaceURI().equals(NamespaceURIs.XEP0045_MUC)) {
+ // got x element and in the correct namespace
+ return true;
+ } else if(xElement != null && xElement.getNamespaceURI() == null) {
+ // no extension namespace, ok
+ return true;
+ } else if(xElement == null) {
+ return true;
+ } else {
+ return false;
+ }
}
private Stanza sendError(Entity roomJid, Entity occupantJid, String type,
String error) {
@@ -92,18 +109,31 @@
protected Stanza executePresenceLogic(PresenceStanza stanza,
ServerRuntimeContext serverRuntimeContext, SessionContext sessionContext) {
// TODO handle null
Entity roomAndNick = stanza.getTo();
+ // TODO handle null
+ Entity occupantJid = stanza.getFrom();
Entity roomJid = roomAndNick.getBareJID();
String nick = roomAndNick.getResource();
- // TODO handle null
- Entity newOccupantJid = stanza.getFrom();
-
// user did not send nick name
if(nick == null) {
- return sendError(roomJid, newOccupantJid, "modify",
"jid-malformed");
+ return sendError(roomJid, occupantJid, "modify", "jid-malformed");
+ }
+
+ String type = stanza.getType();
+
+ if(type == null) {
+ return enterRoom(stanza, roomJid, occupantJid, nick,
sessionContext);
+ } else if(type.equals("unavailable")) {
+ return exitRoom(stanza, roomJid, occupantJid, nick,
sessionContext);
+ } else {
+ throw new RuntimeException("Presence type not handled by MUC
module: " + type);
}
+ }
+
+ private Stanza enterRoom(PresenceStanza stanza, Entity roomJid,
+ Entity newOccupantJid, String nick, SessionContext sessionContext)
{
// TODO what to use for the room name?
Room room = conference.findOrCreateRoom(roomJid, roomJid.getNode());
@@ -145,6 +175,34 @@
return null;
}
+ private Stanza exitRoom(PresenceStanza stanza, Entity roomJid,
+ Entity occupantJid, String nick, SessionContext sessionContext) {
+ Room room = conference.findRoom(roomJid);
+
+ // room must exist, or we do nothing
+ if(room != null) {
+ Occupant exitingOccupant = room.findOccupant(occupantJid);
+
+ // user must by in room, or we do nothing
+ if(exitingOccupant != null) {
+ Set<Occupant> allOccupants = room.getOccupants();
+
+ room.removeOccupant(occupantJid);
+
+ // relay presence of the newly added occupant to all existing
occupants
+ for(Occupant occupant : allOccupants) {
+ sendExitRoomPresenceToExisting(exitingOccupant, occupant,
room, sessionContext);
+ }
+
+ if(room.isRoomType(RoomType.Temporary) && room.isEmpty()) {
+ conference.deleteRoom(roomJid);
+ }
+ }
+ }
+
+ return null;
+ }
+
private void sendExistingOccupantToNewOccupant(Occupant newOccupant,
Occupant existingOccupant, Room room, SessionContext sessionContext) {
// <presence
// from='[email protected]/firstwitch'
@@ -205,6 +263,28 @@
relayStanza(existingOccupant.getJid(), builder.getFinalStanza(),
sessionContext);
}
+ private void sendExitRoomPresenceToExisting(Occupant exitingOccupant,
Occupant existingOccupant, Room room, SessionContext sessionContext) {
+ Entity roomAndNewUserNick = new EntityImpl(room.getJID(),
exitingOccupant.getName());
+
+ StanzaBuilder builder =
StanzaBuilder.createPresenceStanza(roomAndNewUserNick,
existingOccupant.getJid(), null,
+ PresenceStanzaType.UNAVAILABLE, null, null);
+ builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
+ builder.startInnerElement("item")
+ .addAttribute("affiliation",
exitingOccupant.getAffiliation().toString())
+ // must be none since the user is leaving
+ .addAttribute("role", "none");
+
+ builder.endInnerElement();
+
+ if(existingOccupant.getJid().equals(exitingOccupant.getJid())) {
+ // send status to indicate that this is the users own presence
+ builder.startInnerElement("status").addAttribute("code",
"110").endInnerElement();
+ }
+ builder.endInnerElement();
+
+ relayStanza(existingOccupant.getJid(), builder.getFinalStanza(),
sessionContext);
+ }
+
protected void relayStanza(Entity receiver, Stanza stanza, SessionContext
sessionContext) {
try {
sessionContext.getServerRuntimeContext().getStanzaRelay().relay(receiver,
stanza, new IgnoreFailureStrategy());
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
Fri Aug 14 09:18:53 2009
@@ -74,6 +74,12 @@
return roomStorageProvider.createRoom(jid, name, types);
}
+
+ public void deleteRoom(Entity jid) {
+ roomStorageProvider.deleteRoom(jid);
+
+ }
+
public Room findRoom(Entity jid) {
return roomStorageProvider.findRoom(jid);
}
@@ -125,4 +131,5 @@
return items;
}
+
}
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
Fri Aug 14 09:18:53 2009
@@ -109,12 +109,22 @@
return occupant;
}
-
+ public Occupant findOccupant(Entity occupantJid) {
+ return occupants.get(occupantJid);
+ }
public void removeOccupant(Entity occupantJid) {
occupants.remove(occupantJid);
}
+ public int getOccupantCount() {
+ return occupants.size();
+ }
+
+ public boolean isEmpty() {
+ return occupants.isEmpty();
+ }
+
public Set<Occupant> getOccupants() {
Set<Occupant> set = new HashSet<Occupant>();
for(Occupant occupant : occupants.values()) {
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java
Fri Aug 14 09:18:53 2009
@@ -59,6 +59,11 @@
return rooms.containsKey(jid);
}
+ public void deleteRoom(Entity jid) {
+ rooms.remove(jid);
+
+ }
+
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java
Fri Aug 14 09:18:53 2009
@@ -37,4 +37,6 @@
boolean roomExists(Entity jid);
Room findRoom(Entity jid);
+
+ void deleteRoom(Entity jid);
}
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java
Fri Aug 14 09:18:53 2009
@@ -21,6 +21,7 @@
import junit.framework.TestCase;
+import org.apache.vysper.TestUtil;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.Module;
import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
@@ -40,6 +41,7 @@
public abstract class AbstractDiscoTestCase extends TestCase {
protected static final Entity SERVER_JID =
TestUtil.parseUnchecked("vysper.org");
+ protected static final Entity MODULE_JID =
TestUtil.parseUnchecked("chat.vysper.org");
protected static final Entity USER_JID =
TestUtil.parseUnchecked("[email protected]");
protected abstract Module getModule();
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java
Fri Aug 14 09:18:53 2009
@@ -19,20 +19,10 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.Module;
import
org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
-import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
import
org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
-import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.stanza.IQStanzaType;
-import org.apache.vysper.xmpp.stanza.StanzaBuilder;
-import org.apache.vysper.xmpp.xmlfragment.XMLElement;
-import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
/**
*
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCItemsDiscoTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCItemsDiscoTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCItemsDiscoTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCItemsDiscoTestCase.java
Fri Aug 14 09:18:53 2009
@@ -51,7 +51,7 @@
Conference conference = new Conference("Foo");
conference.createRoom(jid1, "room1");
conference.createRoom(jid2, "room2");
- return new MUCModule(conference);
+ return new MUCModule(MODULE_JID, conference);
}
@Override
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java
Fri Aug 14 09:18:53 2009
@@ -22,6 +22,7 @@
import java.util.Arrays;
import java.util.List;
+import org.apache.vysper.TestUtil;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.Module;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
@@ -41,7 +42,7 @@
protected Module getModule() {
Conference conference = new Conference("Foo");
conference.createRoom(ROOM_JID, "Room1", RoomType.Hidden,
RoomType.PasswordProtected);
- return new MUCModule(conference);
+ return new MUCModule(MODULE_JID, conference);
}
@Override
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java
Fri Aug 14 09:18:53 2009
@@ -36,7 +36,7 @@
@Override
protected Module getModule() {
Conference conference = new Conference("Foo");
- return new MUCModule(conference);
+ return new MUCModule(MODULE_JID, conference);
}
@Override
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCPresenceHandlerTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCPresenceHandlerTestCase.java?rev=804134&view=auto
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCPresenceHandlerTestCase.java
(added)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCPresenceHandlerTestCase.java
Fri Aug 14 09:18:53 2009
@@ -0,0 +1,47 @@
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import junit.framework.TestCase;
+
+import org.apache.vysper.TestUtil;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.delivery.StanzaReceiverQueue;
+import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
+import org.apache.vysper.xmpp.server.TestSessionContext;
+
+/**
+ */
+public abstract class AbstractMUCPresenceHandlerTestCase extends TestCase {
+
+ protected TestSessionContext sessionContext;
+
+ protected Entity room1Jid = TestUtil.parseUnchecked("[email protected]");
+ protected Entity room2Jid = TestUtil.parseUnchecked("[email protected]");
+
+ protected Entity room1JidWithNick =
TestUtil.parseUnchecked("[email protected]/nick");
+ protected Entity room2JidWithNick =
TestUtil.parseUnchecked("[email protected]/nick");
+
+ protected Entity occupant1Jid =
TestUtil.parseUnchecked("[email protected]");
+ protected Entity occupant2Jid =
TestUtil.parseUnchecked("[email protected]");
+ protected MUCPresenceHandler handler;
+
+ protected Conference conference = new Conference("foo");
+
+ protected StanzaReceiverQueue occupant1Queue = new StanzaReceiverQueue();
+
+ protected StanzaReceiverQueue occupant2Queue = new StanzaReceiverQueue();
+
+ @Override
+ protected void setUp() throws Exception {
+ sessionContext =
TestSessionContext.createWithStanzaReceiverRelayAuthenticated();
+ sessionContext.setInitiatingEntity(occupant1Jid);
+
+ StanzaReceiverRelay stanzaRelay = (StanzaReceiverRelay)
sessionContext.getServerRuntimeContext().getStanzaRelay();
+ stanzaRelay.add(occupant1Jid, occupant1Queue);
+ stanzaRelay.add(occupant2Jid, occupant2Queue);
+
+ conference.createRoom(room1Jid, "Room 1");
+
+ handler = new MUCPresenceHandler(conference);
+ }
+}
Copied:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java
(from r802822,
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java)
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java?p2=mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java&p1=mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java&r1=802822&r2=804134&rev=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java
Fri Aug 14 09:18:53 2009
@@ -1,22 +1,13 @@
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
import org.apache.vysper.xmpp.addressing.Entity;
-import org.apache.vysper.xmpp.delivery.StanzaReceiverQueue;
-import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.TestUtil;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.server.TestSessionContext;
import org.apache.vysper.xmpp.stanza.PresenceStanza;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -24,44 +15,7 @@
/**
*/
-public class MUCEnterRoomHandlerTestCase extends TestCase {
-
- private TestSessionContext sessionContext;
-
- protected Entity room1Jid = TestUtil.parseUnchecked("[email protected]");
- protected Entity room2Jid = TestUtil.parseUnchecked("[email protected]");
-
- protected Entity room1JidWithNick =
TestUtil.parseUnchecked("[email protected]/nick");
- protected Entity room2JidWithNick =
TestUtil.parseUnchecked("[email protected]/nick");
-
- protected Entity occupant1Jid =
TestUtil.parseUnchecked("[email protected]");
- protected Entity occupant2Jid =
TestUtil.parseUnchecked("[email protected]");
- protected MUCEnterRoomHandler handler;
-
- private Conference conference;
-
- private StanzaReceiverQueue occupant1Queue;
-
- private StanzaReceiverQueue occupant2Queue;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- sessionContext =
TestSessionContext.createWithStanzaReceiverRelayAuthenticated();
- sessionContext.setInitiatingEntity(occupant1Jid);
-
- StanzaReceiverRelay stanzaRelay = (StanzaReceiverRelay)
sessionContext.getServerRuntimeContext().getStanzaRelay();
- occupant1Queue = new StanzaReceiverQueue();
- occupant2Queue = new StanzaReceiverQueue();
- stanzaRelay.add(occupant1Jid, occupant1Queue);
- stanzaRelay.add(occupant2Jid, occupant2Queue);
-
- conference = new Conference("foo");
- conference.createRoom(room1Jid, "Room 1");
-
- handler = new MUCEnterRoomHandler(conference);
- }
+public class MUCPresenceHandlerEnterRoomTestCase extends
AbstractMUCPresenceHandlerTestCase {
private Stanza enterRoom(Entity occupantJid, Entity roomJid) {
return enterRoom(occupantJid, roomJid, null);
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java?rev=804134&view=auto
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java
(added)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java
Fri Aug 14 09:18:53 2009
@@ -0,0 +1,115 @@
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import java.util.List;
+
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
+
+/**
+ */
+public class MUCPresenceHandlerExitRoomTestCase extends
AbstractMUCPresenceHandlerTestCase {
+
+ private Stanza exitRoom(Entity occupantJid, Entity roomJid) {
+ StanzaBuilder stanzaBuilder =
StanzaBuilder.createPresenceStanza(occupantJid, roomJid, null,
PresenceStanzaType.UNAVAILABLE, null, null);
+
+ Stanza presenceStanza = stanzaBuilder.getFinalStanza();
+ ResponseStanzaContainer container = handler.execute(presenceStanza,
sessionContext.getServerRuntimeContext(), true, sessionContext, null);
+ if(container != null) {
+ return container.getResponseStanza();
+ } else {
+ return null;
+ }
+ }
+
+ public void testExitRoom() {
+ Room room = conference.findRoom(room1Jid);
+ room.addOccupant(occupant1Jid, "Nick1");
+ room.addOccupant(occupant2Jid, "Nick2");
+
+ assertNull(exitRoom(occupant1Jid, room1JidWithNick));
+
+ assertEquals(1, room.getOccupants().size());
+ Occupant occupant = room.getOccupants().iterator().next();
+
+ assertEquals(occupant2Jid, occupant.getJid());
+ }
+
+ public void testExitNonexistingRoom() {
+ // Quietly ignore
+ assertNull(exitRoom(occupant1Jid, room2JidWithNick));
+ }
+
+ public void testExitRoomWithoutEntering() {
+ // Exit a room where the user is not a participant, quietly ignore
+ assertNull(exitRoom(occupant1Jid, room1JidWithNick));
+ }
+
+ public void testTemporaryRoomDeleted() {
+ // Room1 is temporary
+ Room room = conference.findRoom(room1Jid);
+ assertTrue(room.isRoomType(RoomType.Temporary));
+ room.addOccupant(occupant1Jid, "Nick1");
+
+ // exit room, room should be deleted
+ assertNull(exitRoom(occupant1Jid, room1JidWithNick));
+ assertNull(conference.findRoom(room1Jid));
+ }
+
+
+ public void testPersistentRoomNotDeleted() {
+ // Room2 is persistent
+ Room room = conference.createRoom(room2Jid, "Room 2",
RoomType.Persistent);
+ room.addOccupant(occupant1Jid, "Nick1");
+
+ // exit room, room should be deleted
+ assertNull(exitRoom(occupant1Jid, room1JidWithNick));
+ assertNotNull(conference.findRoom(room1Jid));
+ }
+
+ public void testExitRoomWithRelays() throws Exception {
+ // add occupants to the room
+ Room room = conference.findOrCreateRoom(room1Jid, "Room 1");
+ room.addOccupant(occupant1Jid, "Nick 1");
+ room.addOccupant(occupant2Jid, "Nick 2");
+
+ // now, let user 2 exit room
+ exitRoom(occupant2Jid, room1JidWithNick);
+
+ // verify stanzas to existing occupants on the exiting user
+ assertExitPresenceStanza(room1Jid, "Nick 2", occupant1Jid,
occupant1Queue.getNext(), false);
+ assertExitPresenceStanza(room1Jid, "Nick 2", occupant2Jid,
occupant2Queue.getNext(), true);
+
+ }
+
+ private void assertExitPresenceStanza(Entity roomJid, String nick, Entity
to, Stanza stanza, boolean own) throws XMLSemanticError {
+ // should be from room + nick name
+ assertEquals(roomJid.getFullQualifiedName() + "/" + nick,
stanza.getFrom().getFullQualifiedName());
+ // should be to the existing user
+ assertEquals(to, stanza.getTo());
+
+ assertEquals("unavailable", stanza.getAttributeValue("type"));
+
+ XMLElement xElement = stanza.getSingleInnerElementsNamed("x");
+ assertEquals(NamespaceURIs.XEP0045_MUC_USER,
xElement.getNamespaceURI());
+
+ // since this room is non-anonymous, x must contain an item element
with the users full JID
+ XMLElement itemElement = xElement.getSingleInnerElementsNamed("item");
+ assertEquals("none", itemElement.getAttributeValue("affiliation"));
+ assertEquals("none", itemElement.getAttributeValue("role"));
+
+ if(own) {
+ List<XMLElement> statuses =
xElement.getInnerElementsNamed("status");
+ assertEquals(1, statuses.size());
+ assertEquals("110", statuses.get(0).getAttributeValue("code"));
+ }
+ }
+}
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerVerifyTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerVerifyTestCase.java?rev=804134&view=auto
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerVerifyTestCase.java
(added)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerVerifyTestCase.java
Fri Aug 14 09:18:53 2009
@@ -0,0 +1,65 @@
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import junit.framework.TestCase;
+
+import org.apache.vysper.TestUtil;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+
+/**
+ */
+public class MUCPresenceHandlerVerifyTestCase extends TestCase {
+
+ private static final Entity FROM =
TestUtil.parseUnchecked("[email protected]");
+ private static final Entity TO =
TestUtil.parseUnchecked("[email protected]");
+
+ private MUCPresenceHandler presenceHandler;
+
+ @Override
+ protected void setUp() throws Exception {
+ Conference conference = new Conference("foo");
+ presenceHandler = new MUCPresenceHandler(conference);
+ }
+
+ public void testVerifyNonPresence() {
+ StanzaBuilder builder = StanzaBuilder.createMessageStanza(FROM, TO,
"en", "foo");
+ builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC);
+ builder.endInnerElement();
+
+ assertFalse(presenceHandler.verify(builder.getFinalStanza()));
+ }
+
+
+ public void testVerifyWithMUCNamespace() {
+ StanzaBuilder builder = StanzaBuilder.createPresenceStanza(FROM, TO,
null, null, null, null);
+ builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC);
+ builder.endInnerElement();
+
+ assertTrue(presenceHandler.verify(builder.getFinalStanza()));
+ }
+
+ public void testVerifyWithNonMUCNamespace() {
+ StanzaBuilder builder = StanzaBuilder.createPresenceStanza(FROM, TO,
null, null, null, null);
+ builder.startInnerElement("x", "foo");
+ builder.endInnerElement();
+
+ assertFalse(presenceHandler.verify(builder.getFinalStanza()));
+ }
+
+
+ public void testVerifyWithoutMUCNamespace() {
+ StanzaBuilder builder = StanzaBuilder.createPresenceStanza(FROM, TO,
null, null, null, null);
+
+ assertTrue(presenceHandler.verify(builder.getFinalStanza()));
+ }
+
+
+ public void testVerifyWithoutMUCNamespaceInnerElement() {
+ StanzaBuilder builder = StanzaBuilder.createPresenceStanza(FROM, TO,
null, null, null, null);
+ builder.startInnerElement("foo").endInnerElement();
+
+ assertTrue(presenceHandler.verify(builder.getFinalStanza()));
+ }
+}
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/ConferenceTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/ConferenceTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/ConferenceTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/ConferenceTestCase.java
Fri Aug 14 09:18:53 2009
@@ -25,9 +25,9 @@
import junit.framework.TestCase;
+import org.apache.vysper.TestUtil;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityImpl;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.TestUtil;
/**
*
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTestCase.java?rev=804134&r1=804133&r2=804134&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTestCase.java
Fri Aug 14 09:18:53 2009
@@ -23,9 +23,8 @@
import junit.framework.TestCase;
+import org.apache.vysper.TestUtil;
import org.apache.vysper.xmpp.addressing.Entity;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.TestUtil;
-import org.jivesoftware.smackx.workgroup.packet.RoomTransfer;
/**
*