@Test public void testNextTupleDoesNothingWhenSubscriberThrows() { // No messages to be received from subscriber Assert.assertEquals(subscriber.getReceived().size(), 0); Assert.assertEquals(emitter.getEmitted().size(), 0); // subscriber.receive() -> exception spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 0); Assert.assertEquals(emitter.getEmitted().size(), 0); // subscriber.receive() -> exception spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 0); Assert.assertEquals(emitter.getEmitted().size(), 0); }
@Test public void testNextTupleDoesNothingWhenSubscriberReceivesNull() { // Add null messages to be received from subscriber subscriber.addMessages(null, null); Assert.assertEquals(subscriber.getReceived().size(), 0); Assert.assertEquals(emitter.getEmitted().size(), 0); // subscriber.receive() -> null spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 1); Assert.assertEquals(emitter.getEmitted().size(), 0); // subscriber.receive() -> null spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 2); Assert.assertEquals(emitter.getEmitted().size(), 0); }
@Test public void testSignalOnlyMessagesAreSentOnTheMetadataStream() { // Add messages to be received from subscriber PubSubMessage messageA = new PubSubMessage("42", Metadata.Signal.KILL); PubSubMessage messageB = new PubSubMessage("43", Metadata.Signal.COMPLETE); PubSubMessage messageC = new PubSubMessage("44", null, new Metadata()); subscriber.addMessages(messageA, messageB, messageC); Assert.assertEquals(subscriber.getReceived().size(), 0); Assert.assertEquals(emitter.getEmitted().size(), 0); spout.nextTuple(); spout.nextTuple(); spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 3); Assert.assertEquals(subscriber.getReceived().get(0), messageA); Assert.assertEquals(subscriber.getReceived().get(1), messageB); Assert.assertEquals(subscriber.getReceived().get(2), messageC); Assert.assertEquals(emitter.getEmitted().size(), 3); Tuple emittedFirst = TupleUtils.makeTuple(TupleClassifier.Type.METADATA_TUPLE, messageA.getId(), messageA.getMetadata()); Tuple emittedSecond = TupleUtils.makeTuple(TupleClassifier.Type.METADATA_TUPLE, messageB.getId(), messageB.getMetadata()); Tuple emittedThird = TupleUtils.makeTuple(TupleClassifier.Type.METADATA_TUPLE, messageC.getId(), messageC.getMetadata()); Assert.assertTrue(emitter.wasTupleEmittedTo(emittedFirst, TopologyConstants.METADATA_STREAM)); Assert.assertTrue(emitter.wasTupleEmittedTo(emittedSecond, TopologyConstants.METADATA_STREAM)); Assert.assertTrue(emitter.wasTupleEmittedTo(emittedThird, TopologyConstants.METADATA_STREAM)); Assert.assertTrue(emitter.wasNthEmitted(emittedFirst, 1)); Assert.assertTrue(emitter.wasNthEmitted(emittedSecond, 2)); Assert.assertTrue(emitter.wasNthEmitted(emittedThird, 3)); }
@Test public void testNextTupleMessagesAreReceivedAndTupleIsEmitted() { // Add messages to be received from subscriber PubSubMessage messageA = new PubSubMessage("42", "This is a PubSubMessage", new Metadata()); PubSubMessage messageB = new PubSubMessage("43", "This is also a PubSubMessage", new Metadata()); subscriber.addMessages(messageA, messageB); Assert.assertEquals(subscriber.getReceived().size(), 0); Assert.assertEquals(emitter.getEmitted().size(), 0); // subscriber.receive() -> messageA spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 1); Assert.assertEquals(subscriber.getReceived().get(0), messageA); Tuple emittedFirst = TupleUtils.makeTuple(TupleClassifier.Type.QUERY_TUPLE, messageA.getId(), messageA.getContent(), messageA.getMetadata()); Assert.assertEquals(emitter.getEmitted().size(), 1); Assert.assertTrue(emitter.wasNthEmitted(emittedFirst, 1)); // subscriber.receive() -> messageB spout.nextTuple(); Assert.assertEquals(subscriber.getReceived().size(), 2); Assert.assertEquals(subscriber.getReceived().get(0), messageA); Assert.assertEquals(subscriber.getReceived().get(1), messageB); Tuple emittedSecond = TupleUtils.makeTuple(TupleClassifier.Type.QUERY_TUPLE, messageB.getId(), messageB.getContent(), messageB.getMetadata()); Assert.assertEquals(emitter.getEmitted().size(), 2); Assert.assertTrue(emitter.wasNthEmitted(emittedFirst, 1)); Assert.assertTrue(emitter.wasNthEmitted(emittedSecond, 2)); }