@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); }
public void addMessageParts(String id, String... contents) { int size = messageIDs.size(); int index = size; for (String content : contents) { List<Object> tuple = makeTuple(makeMessage(id, content, index - size), makeReturnInfo("fake" + id, "testHost", index)); tuples.offer(tuple); Object messageID = makeMessageID(id, index); messageIDs.offer(messageID); index++; } }
public static Object makeMessageID(String id, int index) { return zipToJSON(asList("id", "index"), asList(id, index)); }
injectedMockSpout.addMessageParts("foo", "{}", "{'duration': 2000}"); injectedMockSpout.addMessageParts("bar", "{}"); Assert.assertTrue(actual.hasMetadata()); Metadata metadata = actual.getMetadata(); Assert.assertEquals(metadata.getContent(), makeReturnInfo("fakefoo", "testHost", 0)); Assert.assertTrue(actual.hasMetadata()); metadata = actual.getMetadata(); Assert.assertEquals(metadata.getContent(), makeReturnInfo("fakefoo", "testHost", 1)); Assert.assertTrue(actual.hasMetadata()); metadata = actual.getMetadata(); Assert.assertEquals(metadata.getContent(), makeReturnInfo("fakebar", "testHost", 2));
@Test(expectedExceptions = PubSubException.class) public void testFailing() throws Exception { injectedMockBolt.setFailNumber(1); Assert.assertEquals(injectedMockBolt.getCount(), 0); PubSubMessage message = new PubSubMessage("foo", "{}", new Metadata(null, makeReturnInfo("a", "testHost", 80))); publisher.send(message); }
@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 testSending() throws Exception { Assert.assertEquals(injectedMockBolt.getCount(), 0); PubSubMessage message = new PubSubMessage("foo", "{}", new Metadata(null, makeReturnInfo("a", "testHost", 80))); publisher.send(message); Assert.assertEquals(injectedMockBolt.getCount(), 1); Assert.assertTrue(collector.isAcked()); Assert.assertFalse(collector.isFailed()); // Output is no longer present Assert.assertFalse(collector.haveOutput()); Assert.assertNull(collector.reset()); message = new PubSubMessage("bar", "{}", new Metadata(null, makeReturnInfo("b", "testHost", 80))); publisher.send(message); Assert.assertEquals(injectedMockBolt.getCount(), 2); Assert.assertTrue(collector.isAcked()); Assert.assertFalse(collector.isFailed()); Assert.assertFalse(collector.haveOutput()); Assert.assertNull(collector.reset()); }
@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); }
public static String makeReturnInfo(String drpcID, String host, int port) { return JSONFormatter.asJSON(zipToJSON(asList("id", "host", "port"), asList(drpcID, host, port))); }
@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); } }