@SafeVarargs
private static <T, OP extends StreamOperator<T>> OperatorChain<T, OP> setupOperatorChain(
OneInputStreamOperator<T, T>... operators) {
checkNotNull(operators);
checkArgument(operators.length > 0);
try (MockEnvironment env = MockEnvironment.builder().build()) {
final StreamTask<?, ?> containingTask = new OneInputStreamTask<T, OneInputStreamOperator<T, T>>(env);
final StreamStatusProvider statusProvider = mock(StreamStatusProvider.class);
final StreamConfig cfg = new StreamConfig(new Configuration());
final StreamOperator<?>[] ops = new StreamOperator<?>[operators.length];
@SuppressWarnings({"unchecked", "rawtypes"})
WatermarkGaugeExposingOutput<StreamRecord<T>> lastWriter = new BroadcastingOutputCollector<>(
new Output[0], statusProvider);
for (int i = 0; i < ops.length; i++) {
OneInputStreamOperator<T, T> op = operators[ops.length - i - 1];
op.setup(containingTask, cfg, lastWriter);
lastWriter = new ChainingOutput<>(op, statusProvider, null);
ops[i] = op;
}
@SuppressWarnings("unchecked")
final OP head = (OP) operators[0];
return new OperatorChain<>(
ops,
new RecordWriterOutput<?>[0],
lastWriter,
head);
}
}