Skip to content

Commit 43c8b05

Browse files
committed
Merge pull request #249 from surevine/delete-notifications
Delete notifications
2 parents a251692 + 5cbbc30 commit 43c8b05

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

@@ -22,10 +23,12 @@
2223
import org.xmpp.packet.Packet;
2324
import org.xmpp.packet.PacketError;
2425
import org.xmpp.resultsetmanagement.ResultSet;
26+
import org.xmpp.resultsetmanagement.ResultSetImpl;
2527

2628
public class NodeDelete extends PubSubElementProcessorAbstract {
2729

2830
private static final String NODE_REG_EX = "^/user/[^@]+@[^/]+/[^/]+$";
31+
private ResultSet<NodeSubscription> subscriptions;
2932

3033
private static final Logger LOGGER = Logger.getLogger(NodeThreadsGet.class);
3134

@@ -57,13 +60,21 @@ public void process(Element elm, JID actorJID, IQ reqIQ, Element rsm) throws Exc
5760
outQueue.put(response);
5861
return;
5962
}
63+
getNodeListeners();
6064
deleteNode();
6165
sendNotifications();
6266
}
6367

64-
private void sendNotifications() throws NodeStoreException {
68+
private void getNodeListeners() {
69+
try {
70+
subscriptions = channelManager.getNodeSubscriptionListeners(node);
71+
} catch (NodeStoreException e) {
72+
subscriptions = new ResultSetImpl<NodeSubscription>(new ArrayList<NodeSubscription>());
73+
}
74+
}
75+
76+
private void sendNotifications() throws NodeStoreException {
6577
try {
66-
ResultSet<NodeSubscription> subscriptions = channelManager.getNodeSubscriptionListeners(node);
6778
Message notification = createNotificationMessage();
6879
if (subscriptions != null) {
6980
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
@@ -207,4 +207,5 @@ public void addsInvitedByToUserSubscriptionsListIfUser() throws Exception {
207207
Assert.assertEquals(1, response.getChildElement().element("subscriptions").elements("subscription").size());
208208

209209
}
210+
210211
}

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)