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