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"));
>      }
>  }
> 
> 
> 

Reply via email to