Skip to content

Commit 405985b

Browse files
author
Lloyd Watkin
committed
Merge branch 'delete-notifications' of github.com:surevine/buddycloud-server-java
2 parents 342ff1c + 5cbbc30 commit 405985b

3 files changed

Lines changed: 41 additions & 2 deletions

File tree

src/main/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/set/NodeDelete.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.buddycloud.channelserver.packetprocessor.iq.namespace.pubsub.set;
22

3+
import java.util.ArrayList;
34
import java.util.Collection;
45
import java.util.concurrent.BlockingQueue;
56

@@ -20,10 +21,12 @@
2021
import org.xmpp.packet.Packet;
2122
import org.xmpp.packet.PacketError;
2223
import org.xmpp.resultsetmanagement.ResultSet;
24+
import org.xmpp.resultsetmanagement.ResultSetImpl;
2325

2426
public class NodeDelete extends PubSubElementProcessorAbstract {
2527

2628
private static final String NODE_REG_EX = "^/user/[^@]+@[^/]+/[^/]+$";
29+
private ResultSet<NodeSubscription> subscriptions;
2730

2831
public NodeDelete(BlockingQueue<Packet> outQueue, ChannelManager channelManager) {
2932
setChannelManager(channelManager);
@@ -54,13 +57,21 @@ public void process(Element elm, JID actorJID, IQ reqIQ, Element rsm) throws Exc
5457
outQueue.put(response);
5558
return;
5659
}
60+
getNodeListeners();
5761
deleteNode();
5862
sendNotifications();
5963
}
6064

61-
private void sendNotifications() throws NodeStoreException {
65+
private void getNodeListeners() {
66+
try {
67+
subscriptions = channelManager.getNodeSubscriptionListeners(node);
68+
} catch (NodeStoreException e) {
69+
subscriptions = new ResultSetImpl<NodeSubscription>(new ArrayList<NodeSubscription>());
70+
}
71+
}
72+
73+
private void sendNotifications() throws NodeStoreException {
6274
try {
63-
ResultSet<NodeSubscription> subscriptions = channelManager.getNodeSubscriptionListeners(node);
6475
Message notification = createNotificationMessage();
6576
if (subscriptions != null) {
6677
for (NodeSubscription subscription : subscriptions) {

src/test/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/get/SubscriptionsGetTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,5 @@ public void addsInvitedByToUserSubscriptionsListIfUser() throws Exception {
220220
Assert.assertEquals(1, response.getChildElement().element("subscriptions").elements("subscription").size());
221221

222222
}
223+
223224
}

src/test/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/set/NodeDeleteTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import org.buddycloud.channelserver.Configuration;
1010
import org.buddycloud.channelserver.channel.ChannelManager;
11+
import org.buddycloud.channelserver.db.exception.NodeStoreException;
1112
import org.buddycloud.channelserver.packetHandler.iq.IQTestHandler;
1213
import org.buddycloud.channelserver.pubsub.affiliation.Affiliations;
1314
import org.buddycloud.channelserver.pubsub.model.NodeSubscription;
@@ -284,4 +285,30 @@ public void testSuccessfulDeleteWithSubscribers() throws Exception {
284285
Assert.assertEquals(node,
285286
eventEl.element("delete").attributeValue("node"));
286287
}
288+
289+
@Test
290+
public void databaseExceptionWhenGettingListenersSendsMinimalNotifications() throws Exception {
291+
IQ request = readStanzaAsIq("/iq/pubsub/delete/request-with-node.stanza");
292+
Element deleteEl = request.getChildElement().element("delete");
293+
294+
String node = deleteEl.attributeValue("node");
295+
Mockito.when(channelManager.nodeExists(node)).thenReturn(true);
296+
297+
Mockito.doThrow(new NodeStoreException()).when(channelManager)
298+
.getNodeSubscriptionListeners(Mockito.anyString());
299+
300+
Mockito.when(channelManager.getNodeMembership(node, jid)).thenReturn(
301+
new NodeMembershipImpl(node, jid, Subscriptions.subscribed,
302+
Affiliations.owner, null));
303+
304+
nodeDelete.process(deleteEl, jid, request, null);
305+
IQ response = (IQ) queue.poll();
306+
307+
Assert.assertNull(response.getError());
308+
Assert.assertEquals(request.getID(), response.getID());
309+
Assert.assertEquals(Type.result, response.getType());
310+
311+
int adminCount = Configuration.getInstance().getAdminUsers().size();
312+
Assert.assertEquals(adminCount, queue.size());
313+
}
287314
}

0 commit comments

Comments
 (0)