@Override public void processElement(WindowedValue<TestStreamIndex<T>> element) throws Exception { TestStreamIndex<T> streamIndex = element.getValue(); List<Event<T>> events = streamIndex.getTestStream().getEvents(); int index = streamIndex.getIndex(); Instant watermark = element.getTimestamp(); Event<T> event = events.get(index); if (event.getType().equals(EventType.ELEMENT)) { UncommittedBundle<T> bundle = context.createBundle( (PCollection<T>) Iterables.getOnlyElement(application.getOutputs().values())); for (TimestampedValue<T> elem : ((ElementEvent<T>) event).getElements()) { bundle.add( WindowedValue.timestampedValueInGlobalWindow(elem.getValue(), elem.getTimestamp())); } resultBuilder.addOutput(bundle); } if (event.getType().equals(EventType.WATERMARK)) { watermark = ((WatermarkEvent<T>) event).getWatermark(); } if (event.getType().equals(EventType.PROCESSING_TIME)) { ((TestClock) context.getClock()) .advance(((ProcessingTimeEvent<T>) event).getProcessingTimeAdvance()); } TestStreamIndex<T> next = streamIndex.next(); if (next.getIndex() < events.size()) { resultBuilder.addUnprocessedElements( Collections.singleton(WindowedValue.timestampedValueInGlobalWindow(next, watermark))); } }
RunnerApi.TestStreamPayload.Event.AdvanceWatermark.newBuilder() .setNewWatermark( ((TestStream.WatermarkEvent<T>) event).getWatermark().getMillis())) .build();