Author: mjakl
Date: Fri Jul  3 19:43:45 2009
New Revision: 790998

URL: http://svn.apache.org/viewvc?rev=790998&view=rev
Log:
Deal with publish error-cases (node unknown, not enough privileges). Fixes 
VYSPER-71.

Modified:
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
    
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishTestCase.java

Modified: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java?rev=790998&r1=790997&r2=790998&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
 Fri Jul  3 19:43:45 2009
@@ -83,13 +83,13 @@
         LeafNode node = root.find(nodeName);
 
         if(node == null) {
-            //TODO node does not exist - error condition 3 (7.1.3)
-            return null;
+            // node does not exist - error condition 3 (7.1.3)
+            return errorStanzaGenerator.generateNoNodeErrorStanza(sender, 
receiver, stanza);
         }
 
         if(!node.isSubscribed(sender)) {
-            // TODO not enough privileges to publish - error condition 1 
(7.1.3)
-            return null;
+            // not enough privileges to publish - error condition 1 (7.1.3)
+            return 
errorStanzaGenerator.generateInsufficientPrivilegesErrorStanza(sender, 
receiver, stanza);
         }
 
         if(strID == null) {

Modified: 
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishTestCase.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishTestCase.java?rev=790998&r1=790997&r2=790998&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishTestCase.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishTestCase.java
 Fri Jul  3 19:43:45 2009
@@ -19,6 +19,8 @@
  */
 package org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.handler;
 
+import java.util.List;
+
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
@@ -118,6 +120,52 @@
         assertEquals(3, relay.getCountRelayed()); // three subscribers
     }
 
+    public void testPublishNoSuchNode() throws Exception {
+        DefaultPublishStanzaGenerator sg = new DefaultPublishStanzaGenerator();
+        Entity pubsubWrongNode = EntityImpl.parse("pubsub.vysper.org");
+
+        ResponseStanzaContainer result = sendStanza(sg.getStanza(client, 
pubsubWrongNode, "id123", "doesnotexist"), true);
+        assertTrue(result.hasResponse());
+        IQStanza response = new IQStanza(result.getResponseStanza());
+        assertEquals(IQStanzaType.ERROR.value(),response.getType());
+        assertFalse(node.isSubscribed(client));
+
+        assertEquals("id123", response.getAttributeValue("id")); // IDs must 
match
+
+        XMLElement error = response.getInnerElementsNamed("error").get(0); 
//jump directly to the error part
+        assertEquals("error", error.getName());
+        assertEquals("cancel", error.getAttributeValue("type"));
+
+        List<XMLElement> errorContent = error.getInnerElements();
+        assertEquals(1, errorContent.size());
+        assertEquals("item-does-not-exist", errorContent.get(0).getName());
+        assertEquals(NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS, 
errorContent.get(0).getNamespace());
+    }
+    
+
+    public void testPublishForbidden() throws Exception {
+        DefaultPublishStanzaGenerator sg = new DefaultPublishStanzaGenerator();
+        Entity yodaNotSubscribed = new 
EntityImpl("yoda","vysper.org","dagobah"); // [email protected]/dagobah
+
+        ResponseStanzaContainer result = 
sendStanza(sg.getStanza(yodaNotSubscribed, pubsubService, "id123", "news"), 
true);
+        assertTrue(result.hasResponse());
+        IQStanza response = new IQStanza(result.getResponseStanza());
+        assertEquals(IQStanzaType.ERROR.value(),response.getType());
+        assertFalse(node.isSubscribed(client));
+        assertEquals(0, node.countSubscriptions(client));
+
+        assertEquals("id123", response.getAttributeValue("id")); // IDs must 
match
+
+        XMLElement error = response.getInnerElementsNamed("error").get(0); 
//jump directly to the error part
+        assertEquals("error", error.getName());
+        assertEquals("auth", error.getAttributeValue("type"));
+
+        List<XMLElement> errorContent = error.getInnerElements();
+        assertEquals(1, errorContent.size());
+        assertEquals("forbidden", errorContent.get(0).getName());
+        assertEquals(NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS, 
errorContent.get(0).getNamespace());
+    }
+
     protected Entity createUser(String jid) throws BindException {
         String boundResourceId = sessionContext.bindResource();
         Entity usr = new EntityImpl(clientBare, boundResourceId);


Reply via email to