From 5dcbc5db29fa48f1aedf15081657cad4d05e8f9e Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 6 Jul 2015 15:53:10 -0400 Subject: [PATCH] Polish DefaultSubscriptionRegistryTests --- .../DefaultSubscriptionRegistryTests.java | 200 +++++++++++------- 1 file changed, 122 insertions(+), 78 deletions(-) diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java index d49ffa3e903..341d3074ffd 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java @@ -30,11 +30,13 @@ import org.springframework.messaging.simp.SimpMessageType; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MultiValueMap; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; /** - * Test fixture for {@link org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry}. + * Test fixture for + * {@link org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry}. * * @author Rossen Stoyanchev * @author Sebastien Deleuze @@ -58,13 +60,19 @@ public class DefaultSubscriptionRegistryTests { String dest = "/foo"; this.registry.registerSubscription(subscribeMessage(null, subsId, dest)); - assertEquals(0, this.registry.findSubscriptions(message(dest)).size()); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); + assertEquals(0, actual.size()); this.registry.registerSubscription(subscribeMessage(sessId, null, dest)); - assertEquals(0, this.registry.findSubscriptions(message(dest)).size()); + actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); + assertEquals(0, actual.size()); this.registry.registerSubscription(subscribeMessage(sessId, subsId, null)); - assertEquals(0, this.registry.findSubscriptions(message(dest)).size()); + actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); + assertEquals(0, actual.size()); } @Test @@ -75,10 +83,11 @@ public class DefaultSubscriptionRegistryTests { String dest = "/foo"; this.registry.registerSubscription(subscribeMessage(sessId, subsId, dest)); - MultiValueMap actual = this.registry.findSubscriptions(message(dest)); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); assertEquals("Expected one element " + actual, 1, actual.size()); - assertEquals(Arrays.asList(subsId), actual.get(sessId)); + assertEquals(Collections.singletonList(subsId), actual.get(sessId)); } @Test @@ -92,9 +101,10 @@ public class DefaultSubscriptionRegistryTests { this.registry.registerSubscription(subscribeMessage(sessId, subId, dest)); } - MultiValueMap actual = this.registry.findSubscriptions(message(dest)); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); - assertEquals("Expected one element " + actual, 1, actual.size()); + assertNotNull(actual); + assertEquals(1, actual.size()); assertEquals(subscriptionIds, sort(actual.get(sessId))); } @@ -111,9 +121,10 @@ public class DefaultSubscriptionRegistryTests { } } - MultiValueMap actual = this.registry.findSubscriptions(message(dest)); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); - assertEquals("Expected three elements " + actual, 3, actual.size()); + assertNotNull(actual); + assertEquals(3, actual.size()); assertEquals(subscriptionIds, sort(actual.get(sessIds.get(0)))); assertEquals(subscriptionIds, sort(actual.get(sessIds.get(1)))); assertEquals(subscriptionIds, sort(actual.get(sessIds.get(2)))); @@ -128,10 +139,11 @@ public class DefaultSubscriptionRegistryTests { String dest = "/topic/PRICE.STOCK.NASDAQ.IBM"; this.registry.registerSubscription(subscribeMessage(sessId, subsId, destPattern)); - MultiValueMap actual = this.registry.findSubscriptions(message(dest)); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); assertEquals("Expected one element " + actual, 1, actual.size()); - assertEquals(Arrays.asList(subsId), actual.get(sessId)); + assertEquals(Collections.singletonList(subsId), actual.get(sessId)); } // SPR-11657 @@ -146,45 +158,62 @@ public class DefaultSubscriptionRegistryTests { String subs2 = "subs02"; String subs3 = "subs03"; - this.registry.registerSubscription(subscribeMessage(sess1, subs2, "/topic/PRICE.STOCK.NASDAQ.IBM")); + String destNasdaqIbm = "/topic/PRICE.STOCK.NASDAQ.IBM"; + Message destNasdaqIbmMessage = createMessage(destNasdaqIbm); + + this.registry.registerSubscription(subscribeMessage(sess1, subs2, destNasdaqIbm)); this.registry.registerSubscription(subscribeMessage(sess1, subs1, "/topic/PRICE.STOCK.*.IBM")); - MultiValueMap actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + MultiValueMap actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(1, actual.size()); assertEquals(Arrays.asList(subs2, subs1), actual.get(sess1)); - this.registry.registerSubscription(subscribeMessage(sess2, subs1, "/topic/PRICE.STOCK.NASDAQ.IBM")); + this.registry.registerSubscription(subscribeMessage(sess2, subs1, destNasdaqIbm)); this.registry.registerSubscription(subscribeMessage(sess2, subs2, "/topic/PRICE.STOCK.NYSE.IBM")); this.registry.registerSubscription(subscribeMessage(sess2, subs3, "/topic/PRICE.STOCK.NASDAQ.GOOG")); - actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(2, actual.size()); assertEquals(Arrays.asList(subs2, subs1), actual.get(sess1)); - assertEquals(Arrays.asList(subs1), actual.get(sess2)); + assertEquals(Collections.singletonList(subs1), actual.get(sess2)); this.registry.unregisterAllSubscriptions(sess1); - actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(1, actual.size()); - assertEquals(Arrays.asList(subs1), actual.get(sess2)); + assertEquals(Collections.singletonList(subs1), actual.get(sess2)); this.registry.registerSubscription(subscribeMessage(sess1, subs1, "/topic/PRICE.STOCK.*.IBM")); - this.registry.registerSubscription(subscribeMessage(sess1, subs2, "/topic/PRICE.STOCK.NASDAQ.IBM")); - actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + this.registry.registerSubscription(subscribeMessage(sess1, subs2, destNasdaqIbm)); + actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(2, actual.size()); assertEquals(Arrays.asList(subs1, subs2), actual.get(sess1)); - assertEquals(Arrays.asList(subs1), actual.get(sess2)); + assertEquals(Collections.singletonList(subs1), actual.get(sess2)); this.registry.unregisterSubscription(unsubscribeMessage(sess1, subs2)); - actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(2, actual.size()); - assertEquals(Arrays.asList(subs1), actual.get(sess1)); - assertEquals(Arrays.asList(subs1), actual.get(sess2)); + assertEquals(Collections.singletonList(subs1), actual.get(sess1)); + assertEquals(Collections.singletonList(subs1), actual.get(sess2)); this.registry.unregisterSubscription(unsubscribeMessage(sess1, subs1)); - actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(1, actual.size()); - assertEquals(Arrays.asList(subs1), actual.get(sess2)); + assertEquals(Collections.singletonList(subs1), actual.get(sess2)); this.registry.unregisterSubscription(unsubscribeMessage(sess2, subs1)); - actual = this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + actual = this.registry.findSubscriptions(destNasdaqIbmMessage); + + assertNotNull(actual); assertEquals(0, actual.size()); } @@ -206,9 +235,9 @@ public class DefaultSubscriptionRegistryTests { this.registry.registerSubscription(subscribeMessage(sess1, subs2, "/topic/PRICE.STOCK.NYSE.IBM")); this.registry.registerSubscription(subscribeMessage(sess1, subs3, "/topic/PRICE.STOCK.NASDAQ.GOOG")); - this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NYSE.IBM")); - this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.GOOG")); - this.registry.findSubscriptions(message("/topic/PRICE.STOCK.NASDAQ.IBM")); + this.registry.findSubscriptions(createMessage("/topic/PRICE.STOCK.NYSE.IBM")); + this.registry.findSubscriptions(createMessage("/topic/PRICE.STOCK.NASDAQ.GOOG")); + this.registry.findSubscriptions(createMessage("/topic/PRICE.STOCK.NASDAQ.IBM")); this.registry.unregisterSubscription(unsubscribeMessage(sess1, subs1)); this.registry.unregisterSubscription(unsubscribeMessage(sess1, subs2)); @@ -219,6 +248,7 @@ public class DefaultSubscriptionRegistryTests { this.registry.registerSubscription(subscribeMessage(sess1, subs3, "/topic/PRICE.STOCK.NASDAQ.GOOG")); this.registry.registerSubscription(subscribeMessage(sess1, subs4, "/topic/PRICE.STOCK.NYSE.IBM")); this.registry.registerSubscription(subscribeMessage(sess2, subs5, "/topic/PRICE.STOCK.NASDAQ.GOOG")); + this.registry.unregisterAllSubscriptions(sess1); this.registry.unregisterAllSubscriptions(sess2); } @@ -231,21 +261,24 @@ public class DefaultSubscriptionRegistryTests { String destPattern = "/topic/PRICE.STOCK.*.{ticker:(IBM|MSFT)}"; this.registry.registerSubscription(subscribeMessage(sessId, subsId, destPattern)); - Message message = message("/topic/PRICE.STOCK.NASDAQ.IBM"); + Message message = createMessage("/topic/PRICE.STOCK.NASDAQ.IBM"); MultiValueMap actual = this.registry.findSubscriptions(message); + assertNotNull(actual); assertEquals("Expected one element " + actual, 1, actual.size()); - assertEquals(Arrays.asList(subsId), actual.get(sessId)); + assertEquals(Collections.singletonList(subsId), actual.get(sessId)); - message = message("/topic/PRICE.STOCK.NASDAQ.MSFT"); + message = createMessage("/topic/PRICE.STOCK.NASDAQ.MSFT"); actual = this.registry.findSubscriptions(message); + assertNotNull(actual); assertEquals("Expected one element " + actual, 1, actual.size()); - assertEquals(Arrays.asList(subsId), actual.get(sessId)); + assertEquals(Collections.singletonList(subsId), actual.get(sessId)); - message = message("/topic/PRICE.STOCK.NASDAQ.VMW"); + message = createMessage("/topic/PRICE.STOCK.NASDAQ.VMW"); actual = this.registry.findSubscriptions(message); + assertNotNull(actual); assertEquals("Expected no elements " + actual, 0, actual.size()); } @@ -263,16 +296,42 @@ public class DefaultSubscriptionRegistryTests { accessor.setDestination(destination); accessor.setNativeHeader("foo", "bar"); Message message = MessageBuilder.createMessage("", accessor.getMessageHeaders()); - MultiValueMap actual = this.registry.findSubscriptions(message); + + assertNotNull(actual); assertEquals(1, actual.size()); - assertEquals(Arrays.asList(subscriptionId), actual.get(sessionId)); + assertEquals(Collections.singletonList(subscriptionId), actual.get(sessionId)); - accessor = SimpMessageHeaderAccessor.create(); - accessor.setDestination(destination); - message = MessageBuilder.createMessage("", accessor.getMessageHeaders()); + actual = this.registry.findSubscriptions(createMessage(destination)); + assertNotNull(actual); + assertEquals(0, actual.size()); + } - assertEquals(0, this.registry.findSubscriptions(message).size()); + // SPR-11931 + + @Test + public void registerSubscriptionTwiceAndUnregister() { + + this.registry.registerSubscription(subscribeMessage("sess01", "subs01", "/foo")); + this.registry.registerSubscription(subscribeMessage("sess01", "subs02", "/foo")); + MultiValueMap actual = this.registry.findSubscriptions(createMessage("/foo")); + + assertNotNull(actual); + assertEquals("Expected 1 element", 1, actual.size()); + assertEquals(Arrays.asList("subs01", "subs02"), actual.get("sess01")); + + this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs01")); + actual = this.registry.findSubscriptions(createMessage("/foo")); + + assertNotNull(actual); + assertEquals("Expected 1 element", 1, actual.size()); + assertEquals(Collections.singletonList("subs02"), actual.get("sess01")); + + this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs02")); + actual = this.registry.findSubscriptions(createMessage("/foo")); + + assertNotNull(actual); + assertEquals("Expected no element", 0, actual.size()); } @Test @@ -292,34 +351,14 @@ public class DefaultSubscriptionRegistryTests { this.registry.unregisterSubscription(unsubscribeMessage(sessIds.get(0), subscriptionIds.get(1))); this.registry.unregisterSubscription(unsubscribeMessage(sessIds.get(0), subscriptionIds.get(2))); - MultiValueMap actual = this.registry.findSubscriptions(message(dest)); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); assertEquals("Expected two elements: " + actual, 2, actual.size()); assertEquals(subscriptionIds, sort(actual.get(sessIds.get(1)))); assertEquals(subscriptionIds, sort(actual.get(sessIds.get(2)))); } - // SPR-11931 - - @Test - public void registerTwiceAndUnregisterSubscriptions() { - - this.registry.registerSubscription(subscribeMessage("sess01", "subs01", "/foo")); - this.registry.registerSubscription(subscribeMessage("sess01", "subs02", "/foo")); - MultiValueMap actual = this.registry.findSubscriptions(message("/foo")); - assertEquals("Expected 1 element", 1, actual.size()); - assertEquals(Arrays.asList("subs01", "subs02"), actual.get("sess01")); - - this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs01")); - actual = this.registry.findSubscriptions(message("/foo")); - assertEquals("Expected 1 element", 1, actual.size()); - assertEquals(Arrays.asList("subs02"), actual.get("sess01")); - - this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs02")); - actual = this.registry.findSubscriptions(message("/foo")); - assertEquals("Expected no element", 0, actual.size()); - } - @Test public void unregisterAllSubscriptions() { @@ -336,8 +375,9 @@ public class DefaultSubscriptionRegistryTests { this.registry.unregisterAllSubscriptions(sessIds.get(0)); this.registry.unregisterAllSubscriptions(sessIds.get(1)); - MultiValueMap actual = this.registry.findSubscriptions(message(dest)); + MultiValueMap actual = this.registry.findSubscriptions(createMessage(dest)); + assertNotNull(actual); assertEquals("Expected one element: " + actual, 1, actual.size()); assertEquals(subscriptionIds, sort(actual.get(sessIds.get(2)))); } @@ -350,7 +390,8 @@ public class DefaultSubscriptionRegistryTests { @Test public void findSubscriptionsNoMatches() { - MultiValueMap actual = this.registry.findSubscriptions(message("/foo")); + MultiValueMap actual = this.registry.findSubscriptions(createMessage("/foo")); + assertNotNull(actual); assertEquals("Expected no elements " + actual, 0, actual.size()); } @@ -359,9 +400,12 @@ public class DefaultSubscriptionRegistryTests { @Test @SuppressWarnings("rawtypes") public void findSubscriptionsReturnsMapSafeToIterate() throws Exception { + this.registry.registerSubscription(subscribeMessage("sess1", "1", "/foo")); this.registry.registerSubscription(subscribeMessage("sess2", "1", "/foo")); - MultiValueMap subscriptions = this.registry.findSubscriptions(message("/foo")); + + MultiValueMap subscriptions = this.registry.findSubscriptions(createMessage("/foo")); + assertNotNull(subscriptions); assertEquals(2, subscriptions.size()); Iterator iterator = subscriptions.entrySet().iterator(); @@ -373,14 +417,20 @@ public class DefaultSubscriptionRegistryTests { // no ConcurrentModificationException } + private Message createMessage(String destination) { + SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(); + accessor.setDestination(destination); + return MessageBuilder.createMessage("", accessor.getMessageHeaders()); + } + private Message subscribeMessage(String sessionId, String subscriptionId, String destination) { return subscribeMessage(sessionId, subscriptionId, destination, null); } - private Message subscribeMessage(String sessionId, String subId, String dest, String selector) { + private Message subscribeMessage(String sessionId, String subscriptionId, String dest, String selector) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.SUBSCRIBE); accessor.setSessionId(sessionId); - accessor.setSubscriptionId(subId); + accessor.setSubscriptionId(subscriptionId); if (dest != null) { accessor.setDestination(dest); } @@ -390,16 +440,10 @@ public class DefaultSubscriptionRegistryTests { return MessageBuilder.createMessage("", accessor.getMessageHeaders()); } - private Message unsubscribeMessage(String sessionId, String subId) { + private Message unsubscribeMessage(String sessionId, String subscriptionId) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.UNSUBSCRIBE); accessor.setSessionId(sessionId); - accessor.setSubscriptionId(subId); - return MessageBuilder.createMessage("", accessor.getMessageHeaders()); - } - - private Message message(String destination) { - SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(); - accessor.setDestination(destination); + accessor.setSubscriptionId(subscriptionId); return MessageBuilder.createMessage("", accessor.getMessageHeaders()); }