@Test public void testExecuteTuple() throws Exception { Mockito.when(mockWaterMarkEventGenerator.track(Mockito.any(), Mockito.anyLong())).thenReturn(true); Tuple mockTuple = Mockito.mock(Tuple.class); executor.initState(null); executor.waterMarkEventGenerator = mockWaterMarkEventGenerator; executor.execute(mockTuple); // should be ack-ed once Mockito.verify(mockOutputCollector, Mockito.times(1)).ack(mockTuple); }
@Test public void testTrackSingleStreamOutOfOrder() throws Exception { waterMarkEventGenerator.track(streamId("s1"), 100); waterMarkEventGenerator.track(streamId("s1"), 110); waterMarkEventGenerator.track(streamId("s1"), 104); waterMarkEventGenerator.run(); assertTrue(eventList.get(0).isWatermark()); assertEquals(105, eventList.get(0).getTimestamp()); }
@Test public void testExecuteLatetuple() throws Exception { Mockito.when(mockWaterMarkEventGenerator.track(Mockito.any(), Mockito.anyLong())).thenReturn(false); Tuple mockTuple = Mockito.mock(Tuple.class); executor.initState(null); executor.waterMarkEventGenerator = mockWaterMarkEventGenerator; executor.execute(mockTuple); // ack-ed once Mockito.verify(mockOutputCollector, Mockito.times(1)).ack(mockTuple); // late tuple emitted ArgumentCaptor<String> stringCaptor = ArgumentCaptor.forClass(String.class); Mockito.verify(mockOutputCollector, Mockito.times(1)) .emit(stringCaptor.capture(), anchorCaptor.capture(), valuesCaptor.capture()); Assert.assertEquals(LATE_STREAM, stringCaptor.getValue()); Assert.assertEquals(Collections.singletonList(mockTuple), anchorCaptor.getValue()); Assert.assertEquals(new Values(mockTuple), valuesCaptor.getValue()); }
@Override public void execute(Tuple input) { if (isTupleTs()) { long ts = timestampExtractor.extractTimestamp(input); if (waterMarkEventGenerator.track(input.getSourceGlobalStreamId(), ts)) { windowManager.add(input, ts); } else { if (lateTupleStream != null) { windowedOutputCollector.emit(lateTupleStream, input, new Values(input)); } else { LOG.info("Received a late tuple {} with ts {}. This will not be processed.", input, ts); } windowedOutputCollector.ack(input); } } else { windowManager.add(input); } }
@Test public void testTrackTwoStreams() throws Exception { Set<GlobalStreamId> streams = new HashSet<>(); streams.add(streamId("s1")); streams.add(streamId("s2")); waterMarkEventGenerator = new WaterMarkEventGenerator<>(windowManager, 100000, 5, streams); waterMarkEventGenerator.track(streamId("s1"), 100); waterMarkEventGenerator.track(streamId("s1"), 110); waterMarkEventGenerator.run(); assertTrue(eventList.isEmpty()); waterMarkEventGenerator.track(streamId("s2"), 95); waterMarkEventGenerator.track(streamId("s2"), 98); waterMarkEventGenerator.run(); assertTrue(eventList.get(0).isWatermark()); assertEquals(93, eventList.get(0).getTimestamp()); }
@Test public void testCacheEviction() { Mockito.when(mockWaterMarkEventGenerator.track(Mockito.any(), Mockito.anyLong())).thenReturn(true); executor.initState(null); executor.waterMarkEventGenerator = mockWaterMarkEventGenerator;
@Test public void testLateEvent() throws Exception { assertTrue(waterMarkEventGenerator.track(streamId("s1"), 100)); assertTrue(waterMarkEventGenerator.track(streamId("s1"), 110)); waterMarkEventGenerator.run(); assertTrue(eventList.get(0).isWatermark()); assertEquals(105, eventList.get(0).getTimestamp()); eventList.clear(); assertTrue(waterMarkEventGenerator.track(streamId("s1"), 105)); assertTrue(waterMarkEventGenerator.track(streamId("s1"), 106)); assertTrue(waterMarkEventGenerator.track(streamId("s1"), 115)); assertFalse(waterMarkEventGenerator.track(streamId("s1"), 104)); waterMarkEventGenerator.run(); assertTrue(eventList.get(0).isWatermark()); assertEquals(110, eventList.get(0).getTimestamp()); } }
@Test public void testActivation() throws Exception { Mockito.when(mockWaterMarkEventGenerator.track(Mockito.any(), Mockito.anyLong())).thenReturn(true); executor.initState(null); executor.waterMarkEventGenerator = mockWaterMarkEventGenerator;
@Override public void execute(Tuple input) { if (isTupleTs()) { long ts = timestampExtractor.extractTimestamp(input); if (waterMarkEventGenerator.track(input.getSourceGlobalStreamId(), ts)) { windowManager.add(input, ts); } else { if (lateTupleStream != null) { windowedOutputCollector.emit(lateTupleStream, input, new Values(input)); } else { LOG.info("Received a late tuple {} with ts {}. This will not be processed.", input, ts); } windowedOutputCollector.ack(input); } } else { windowManager.add(input); } }