Author: ngn
Date: Mon Aug 17 06:46:37 2009
New Revision: 804875
URL: http://svn.apache.org/viewvc?rev=804875&view=rev
Log:
Adding integration test case for MUC (in MUC module for now)
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/config/
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/config/bogus_mina_tls.cert
(with props)
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/MUCIntegrationTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/ParticipantStatusListenerAdapter.java
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.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/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.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/model/RoomTestCase.java
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/config/bogus_mina_tls.cert
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/config/bogus_mina_tls.cert?rev=804875&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/config/bogus_mina_tls.cert
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.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/MUCHandlerHelper.java?rev=804875&r1=804874&r2=804875&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java
Mon Aug 17 06:46:37 2009
@@ -54,7 +54,7 @@
}
}
- public static Stanza createErrorStanza(String stanzaName, Entity from,
Entity to, String type, String errorName, List<XMLElement> innerElements) {
+ public static Stanza createErrorStanza(String stanzaName, Entity from,
Entity to, String id, String type, String errorName, List<XMLElement>
innerElements) {
// <presence
// from='[email protected]'
// to='[email protected]/pda'
@@ -67,6 +67,7 @@
StanzaBuilder builder = new StanzaBuilder(stanzaName);
builder.addAttribute("from", from.getFullQualifiedName());
builder.addAttribute("to", to.getFullQualifiedName());
+ if(id != null) builder.addAttribute("id", id);
builder.addAttribute("type", "error");
if(innerElements != null) {
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=804875&r1=804874&r2=804875&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
Mon Aug 17 06:46:37 2009
@@ -72,6 +72,9 @@
StanzaBuilder builder = new StanzaBuilder("message");
builder.addAttribute("from", from.getFullQualifiedName());
builder.addAttribute("to", to.getFullQualifiedName());
+ if(original.getAttribute("type") != null) {
+ builder.addAttribute("type", original.getAttributeValue("type"));
+ }
for(XMLElement innerElement : original.getInnerElements()) {
builder.addPreparedElement(innerElement);
@@ -80,8 +83,8 @@
return builder.getFinalStanza();
}
- private Stanza createMessageErrorStanza(Entity from, Entity to, String
type, String errorName, Stanza stanza) {
- return MUCHandlerHelper.createErrorStanza("message", from, to, type,
errorName, stanza.getInnerElements());
+ 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());
}
@Override
@@ -89,15 +92,21 @@
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
+ logger.debug("Received message for MUC");
String type = stanza.getType();
if(type != null && type.equals("groupchat")) {
// groupchat, message to a room
+
Entity roomWithNickJid = stanza.getTo();
+ logger.debug("Received groupchat message to {}", roomWithNickJid);
Room room = conference.findRoom(roomWithNickJid.getBareJID());
if(room != null) {
// sender must be participant in room
Entity from = stanza.getFrom();
- Occupant sendingOccupant = room.findOccupant(from);
+ if(from == null) {
+ from = sessionContext.getInitiatingEntity();
+ }
+ Occupant sendingOccupant = room.findOccupantByJID(from);
if(sendingOccupant != null) {
@@ -105,20 +114,24 @@
if(sendingOccupant.hasVoice()) {
// relay message to all occupants in room
+ logger.debug("Relaying message to all room occupants");
for(Occupant occupent : room.getOccupants()) {
+ logger.debug("Relaying message to {}", occupent);
relayStanza(occupent.getJid(),
copyMessageStanza(roomAndSendingNick,
occupent.getJid(), stanza),
sessionContext);
}
} else {
- return createMessageErrorStanza(room.getJID(), from,
"modify", "forbidden", stanza);
+ return createMessageErrorStanza(room.getJID(), from,
stanza.getID(), "modify", "forbidden", stanza);
}
} else {
- return createMessageErrorStanza(room.getJID(), from,
"modify", "not-acceptable", stanza);
+ return createMessageErrorStanza(room.getJID(), from,
stanza.getID(), "modify", "not-acceptable", stanza);
}
} else {
// TODO how to handle unknown room?
}
+ } else {
+ // TODO handle non-groupchat messages
}
return null;
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=804875&r1=804874&r2=804875&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
Mon Aug 17 06:46:37 2009
@@ -70,28 +70,33 @@
return MUCHandlerHelper.verifyNamespace(stanza);
}
- private Stanza createPresenceErrorStanza(Entity from, Entity to, String
type, String errorName) {
+ private Stanza createPresenceErrorStanza(Entity from, Entity to, String
id, String type, String errorName) {
// "Note: If an error occurs in relation to joining a room, the
service SHOULD include
// the MUC child element (i.e., <x
xmlns='http://jabber.org/protocol/muc'/>) in the
// <presence/> stanza of type "error"."
- XMLElement xElement = new XMLElement("x", NamespaceURIs.XEP0045_MUC,
(List<Attribute>)null, (List<XMLFragment>)null);
- return MUCHandlerHelper.createErrorStanza("presence", from, to, type,
errorName, Arrays.asList(xElement));
+ Attribute xmlns = new Attribute("xmlns", NamespaceURIs.XEP0045_MUC);
+ XMLElement xElement = new XMLElement("x", null, Arrays.asList(xmlns),
(List<XMLFragment>)null);
+
+ return MUCHandlerHelper.createErrorStanza("presence", from, to, id,
type, errorName, Arrays.asList(xElement));
}
@Override
protected Stanza executePresenceLogic(PresenceStanza stanza,
ServerRuntimeContext serverRuntimeContext, SessionContext sessionContext) {
// TODO handle null
Entity roomAndNick = stanza.getTo();
- // TODO handle null
+
Entity occupantJid = stanza.getFrom();
+ if(occupantJid == null) {
+ occupantJid = sessionContext.getInitiatingEntity();
+ }
Entity roomJid = roomAndNick.getBareJID();
String nick = roomAndNick.getResource();
// user did not send nick name
if(nick == null) {
- return createPresenceErrorStanza(roomJid, occupantJid, "modify",
"jid-malformed");
+ return createPresenceErrorStanza(roomJid, occupantJid,
stanza.getID(), "modify", "jid-malformed");
}
String type = stanza.getType();
@@ -108,9 +113,16 @@
private Stanza enterRoom(PresenceStanza stanza, Entity roomJid,
Entity newOccupantJid, String nick, SessionContext sessionContext)
{
+ logger.debug("{} has requested to enter room {}", newOccupantJid,
roomJid);
+
// TODO what to use for the room name?
Room room = conference.findOrCreateRoom(roomJid, roomJid.getNode());
+ if(room.isInRoom(nick)) {
+ // user is already in room
+ return createPresenceErrorStanza(roomJid, newOccupantJid,
stanza.getID(), "cancel", "conflict");
+ }
+
// check password if password protected
if(room.isRoomType(RoomType.PasswordProtected)) {
// TODO room constructor for password
@@ -130,7 +142,7 @@
if(password == null || !password.equals(room.getPassword())) {
// password missing or not matching
- return createPresenceErrorStanza(roomJid, newOccupantJid,
"auth", "not-authorized");
+ return createPresenceErrorStanza(roomJid, newOccupantJid,
stanza.getID(), "auth", "not-authorized");
}
}
@@ -146,6 +158,8 @@
sendNewOccupantPresenceToExisting(newOccupant, occupant, room,
sessionContext);
}
+ logger.debug("{} successfully entered room {}", newOccupantJid,
roomJid);
+
return null;
}
@@ -155,7 +169,7 @@
// room must exist, or we do nothing
if(room != null) {
- Occupant exitingOccupant = room.findOccupant(occupantJid);
+ Occupant exitingOccupant = room.findOccupantByJID(occupantJid);
// user must by in room, or we do nothing
if(exitingOccupant != null) {
@@ -210,6 +224,7 @@
.endInnerElement();
builder.endInnerElement();
+ logger.debug("Room presence from {} sent to {}", newOccupant,
roomAndOccupantNick);
relayStanza(newOccupant.getJid(), builder.getFinalStanza(),
sessionContext);
}
@@ -244,6 +259,7 @@
}
builder.endInnerElement();
+ logger.debug("Room presence from {} sent to {}", roomAndNewUserNick,
existingOccupant);
relayStanza(existingOccupant.getJid(), builder.getFinalStanza(),
sessionContext);
}
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=804875&r1=804874&r2=804875&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
Mon Aug 17 06:46:37 2009
@@ -109,9 +109,25 @@
return occupant;
}
- public Occupant findOccupant(Entity occupantJid) {
+ public Occupant findOccupantByJID(Entity occupantJid) {
return occupants.get(occupantJid);
}
+
+ public Occupant findOccupantByNick(String nick) {
+ for(Occupant occupant : getOccupants()) {
+ if(occupant.getName().equals(nick)) return occupant;
+ }
+
+ return null;
+ }
+
+ public boolean isInRoom(Entity jid) {
+ return findOccupantByJID(jid) != null;
+ }
+
+ public boolean isInRoom(String nick) {
+ return findOccupantByNick(nick) != null;
+ }
public void removeOccupant(Entity occupantJid) {
occupants.remove(occupantJid);
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=804875&r1=804874&r2=804875&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
Mon Aug 17 06:46:37 2009
@@ -91,13 +91,16 @@
sendMessage(occupant1Jid, room1JidWithNick, "groupchat", body);
// verify stanzas to existing occupants on the exiting user
- assertMessageStanza(room1JidWithNick, occupant1Jid, body,
occupant1Queue.getNext());
- assertMessageStanza(room1JidWithNick, occupant2Jid, body,
occupant2Queue.getNext());
+ assertMessageStanza(room1JidWithNick, occupant1Jid, "groupchat", body,
occupant1Queue.getNext());
+ assertMessageStanza(room1JidWithNick, occupant2Jid, "groupchat", body,
occupant2Queue.getNext());
}
- private void assertMessageStanza(Entity from, Entity to, 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) {
+ assertEquals(type, stanza.getAttributeValue("type"));
+ }
XMLElement bodyElement = stanza.getSingleInnerElementsNamed("body");
assertEquals(body, bodyElement.getInnerText().getText());
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=804875&r1=804874&r2=804875&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
Mon Aug 17 06:46:37 2009
@@ -15,6 +15,7 @@
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.apache.vysper.xmpp.xmlfragment.Attribute;
+import org.apache.vysper.xmpp.xmlfragment.NamespaceAttribute;
import org.apache.vysper.xmpp.xmlfragment.XMLElement;
import org.apache.vysper.xmpp.xmlfragment.XMLFragment;
@@ -61,6 +62,13 @@
assertEquals(occupant1Jid, occupant.getJid());
assertEquals("nick", occupant.getName());
}
+
+ public void testEnterRoomWithDuplicateNick() throws Exception {
+ assertNull(enterRoom(occupant1Jid, room1JidWithNick));
+ Stanza error = enterRoom(occupant2Jid, room1JidWithNick);
+
+ assertNotNull(error);
+ }
public void testEnterNonExistingRoom() throws Exception {
Room room = conference.findRoom(room2Jid);
@@ -105,7 +113,8 @@
private void assertPresenceErrorStanza(PresenceStanza response, Entity
from, Entity to,
String type, String errorName) {
- XMLElement xElement = new XMLElement("x", NamespaceURIs.XEP0045_MUC,
(Attribute[])null, (XMLFragment[])null);
+ Attribute xmlns = new NamespaceAttribute(NamespaceURIs.XEP0045_MUC);
+ XMLElement xElement = new XMLElement("x", null, Arrays.asList(xmlns),
(XMLFragment[])null);
assertErrorStanza(response, "presence", from, to, type, errorName,
Arrays.asList(xElement));
}
Added:
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=804875&view=auto
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/MUCIntegrationTestCase.java
(added)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/MUCIntegrationTestCase.java
Mon Aug 17 06:46:37 2009
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.vysper.xmpp.modules.extension.xep0045_muc.inttest;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.vysper.TestUtil;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.MUCModule;
+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.xep0199_xmppping.AbstractIntegrationTestCase;
+import org.apache.vysper.xmpp.server.XMPPServer;
+import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smack.packet.Message;
+import org.jivesoftware.smackx.muc.MultiUserChat;
+
+/**
+ */
+public class MUCIntegrationTestCase extends AbstractIntegrationTestCase {
+
+ private static final Entity MUC_DOMAIN =
TestUtil.parseUnchecked("chat.vysper.org");
+ private static final String ROOM_JID = "[email protected]";
+
+ private Conference conference = new Conference("test conference");
+
+
+
+ private XMPPConnection client2;
+ private MultiUserChat chat;
+ private MultiUserChat chat2;
+
+ @Override
+ protected void addModules(XMPPServer server) {
+ server.addModule(new MUCModule(MUC_DOMAIN, conference));
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ client2 = connectClient(port, TEST_USERNAME2, TEST_PASSWORD2);
+
+ chat = new MultiUserChat(client, ROOM_JID);
+ chat2 = new MultiUserChat(client2, ROOM_JID);
+ }
+
+ public void testEnterRoom() throws Exception {
+ chat.join("Nick");
+
+ Room room = conference.findRoom(TestUtil.parseUnchecked(ROOM_JID));
+ assertEquals(1, room.getOccupantCount());
+ Occupant occupant = room.getOccupants().iterator().next();
+ assertEquals(TEST_USERNAME1, occupant.getJid().getFullQualifiedName());
+ assertEquals("Nick", occupant.getName());
+
+
+ final BlockingQueue<String> joinedQueue = new
LinkedBlockingQueue<String>();
+ chat.addParticipantStatusListener(new
ParticipantStatusListenerAdapter() {
+
+ public void joined(String participant) {
+ joinedQueue.add(participant);
+ }
+ });
+ chat2.join("Nick2");
+ assertEquals(2, room.getOccupantCount());
+
+ // chat should be notified
+ assertEquals(ROOM_JID + "/Nick2", joinedQueue.poll(5000,
TimeUnit.MILLISECONDS));
+ }
+
+ public void testExitRoom() throws Exception {
+ chat.join("Nick");
+ chat2.join("Nick2");
+
+ Room room = conference.findRoom(TestUtil.parseUnchecked(ROOM_JID));
+ assertEquals(2, room.getOccupantCount());
+
+ final BlockingQueue<String> leftQueue = new
LinkedBlockingQueue<String>();
+ chat.addParticipantStatusListener(new
ParticipantStatusListenerAdapter() {
+ public void left(String participant) {
+ leftQueue.add(participant);
+ }
+ });
+
+
+ chat2.leave();
+
+ // wait for status update
+ assertEquals(ROOM_JID + "/Nick2", leftQueue.poll(5000,
TimeUnit.MILLISECONDS));
+ assertEquals(1, room.getOccupantCount());
+
+ }
+
+ public void testSendMessage() throws Exception {
+ chat.join("Nick");
+ chat2.join("Nick2");
+
+ chat.sendMessage("Fooo");
+ Message message = chat.nextMessage(5000);
+ assertNotNull(message);
+ assertEquals("Fooo", message.getBody());
+ assertEquals(ROOM_JID + "/Nick", message.getFrom());
+ assertEquals(TEST_USERNAME1, message.getTo());
+
+ message = chat2.nextMessage(5000);
+ assertNotNull(message);
+ assertEquals("Fooo", message.getBody());
+ assertEquals(ROOM_JID + "/Nick", message.getFrom());
+ assertEquals(TEST_USERNAME2, message.getTo());
+ }
+
+}
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/ParticipantStatusListenerAdapter.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/ParticipantStatusListenerAdapter.java?rev=804875&view=auto
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/ParticipantStatusListenerAdapter.java
(added)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/inttest/ParticipantStatusListenerAdapter.java
Mon Aug 17 06:46:37 2009
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.vysper.xmpp.modules.extension.xep0045_muc.inttest;
+
+import org.jivesoftware.smackx.muc.ParticipantStatusListener;
+
+/**
+ */
+public class ParticipantStatusListenerAdapter implements
ParticipantStatusListener {
+
+ public void adminGranted(String participant) {
+ }
+
+ public void adminRevoked(String participant) {
+ }
+
+ public void banned(String participant, String actor, String reason) {
+ }
+
+ public void joined(String participant) {
+ }
+
+ public void kicked(String participant, String actor, String reason) {
+ }
+
+ public void left(String participant) {
+ }
+
+ public void membershipGranted(String participant) {
+ }
+
+ public void membershipRevoked(String participant) {
+ }
+
+ public void moderatorGranted(String participant) {
+ }
+
+ public void moderatorRevoked(String participant) {
+ }
+
+ public void nicknameChanged(String participant, String newNickname) {
+ }
+
+ public void ownershipGranted(String participant) {
+ }
+
+ public void ownershipRevoked(String participant) {
+ }
+
+ public void voiceGranted(String participant) {
+ }
+
+ public void voiceRevoked(String participant) {
+ }
+}
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=804875&r1=804874&r2=804875&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
Mon Aug 17 06:46:37 2009
@@ -132,6 +132,29 @@
occupant = room.getOccupants().iterator().next();
assertEquals(occupantJid2, occupant.getJid());
+ }
+
+ public void testFindOccupantByJID() {
+ Room room = new Room(roomJid1, "Room 1");
+ room.addOccupant(occupantJid1, "Nick 1");
+ room.addOccupant(occupantJid2, "Nick 2");
+
+ Occupant occupant = room.findOccupantByJID(occupantJid1);
+ assertNotNull(occupant);
+ assertEquals(occupantJid1, occupant.getJid());
+
+
assertNull(room.findOccupantByJID(TestUtil.parseUnchecked("[email protected]")));
+ }
+ public void testFindOccupantByNick() {
+ Room room = new Room(roomJid1, "Room 1");
+ room.addOccupant(occupantJid1, "Nick 1");
+ room.addOccupant(occupantJid2, "Nick 2");
+
+ Occupant occupant = room.findOccupantByNick("Nick 2");
+ assertNotNull(occupant);
+ assertEquals(occupantJid2, occupant.getJid());
+
+ assertNull(room.findOccupantByNick("Dummy"));
}
}