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++; } }
@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 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); } }