You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2009/08/19 23:12:53 UTC
svn commit: r805976 - in
/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src:
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/
test/java/org/apache/vysper/x...
Author: ngn
Date: Wed Aug 19 21:12:52 2009
New Revision: 805976
URL: http://svn.apache.org/viewvc?rev=805976&view=rev
Log:
Implemented sending private messages (VYSPER-116)
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/handler/MUCMessageHandler.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandlerTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.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/inttest/MUCIntegrationTestCase.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=805976&r1=805975&r2=805976&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 Wed Aug 19 21:12:52 2009
@@ -152,7 +152,7 @@
SubdomainHandlerDictionary dictionary = new SubdomainHandlerDictionary(domain);
dictionary.register(new MUCPresenceHandler(conference));
- dictionary.register(new MUCMessageHandler(conference));
+ dictionary.register(new MUCMessageHandler(conference, domain));
dictionaries.add(dictionary);
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.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/MUCMessageHandler.java?rev=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java Wed Aug 19 21:12:52 2009
@@ -20,7 +20,6 @@
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import org.apache.vysper.compliance.SpecCompliance;
@@ -33,17 +32,15 @@
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.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.stanza.MessageStanza;
+import org.apache.vysper.xmpp.stanza.MessageStanzaType;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
-import org.apache.vysper.xmpp.stanza.MessageStanzaType;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
import org.apache.vysper.xmpp.xmlfragment.Attribute;
-import org.apache.vysper.xmpp.xmlfragment.Renderer;
-import org.apache.vysper.xmpp.xmlfragment.XMLElement;
-import org.apache.vysper.xmpp.xmlfragment.XMLFragment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,9 +58,11 @@
final Logger logger = LoggerFactory.getLogger(MUCMessageHandler.class);
private Conference conference;
+ private Entity moduleDomain;
- public MUCMessageHandler(Conference conference) {
+ public MUCMessageHandler(Conference conference, Entity moduleDomain) {
this.conference = conference;
+ this.moduleDomain = moduleDomain;
}
@Override
@@ -71,8 +70,9 @@
return MUCHandlerHelper.verifyNamespace(stanza);
}
- private Stanza createMessageErrorStanza(Entity from, Entity to, String id, String type, String errorName, Stanza stanza) {
- return MUCHandlerHelper.createErrorStanza("message", from, to, id, type, errorName, stanza.getInnerElements());
+ private Stanza createMessageErrorStanza(Entity from, Entity to, String id, StanzaErrorType type,
+ StanzaErrorCondition errorCondition, Stanza stanza) {
+ return MUCHandlerHelper.createErrorStanza("message", from, to, id, type.value(), errorCondition.value(), stanza.getInnerElements());
}
@Override
@@ -81,21 +81,25 @@
SessionContext sessionContext) {
logger.debug("Received message for MUC");
+ Entity from = sessionContext.getInitiatingEntity();
+ Entity roomWithNickJid = stanza.getTo();
+ Entity roomJid = roomWithNickJid.getBareJID();
+
MessageStanzaType type = stanza.getMessageType();
if(type != null && type == MessageStanzaType.GROUPCHAT) {
// groupchat, message to a room
+
+ // must not have a nick
+ if(roomWithNickJid.getResource() != null) {
+ return createMessageErrorStanza(roomJid, from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.BAD_REQUEST, stanza);
+ }
- Entity roomWithNickJid = stanza.getTo();
- logger.debug("Received groupchat message to {}", roomWithNickJid);
- Room room = conference.findRoom(roomWithNickJid.getBareJID());
+ logger.debug("Received groupchat message to {}", roomJid);
+ Room room = conference.findRoom(roomJid);
if(room != null) {
- // sender must be participant in room
- Entity from = stanza.getFrom();
- if(from == null) {
- from = sessionContext.getInitiatingEntity();
- }
Occupant sendingOccupant = room.findOccupantByJID(from);
+ // sender must be participant in room
if(sendingOccupant != null) {
Entity roomAndSendingNick = new EntityImpl(room.getJID(), sendingOccupant.getName());
@@ -114,20 +118,50 @@
sessionContext);
}
} else {
- return createMessageErrorStanza(room.getJID(), from, stanza.getID(), "modify", "forbidden", stanza);
+ return createMessageErrorStanza(room.getJID(), from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.FORBIDDEN, stanza);
}
} else {
- return createMessageErrorStanza(room.getJID(), from, stanza.getID(), "modify", "not-acceptable", stanza);
+ return createMessageErrorStanza(room.getJID(), from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.NOT_ACCEPTABLE, stanza);
}
} else {
- // TODO how to handle unknown room?
+ return createMessageErrorStanza(moduleDomain, from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.ITEM_NOT_FOUND, stanza);
+ }
+ } else if(type == null || type == MessageStanzaType.CHAT) {
+ // private message
+ logger.debug("Received direct message to {}", roomWithNickJid);
+ Room room = conference.findRoom(roomJid);
+ if(room != null) {
+ Occupant sendingOccupant = room.findOccupantByJID(from);
+
+ // sender must be participant in room
+ if(sendingOccupant != null) {
+ Occupant receivingOccupant = room.findOccupantByNick(roomWithNickJid.getResource());
+
+ // must be sent to an existing occupant in the room
+ if(receivingOccupant != null) {
+
+ Entity roomAndSendingNick = new EntityImpl(room.getJID(), sendingOccupant.getName());
+ logger.debug("Relaying message to {}", receivingOccupant);
+ List<Attribute> replaceAttributes = new ArrayList<Attribute>();
+ replaceAttributes.add(new Attribute("from", roomAndSendingNick.getFullQualifiedName()));
+ replaceAttributes.add(new Attribute("to", receivingOccupant.getJid().getFullQualifiedName()));
+
+ relayStanza(receivingOccupant.getJid(),
+ StanzaBuilder.createClone(stanza, true, replaceAttributes).getFinalStanza(),
+ sessionContext);
+ } else {
+ // TODO correct error?
+ return createMessageErrorStanza(moduleDomain, from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.ITEM_NOT_FOUND, stanza);
+ }
+ } else {
+ return createMessageErrorStanza(room.getJID(), from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.NOT_ACCEPTABLE, stanza);
+ }
+ } else {
+ return createMessageErrorStanza(moduleDomain, from, stanza.getID(), StanzaErrorType.MODIFY, StanzaErrorCondition.ITEM_NOT_FOUND, stanza);
}
- } else {
- // TODO handle non-groupchat messages
}
return null;
-
}
protected void relayStanza(Entity receiver, Stanza stanza,
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.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?rev=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java Wed Aug 19 21:12:52 2009
@@ -86,10 +86,7 @@
// TODO handle null
Entity roomAndNick = stanza.getTo();
- Entity occupantJid = stanza.getFrom();
- if(occupantJid == null) {
- occupantJid = sessionContext.getInitiatingEntity();
- }
+ Entity occupantJid = sessionContext.getInitiatingEntity();
Entity roomJid = roomAndNick.getBareJID();
String nick = roomAndNick.getResource();
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.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/AbstractMUCHandlerTestCase.java?rev=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java Wed Aug 19 21:12:52 2009
@@ -21,14 +21,16 @@
protected TestSessionContext sessionContext;
- protected Entity room1Jid = TestUtil.parseUnchecked("room1@vysper.org");
- protected Entity room2Jid = TestUtil.parseUnchecked("room2@vysper.org");
+ protected static final Entity MODULE_JID = TestUtil.parseUnchecked("chat.vysper.org");
- protected Entity room1JidWithNick = TestUtil.parseUnchecked("room1@vysper.org/nick");
- protected Entity room2JidWithNick = TestUtil.parseUnchecked("room2@vysper.org/nick");
+ protected static final Entity ROOM1_JID = TestUtil.parseUnchecked("room1@chat.vysper.org");
+ protected static final Entity ROOM2_JID = TestUtil.parseUnchecked("room2@chat.vysper.org");
+
+ protected static final Entity ROOM1_JID_WITH_NICK = TestUtil.parseUnchecked("room1@chat.vysper.org/nick");
+ protected static final Entity ROOM2_JID_WITH_NICK = TestUtil.parseUnchecked("room2@chat.vysper.org/nick");
- protected Entity occupant1Jid = TestUtil.parseUnchecked("user1@vysper.org");
- protected Entity occupant2Jid = TestUtil.parseUnchecked("user2@vysper.org");
+ protected static final Entity OCCUPANT1_JID = TestUtil.parseUnchecked("user1@vysper.org");
+ protected static final Entity OCCUPANT2_JID = TestUtil.parseUnchecked("user2@vysper.org");
protected StanzaHandler handler;
protected Conference conference = new Conference("foo");
@@ -40,13 +42,13 @@
@Override
protected void setUp() throws Exception {
sessionContext = TestSessionContext.createWithStanzaReceiverRelayAuthenticated();
- sessionContext.setInitiatingEntity(occupant1Jid);
+ sessionContext.setInitiatingEntity(OCCUPANT1_JID);
StanzaReceiverRelay stanzaRelay = (StanzaReceiverRelay) sessionContext.getServerRuntimeContext().getStanzaRelay();
- stanzaRelay.add(occupant1Jid, occupant1Queue);
- stanzaRelay.add(occupant2Jid, occupant2Queue);
+ stanzaRelay.add(OCCUPANT1_JID, occupant1Queue);
+ stanzaRelay.add(OCCUPANT2_JID, occupant2Queue);
- conference.createRoom(room1Jid, "Room 1");
+ conference.createRoom(ROOM1_JID, "Room 1");
handler = createHandler();
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandlerTestCase.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/MUCMessageHandlerTestCase.java?rev=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandlerTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandlerTestCase.java Wed Aug 19 21:12:52 2009
@@ -1,6 +1,12 @@
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+import static org.apache.vysper.xmpp.stanza.MessageStanzaType.GROUPCHAT;
+
+import java.util.Arrays;
+import java.util.List;
+
import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
@@ -8,7 +14,6 @@
import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
import org.apache.vysper.xmpp.stanza.MessageStanzaType;
-import static org.apache.vysper.xmpp.stanza.MessageStanzaType.GROUPCHAT;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.apache.vysper.xmpp.xmlfragment.Attribute;
@@ -17,92 +22,141 @@
import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
import org.apache.vysper.xmpp.xmlfragment.XMLText;
-import java.util.Arrays;
-import java.util.List;
-
/**
*/
public class MUCMessageHandlerTestCase extends AbstractMUCHandlerTestCase {
-
- private Stanza sendMessage(Entity occupantJid, Entity roomJid, MessageStanzaType type, String body) throws ProtocolException {
- StanzaBuilder stanzaBuilder = StanzaBuilder.createMessageStanza(occupantJid, roomJid, type, null, body);
-
+
+ private static final String BODY = "Body";
+
+ private Stanza sendMessage(Entity from, Entity to, MessageStanzaType type,
+ String body) throws ProtocolException {
+ StanzaBuilder stanzaBuilder = StanzaBuilder.createMessageStanza(from,
+ to, type, null, body);
+
Stanza messageStanza = stanzaBuilder.getFinalStanza();
- ResponseStanzaContainer container = handler.execute(messageStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null);
- if(container != null) {
+ ResponseStanzaContainer container = handler.execute(messageStanza,
+ sessionContext.getServerRuntimeContext(), true, sessionContext,
+ null);
+ if (container != null) {
return container.getResponseStanza();
} else {
return null;
}
}
-
- private void assertMessageErrorStanza(Stanza response, Entity from, Entity to,
- String type, String errorName, List<XMLElement> expectedInnerElements) {
- assertErrorStanza(response, "message", from, to, type, errorName, expectedInnerElements);
+
+ private void assertMessageErrorStanza(Stanza response, Entity from,
+ Entity to, String type, String errorName,
+ List<XMLElement> expectedInnerElements) {
+ assertErrorStanza(response, "message", from, to, type, errorName,
+ expectedInnerElements);
}
-
+
public void testMessageWithNoVoice() throws Exception {
- Room room = conference.findOrCreateRoom(room1Jid, "Room 1");
- Occupant occupant = room.addOccupant(occupant1Jid, "nick");
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ Occupant occupant = room.addOccupant(OCCUPANT1_JID, "nick");
// make sure the occupant has no voice
occupant.setRole(Role.Visitor);
-
testNotAllowedMessage(room, "forbidden");
}
-
+
public void testMessageUserNotOccupant() throws Exception {
- Room room = conference.findOrCreateRoom(room1Jid, "Room 1");
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
// do not add user to room
-
+
testNotAllowedMessage(room, "not-acceptable");
}
-
- private void testNotAllowedMessage(Room room, String expectedErrorName) throws Exception {
+
+ private void testNotAllowedMessage(Room room, String expectedErrorName)
+ throws Exception {
String body = "Message body";
-
-
+
// now, let user 2 exit room
- Stanza errorStanza = sendMessage(occupant1Jid, room1JidWithNick, GROUPCHAT, body);
+ Stanza errorStanza = sendMessage(OCCUPANT1_JID, ROOM1_JID,
+ GROUPCHAT, body);
XMLText text = new XMLText(body);
- XMLElement expectedBody = new XMLElement("body", null, (Attribute[])null, new XMLFragment[]{text});
- assertMessageErrorStanza(errorStanza, room1Jid, occupant1Jid, "modify", expectedErrorName, Arrays.asList(expectedBody));
-
+ XMLElement expectedBody = new XMLElement("body", null,
+ (Attribute[]) null, new XMLFragment[] { text });
+ assertMessageErrorStanza(errorStanza, ROOM1_JID, OCCUPANT1_JID, "modify",
+ expectedErrorName, Arrays.asList(expectedBody));
+
// no message should be relayed
assertNull(occupant1Queue.getNext());
assertNull(occupant2Queue.getNext());
}
-
+
public void testMessageToRoomWithRelays() throws Exception {
String body = "Message body";
-
+
// add occupants to the room
- Room room = conference.findOrCreateRoom(room1Jid, "Room 1");
- room.addOccupant(occupant1Jid, "nick");
- room.addOccupant(occupant2Jid, "Nick 2");
-
- // now, let user 2 exit room
- sendMessage(occupant1Jid, room1JidWithNick, GROUPCHAT, body);
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ room.addOccupant(OCCUPANT1_JID, "nick");
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
+
+ // send message to room
+ sendMessage(OCCUPANT1_JID, ROOM1_JID, GROUPCHAT, body);
+
+ // verify stanzas to existing occupants on the exiting user
+ assertMessageStanza(ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "groupchat", body,
+ occupant1Queue.getNext());
+ assertMessageStanza(ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "groupchat", body,
+ occupant2Queue.getNext());
+ }
+
+ public void testMessageToOccupant() throws Exception {
+ String body = "Message body";
+
+ // add occupants to the room
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ room.addOccupant(OCCUPANT1_JID, "nick");
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
+
+ // send message to occupant 1
+ sendMessage(OCCUPANT1_JID, new EntityImpl(ROOM1_JID, "Nick 2"), MessageStanzaType.CHAT, body);
// verify stanzas to existing occupants on the exiting user
- assertMessageStanza(room1JidWithNick, occupant1Jid, "groupchat", body, occupant1Queue.getNext());
- assertMessageStanza(room1JidWithNick, occupant2Jid, "groupchat", body, occupant2Queue.getNext());
+ assertMessageStanza(ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "chat", body,
+ occupant2Queue.getNext());
+ assertNull(occupant1Queue.getNext());
+ }
+
+ public void testGroupChatMessageToOccupant() throws Exception {
+ // add occupants to the room
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ room.addOccupant(OCCUPANT1_JID, "nick");
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
+
+ // send message to occupant 1 with type groupchat
+ Stanza errorStanza = sendMessage(OCCUPANT1_JID, new EntityImpl(ROOM1_JID, "Nick 2"), MessageStanzaType.GROUPCHAT, BODY);
+
+ XMLText text = new XMLText(BODY);
+ XMLElement expectedBody = new XMLElement("body", null,
+ (Attribute[]) null, new XMLFragment[] { text });
+ assertMessageErrorStanza(errorStanza, ROOM1_JID, OCCUPANT1_JID, "modify",
+ "bad-request", Arrays.asList(expectedBody));
+
+ // no message should be relayed
+ assertNull(occupant1Queue.getNext());
+ assertNull(occupant2Queue.getNext());
+
}
- private void assertMessageStanza(Entity from, Entity to, String type, String body, Stanza stanza) throws XMLSemanticError {
+
+ private void assertMessageStanza(Entity from, Entity to, String type,
+ String body, Stanza stanza) throws XMLSemanticError {
assertEquals(from, stanza.getFrom());
assertEquals(to, stanza.getTo());
- if(type != null) {
+ if (type != null) {
assertEquals(type, stanza.getAttributeValue("type"));
}
-
+
XMLElement bodyElement = stanza.getSingleInnerElementsNamed("body");
assertEquals(body, bodyElement.getInnerText().getText());
}
@Override
protected StanzaHandler createHandler() {
- return new MUCMessageHandler(conference);
+ return new MUCMessageHandler(conference, MODULE_JID);
}
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.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?rev=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java Wed Aug 19 21:12:52 2009
@@ -51,64 +51,64 @@
}
public void testEnterExistingRoom() throws Exception {
- Room room = conference.findRoom(room1Jid);
+ Room room = conference.findRoom(ROOM1_JID);
assertEquals(0, room.getOccupants().size());
- enterRoom(occupant1Jid, room1JidWithNick);
+ enterRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK);
assertEquals(1, room.getOccupants().size());
Occupant occupant = room.getOccupants().iterator().next();
- assertEquals(occupant1Jid, occupant.getJid());
+ assertEquals(OCCUPANT1_JID, occupant.getJid());
assertEquals("nick", occupant.getName());
}
public void testEnterRoomWithDuplicateNick() throws Exception {
- assertNull(enterRoom(occupant1Jid, room1JidWithNick));
- Stanza error = enterRoom(occupant2Jid, room1JidWithNick);
+ assertNull(enterRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK));
+ Stanza error = enterRoom(OCCUPANT2_JID, ROOM1_JID_WITH_NICK);
assertNotNull(error);
}
public void testEnterNonExistingRoom() throws Exception {
- Room room = conference.findRoom(room2Jid);
+ Room room = conference.findRoom(ROOM2_JID);
assertNull(room);
- enterRoom(occupant1Jid, room2JidWithNick);
+ enterRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK);
- room = conference.findRoom(room2Jid);
+ room = conference.findRoom(ROOM2_JID);
assertNotNull(room);
assertEquals(1, room.getOccupants().size());
Occupant occupant = room.getOccupants().iterator().next();
- assertEquals(occupant1Jid, occupant.getJid());
+ assertEquals(OCCUPANT1_JID, occupant.getJid());
assertEquals("nick", occupant.getName());
}
public void testEnterWithoutNick() throws Exception {
// try entering without a nick
- PresenceStanza response = (PresenceStanza) enterRoom(occupant1Jid, room1Jid);
+ PresenceStanza response = (PresenceStanza) enterRoom(OCCUPANT1_JID, ROOM1_JID);
- assertPresenceErrorStanza(response, room1Jid, occupant1Jid, "modify", "jid-malformed");
+ assertPresenceErrorStanza(response, ROOM1_JID, OCCUPANT1_JID, "modify", "jid-malformed");
}
public void testEnterWithPassword() throws Exception {
- Room room = conference.createRoom(room2Jid, "Room 1", RoomType.PasswordProtected);
+ Room room = conference.createRoom(ROOM2_JID, "Room 1", RoomType.PasswordProtected);
room.setPassword("secret");
// no error should be returned
- assertNull(enterRoom(occupant1Jid, room2JidWithNick, "secret"));
+ assertNull(enterRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK, "secret"));
assertEquals(1, room.getOccupants().size());
}
public void testEnterWithoutPassword() throws Exception {
- Room room = conference.createRoom(room2Jid, "Room 1", RoomType.PasswordProtected);
+ Room room = conference.createRoom(ROOM2_JID, "Room 1", RoomType.PasswordProtected);
room.setPassword("secret");
// try entering without a password
- PresenceStanza response = (PresenceStanza) enterRoom(occupant1Jid, room2JidWithNick);
+ PresenceStanza response = (PresenceStanza) enterRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK);
- assertPresenceErrorStanza(response, room2Jid, occupant1Jid, "auth", "not-authorized");
+ assertPresenceErrorStanza(response, ROOM2_JID, OCCUPANT1_JID, "auth", "not-authorized");
}
private void assertPresenceErrorStanza(PresenceStanza response, Entity from, Entity to,
@@ -123,25 +123,25 @@
// add one occupant to the room
- Room room = conference.findOrCreateRoom(room1Jid, "Room 1");
- room.addOccupant(occupant1Jid, "Some nick");
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ room.addOccupant(OCCUPANT2_JID, "Some nick");
- // now, let user 2 enter room
- enterRoom(occupant2Jid, room1JidWithNick);
+ // now, let user 1 enter room
+ enterRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK);
// verify stanzas to existing occupants on the new user
- Stanza user2JoinedStanza = occupant1Queue.getNext();
+ Stanza user1JoinedStanza = occupant2Queue.getNext();
// should be from room + nick name
- assertEquals(room1Jid.getFullQualifiedName() + "/nick", user2JoinedStanza.getFrom().getFullQualifiedName());
+ assertEquals(ROOM1_JID.getFullQualifiedName() + "/nick", user1JoinedStanza.getFrom().getFullQualifiedName());
// should be to the existing user
- assertEquals(occupant1Jid, user2JoinedStanza.getTo());
+ assertEquals(OCCUPANT2_JID, user1JoinedStanza.getTo());
- XMLElement xElement = user2JoinedStanza.getSingleInnerElementsNamed("x");
+ XMLElement xElement = user1JoinedStanza.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(occupant2Jid.getFullQualifiedName(), itemElement.getAttributeValue("jid"));
+ assertEquals(OCCUPANT1_JID.getFullQualifiedName(), itemElement.getAttributeValue("jid"));
assertEquals("none", itemElement.getAttributeValue("affiliation"));
assertEquals("participant", itemElement.getAttributeValue("role"));
@@ -149,16 +149,16 @@
// verify stanzas to the new user on all existing users, including himself with status=110 element
// own presence must be sent last
// assert the stanza from the already existing user
- Stanza stanza = occupant2Queue.getNext();
+ Stanza stanza = occupant1Queue.getNext();
assertNotNull(stanza);
- assertEquals(room1Jid.getFullQualifiedName() + "/Some nick", stanza.getFrom().getFullQualifiedName());
- assertEquals(occupant2Jid, stanza.getTo());
+ assertEquals(ROOM1_JID.getFullQualifiedName() + "/Some nick", stanza.getFrom().getFullQualifiedName());
+ assertEquals(OCCUPANT1_JID, stanza.getTo());
// assert stanza from the joining user, must have extra status=110 element
- stanza = occupant2Queue.getNext();
+ stanza = occupant1Queue.getNext();
assertNotNull(stanza);
- assertEquals(room1JidWithNick, stanza.getFrom());
- assertEquals(occupant2Jid, stanza.getTo());
+ assertEquals(ROOM1_JID_WITH_NICK, stanza.getFrom());
+ assertEquals(OCCUPANT1_JID, stanza.getTo());
List<XMLElement> statusElements = stanza.getFirstInnerElement().getInnerElementsNamed("status");
assertEquals(2, statusElements.size());
assertEquals("100", statusElements.get(0).getAttributeValue("code"));
Modified: 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=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerExitRoomTestCase.java Wed Aug 19 21:12:52 2009
@@ -42,78 +42,78 @@
}
public void testExitRoom() throws Exception {
- Room room = conference.findRoom(room1Jid);
- room.addOccupant(occupant1Jid, "Nick1");
- room.addOccupant(occupant2Jid, "Nick2");
+ Room room = conference.findRoom(ROOM1_JID);
+ room.addOccupant(OCCUPANT1_JID, "Nick1");
+ room.addOccupant(OCCUPANT2_JID, "Nick2");
- assertNull(exitRoom(occupant1Jid, room1JidWithNick));
+ assertNull(exitRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK));
assertEquals(1, room.getOccupants().size());
Occupant occupant = room.getOccupants().iterator().next();
- assertEquals(occupant2Jid, occupant.getJid());
+ assertEquals(OCCUPANT2_JID, occupant.getJid());
}
public void testExitNonexistingRoom() throws Exception {
// Quietly ignore
- assertNull(exitRoom(occupant1Jid, room2JidWithNick));
+ assertNull(exitRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK));
}
public void testExitRoomWithoutEntering() throws Exception {
// Exit a room where the user is not a participant, quietly ignore
- assertNull(exitRoom(occupant1Jid, room1JidWithNick));
+ assertNull(exitRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK));
}
public void testTemporaryRoomDeleted() throws Exception {
// Room1 is temporary
- Room room = conference.findRoom(room1Jid);
+ Room room = conference.findRoom(ROOM1_JID);
assertTrue(room.isRoomType(RoomType.Temporary));
- room.addOccupant(occupant1Jid, "Nick1");
+ room.addOccupant(OCCUPANT1_JID, "Nick1");
// exit room, room should be deleted
- assertNull(exitRoom(occupant1Jid, room1JidWithNick));
- assertNull(conference.findRoom(room1Jid));
+ assertNull(exitRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK));
+ assertNull(conference.findRoom(ROOM1_JID));
}
public void testPersistentRoomNotDeleted() throws Exception {
// Room2 is persistent
- Room room = conference.createRoom(room2Jid, "Room 2", RoomType.Persistent);
- room.addOccupant(occupant1Jid, "Nick1");
+ Room room = conference.createRoom(ROOM2_JID, "Room 2", RoomType.Persistent);
+ room.addOccupant(OCCUPANT1_JID, "Nick1");
// exit room, room should be deleted
- assertNull(exitRoom(occupant1Jid, room1JidWithNick));
- assertNotNull(conference.findRoom(room1Jid));
+ assertNull(exitRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK));
+ assertNotNull(conference.findRoom(ROOM1_JID));
}
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");
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ room.addOccupant(OCCUPANT1_JID, "Nick 1");
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
- // now, let user 2 exit room
- exitRoom(occupant2Jid, room1JidWithNick);
+ // now, let user 1 exit room
+ exitRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK);
// verify stanzas to existing occupants on the exiting user
- assertExitPresenceStanza(room1Jid, "Nick 2", occupant1Jid, occupant1Queue.getNext(), null, false);
- assertExitPresenceStanza(room1Jid, "Nick 2", occupant2Jid, occupant2Queue.getNext(), null, true);
+ assertExitPresenceStanza(ROOM1_JID, "Nick 1", OCCUPANT1_JID, occupant1Queue.getNext(), null, true);
+ assertExitPresenceStanza(ROOM1_JID, "Nick 1", OCCUPANT2_JID, occupant2Queue.getNext(), null, false);
}
public void testExitRoomWithRelaysWithStatus() throws Exception {
String statusMessage = "Custom status";
// add occupants to the room
- Room room = conference.findOrCreateRoom(room1Jid, "Room 1");
- room.addOccupant(occupant1Jid, "Nick 1");
- room.addOccupant(occupant2Jid, "Nick 2");
+ Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
+ room.addOccupant(OCCUPANT1_JID, "Nick 1");
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
- // now, let user 2 exit room
- exitRoom(occupant2Jid, room1JidWithNick, statusMessage);
+ // now, let user 1 exit room
+ exitRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, statusMessage);
// verify stanzas to existing occupants on the exiting user
- assertExitPresenceStanza(room1Jid, "Nick 2", occupant1Jid, occupant1Queue.getNext(), statusMessage, false);
- assertExitPresenceStanza(room1Jid, "Nick 2", occupant2Jid, occupant2Queue.getNext(), statusMessage, true);
+ assertExitPresenceStanza(ROOM1_JID, "Nick 1", OCCUPANT1_JID, occupant1Queue.getNext(), statusMessage, true);
+ assertExitPresenceStanza(ROOM1_JID, "Nick 1", OCCUPANT2_JID, occupant2Queue.getNext(), statusMessage, false);
}
private void assertExitPresenceStanza(Entity roomJid, String nick, Entity to, Stanza stanza, String expectedStatus, boolean own) throws XMLSemanticError {
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/MUCIntegrationTestCase.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/inttest/MUCIntegrationTestCase.java?rev=805976&r1=805975&r2=805976&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/MUCIntegrationTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/MUCIntegrationTestCase.java Wed Aug 19 21:12:52 2009
@@ -112,7 +112,7 @@
}
- public void testSendMessage() throws Exception {
+ public void testSendMessageToRoom() throws Exception {
chat.join("Nick");
chat2.join("Nick2");
@@ -129,5 +129,4 @@
assertEquals(ROOM_JID + "/Nick", message.getFrom());
assertEquals(TEST_USERNAME2, message.getTo());
}
-
}