@Override public List<Subscriber> getSubscribers(int n) { if (context == QUERY_SUBMISSION) { return getPubscribers(n).stream().map(p -> (Subscriber) p).collect(Collectors.toList()); } return IntStream.range(0, n).mapToObj(i -> new DRPCQuerySubscriber(config, maxUncommittedMessages)) .collect(Collectors.toList()); }
@BeforeMethod public void setup() { DRPCConfig config = new DRPCConfig("src/test/resources/test_drpc_config.yaml"); // 1 task for the component named "foo" with task index 0 CustomTopologyContext context = new CustomTopologyContext(Collections.singletonList(1), "foo", 0); config.set(DRPCConfig.STORM_CONTEXT, context); Map stormConfig = new Config("src/test/resources/test_storm_config.yaml").getAll(Optional.empty()); config.set(DRPCConfig.STORM_CONFIG, stormConfig); subscriber = new DRPCQuerySubscriber(config, 5); DRPCOutputCollector collector = subscriber.getCollector(); // Override the DRPCSpout with our own that emits using our collector. injectedMockSpout = new MockDRPCSpout("foo", collector); subscriber.setSpout(injectedMockSpout); }
@Test public void testCommitingRemovesPendingDRPCRequests() throws Exception { injectedMockSpout.addMessageParts("foo", "{}", "{'duration': 2000}"); injectedMockSpout.addMessageParts("bar", "{}"); subscriber.receive(); subscriber.receive(); subscriber.receive(); // 3 uncommitted messages. Commit the second one subscriber.commit("foo", 1); Assert.assertFalse(injectedMockSpout.isClosed()); subscriber.close(); Assert.assertTrue(injectedMockSpout.isClosed()); Set<Object> actual = new HashSet<>(injectedMockSpout.getFailed()); Set<Object> expected = new HashSet<>(asList(makeMessageID("foo", 0), makeMessageID("bar", 2))); Assert.assertEquals(actual, expected); }
@Test public void testFailingDoesNotRemovePendingDRPCRequests() throws Exception { injectedMockSpout.addMessageParts("foo", "{}", "{'duration': 2000}"); injectedMockSpout.addMessageParts("bar", "{}"); subscriber.receive(); subscriber.receive(); subscriber.receive(); Assert.assertTrue(injectedMockSpout.getFailed().isEmpty()); // 3 uncommitted messages. Fail the second one subscriber.fail("foo", 1); Assert.assertTrue(injectedMockSpout.getFailed().isEmpty()); // We should fail all messages included the failed one Assert.assertFalse(injectedMockSpout.isClosed()); subscriber.close(); Assert.assertTrue(injectedMockSpout.isClosed()); Set<Object> actual = new HashSet<>(injectedMockSpout.getFailed()); Set<Object> expected = new HashSet<>(asList(makeMessageID("foo", 0), makeMessageID("foo", 1), makeMessageID("bar", 2))); Assert.assertEquals(actual, expected); } }
@Test public void testClosingFailsPendingDRPCRequests() throws Exception { injectedMockSpout.addMessageParts("foo", "{}", "{'duration': 2000}"); injectedMockSpout.addMessageParts("bar", "{}"); subscriber.receive(); subscriber.receive(); subscriber.receive(); // 3 uncommitted messages Assert.assertFalse(injectedMockSpout.isClosed()); subscriber.close(); Assert.assertTrue(injectedMockSpout.isClosed()); Set<Object> actual = new HashSet<>(injectedMockSpout.getFailed()); Set<Object> expected = new HashSet<>(asList(makeMessageID("foo", 0), makeMessageID("foo", 1), makeMessageID("bar", 2))); Assert.assertEquals(actual, expected); }
@Test public void testClosing() { Assert.assertFalse(injectedMockSpout.isClosed()); subscriber.close(); Assert.assertTrue(injectedMockSpout.isClosed()); }
@Override public Subscriber getSubscriber() { return context == QUERY_SUBMISSION ? getPubscriber() : new DRPCQuerySubscriber(config, maxUncommittedMessages); }
injectedMockSpout.addMessageParts("bar", "{}"); PubSubMessage actual = subscriber.receive(); Assert.assertEquals(actual.getId(), "foo"); Assert.assertEquals(actual.getSequence(), 0); Assert.assertEquals(metadata.getContent(), makeReturnInfo("fakefoo", "testHost", 0)); actual = subscriber.receive(); Assert.assertEquals(actual.getId(), "foo"); Assert.assertEquals(actual.getSequence(), 1); Assert.assertEquals(metadata.getContent(), makeReturnInfo("fakefoo", "testHost", 1)); actual = subscriber.receive(); Assert.assertEquals(actual.getId(), "bar"); Assert.assertEquals(actual.getSequence(), 0);
@Override public List<Subscriber> getSubscribers(int n) { if (context == QUERY_SUBMISSION) { return getPubscribers(n).stream().map(p -> (Subscriber) p).collect(Collectors.toList()); } return IntStream.range(0, n).mapToObj(i -> new DRPCQuerySubscriber(config, maxUncommittedMessages)) .collect(Collectors.toList()); }
@Override public Subscriber getSubscriber() { return context == QUERY_SUBMISSION ? getPubscriber() : new DRPCQuerySubscriber(config, maxUncommittedMessages); }