Hi Niklas, MUCIntegrationTestCase.java doesn't compile for me. The class seems to be incomplete.
Bernd n...@apache.org wrote: > 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='darkc...@chat.shakespeare.lit' > // to='ha...@shakespeare.lit/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 = "r...@chat.vysper.org"; > + > + 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("du...@vysper.org"))); > + } > > + 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")); > } > } > > >