You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2008/05/16 21:20:51 UTC

svn commit: r657175 - in /labs/vysper/src: main/java/org/apache/vysper/xmpp/resourcebinding/ main/java/org/apache/vysper/xmpp/server/ main/java/org/apache/vysper/xmpp/stanza/ test/java/org/apache/vysper/xmpp/modules/core/base/handler/

Author: berndf
Date: Fri May 16 12:20:50 2008
New Revision: 657175

URL: http://svn.apache.org/viewvc?rev=657175&view=rev
Log:
[vysper] improve presence handling, therefore add unit test testbed. make 'unavailable' state trackable

Added:
    labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java
Modified:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceState.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceState.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceState.java?rev=657175&r1=657174&r2=657175&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceState.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceState.java Fri May 16 12:20:50 2008
@@ -13,14 +13,18 @@
 	 * A resource is connected if resource binding was successful.
 	 */
 	CONNECTED,
-	/**
-	 * A connected resource is considered "available" after successfully sending
-	 * its initial presence.
-	 */
-	AVAILABLE,
-	/**
-	 * An available resource is considered "interested" after requesting the
-	 * entity's roster.
-	 */
-	INTERESTED
+    /**
+     * An available resource is considered "interested" after requesting the
+     * entity's roster.
+     */
+    INTERESTED,
+    /**
+      * A connected resource is considered "available" after successfully sending
+      * its initial presence.
+      */
+    AVAILABLE,
+    /**
+      * A resource is no longer "available" 
+      */
+    UNAVAILABLE
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java?rev=657175&r1=657174&r2=657175&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java Fri May 16 12:20:50 2008
@@ -57,6 +57,7 @@
     public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay stanzaRelay) {
         this.serverEntity = serverEntity;
         this.stanzaRelay = stanzaRelay;
+        this.resourceRegistry = new ResourceRegistry();
     }
 
     public DefaultServerRuntimeContext(Entity serverEntity, 

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java?rev=657175&r1=657174&r2=657175&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java Fri May 16 12:20:50 2008
@@ -48,6 +48,20 @@
         return stanzaBuilder;        
     }
     
+    public static StanzaBuilder createPresenceStanza(Entity from, Entity to, String lang, PresenceStanzaType type, String show, String status) {
+        StanzaBuilder stanzaBuilder = new StanzaBuilder("presence");
+        if (from != null) stanzaBuilder.addAttribute("from", from.getFullQualifiedName());
+        if (to != null) stanzaBuilder.addAttribute("to", to.getFullQualifiedName());
+        if (lang != null) stanzaBuilder.addAttribute("xml:lang", lang);
+        if (show != null) {
+            stanzaBuilder.startInnerElement("show").addText(show).endInnerElement();
+        }
+        if (status != null) {
+            stanzaBuilder.startInnerElement("status").addText(status).endInnerElement();
+        }
+        return stanzaBuilder;        
+    }
+    
     class ElementStruct {
         public ElementStruct parentElement = null;
         public XMLElement element = null;

Added: labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java?rev=657175&view=auto
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java (added)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java Fri May 16 12:20:50 2008
@@ -0,0 +1,76 @@
+/***********************************************************************
+ * Copyright (c) 2006-2007 The Apache Software Foundation.             *
+ * All rights reserved.                                                *
+ * ------------------------------------------------------------------- *
+ * Licensed 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.core.base.handler;
+
+import junit.framework.TestCase;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
+import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.resourcebinding.ResourceState;
+import org.apache.vysper.xmpp.server.SessionState;
+import org.apache.vysper.xmpp.server.TestSessionContext;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
+
+/**
+ */
+public class PresenceHandlerTestCase extends TestCase {
+    private TestSessionContext sessionContext;
+
+    private SessionStateHolder sessionStateHolder = new SessionStateHolder();
+    private PresenceHandler presenceHandler = new PresenceHandler();
+    private String boundResourceId;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        sessionContext = new TestSessionContext(sessionStateHolder);
+        sessionContext.setInitiatingEntity(EntityImpl.parse("tester@vysper.org"));
+        sessionStateHolder.setState(SessionState.AUTHENTICATED);
+        boundResourceId = sessionContext.bindResource();
+        sessionContext.getServerRuntimeContext().getResourceRegistry().setResourceState(boundResourceId, ResourceState.INTERESTED);
+    }
+
+    protected ResourceState getBoundResourcesState() {
+        return sessionContext.getServerRuntimeContext().getResourceRegistry().getResourceState(boundResourceId);
+    }
+    
+    protected void setBoundResourcesState(ResourceState newResourcesState) {
+        sessionContext.getServerRuntimeContext().getResourceRegistry().setResourceState(boundResourceId, newResourcesState);
+    }
+    
+    public void testInitialPresence() {
+        StanzaBuilder stanzaBuilder = new StanzaBuilder("presence");
+
+        assertEquals(getBoundResourcesState(), ResourceState.INTERESTED);
+        ResponseStanzaContainer responseStanzaContainer = presenceHandler.execute(stanzaBuilder.getFinalStanza(), sessionContext, null);
+        assertNull(responseStanzaContainer);
+        assertEquals(getBoundResourcesState(), ResourceState.AVAILABLE);
+    }
+
+    public void testUnavailable() {
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createPresenceStanza(null, null, null, PresenceStanzaType.UNAVAILABLE, null, null);
+
+        setBoundResourcesState(ResourceState.AVAILABLE);
+        ResponseStanzaContainer responseStanzaContainer = presenceHandler.execute(stanzaBuilder.getFinalStanza(), sessionContext, null);
+        assertNull(responseStanzaContainer);
+        assertEquals(ResourceState.UNAVAILABLE, getBoundResourcesState());
+        
+        // TODO check that the required notifications are sent
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org