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


Reply via email to