@Test
	public void testTappingModulesVariationsWithSinkChannel_XD629() throws IOException {
		HttpSource source = newHttpSource();

		FileSink sink = newFileSink().binary(true);
		FileSink tapsink3 = newFileSink().binary(true);
		FileSink tapsink5 = newFileSink().binary(true);

		String streamName = generateStreamName();
		String queue = generateQueueName();
		stream().create(streamName,
				"%s | transform --expression=payload.toUpperCase() | filter --expression=true > %s", source, queue);
		stream().create(generateStreamName(), "%s > %s", queue, sink);

		stream().create(generateStreamName(),
				"%s > transform --expression=payload.replaceAll('r','.') | %s", getTapName(streamName), tapsink3);

		stream().create(generateStreamName(),
				"%s.filter > transform --expression=payload.replaceAll('A','.') | %s", getTapName(streamName),
				tapsink5);

		source.ensureReady().postData("Dracarys!");

		assertThat(sink, eventually(hasContentsThat(equalTo("DRACARYS!"))));

		assertThat(tapsink3, eventually(hasContentsThat(equalTo("D.aca.ys!"))));

		assertThat(tapsink5, eventually(hasContentsThat(equalTo("DR.C.RYS!"))));

	}
Test a stream that is simply one processor module connecting two named channels.
spring-xd-shell/src/test/java/org/springframework/xd/shell/command/AbstractStreamCommandsTests.java