@Test
	public void testDeleteCompositeSource() {
		deployStream("aCompositeStream", "compositesource | sink");
		ModuleDefinitionService moduleDefinitionService = getAdminContext().getBean(
				ModuleDefinitionService.class);
		// Not actually used in test so ok for now
		DetailedModuleDefinitionResourceAssembler assembler = mock(DetailedModuleDefinitionResourceAssembler.class);
		ModulesController modulesController = new ModulesController(moduleDefinitionService, assembler);
		try {
			modulesController.delete(ModuleType.source, "compositeModuleThatDoesNotExist");
			fail("Exception should be thrown when trying to delete a composite module that does not exist.");
		}
		catch (NoSuchModuleException e) {
			assertEquals("Could not find module with name 'compositeModuleThatDoesNotExist' and type 'source'",
					e.getMessage());
		}
		try {
			// source:file is a valid module, that is not used by a composite
			modulesController.delete(ModuleType.source, "file");
			fail("Exception should be thrown when trying to delete a non-deletable (because non-composite) module.");
		}
		catch (IllegalArgumentException e) {
			assertEquals("Could not delete module 'source:file'", e.getMessage());
		}
		assertDeleteFailsWhenPartOfStreamDef(modulesController);
		undeployStream("aCompositeStream");
		// Delete will still fail after undeploying the stream
		assertDeleteFailsWhenPartOfStreamDef(modulesController);
		// Delete the stream defintion
		deleteStream("aCompositeStream");
		// Now delete the composite module
		modulesController.delete(ModuleType.source, "compositesource");
		// Assert that it was deleted
		assertNull(getModuleRegistry().findDefinition("compositesource", ModuleType.source));
	}
Tests for streams created with composed modules.

@author Mark Fisher
spring-xd-dirt/src/test/java/org/springframework/xd/dirt/stream/ComposedModuleStreamTests.java