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