Java Code Examples for org.springframework.cloud.deployer.spi.app.AppDeployer#deploy()
The following examples show how to use
org.springframework.cloud.deployer.spi.app.AppDeployer#deploy() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: DeployAppStep.java From spring-cloud-skipper with Apache License 2.0 | 6 votes |
private Map<String, String> deploy(Release replacingRelease, List<String> applicationNamesToUpgrade, AppDeployer appDeployer) { List<? extends SpringCloudDeployerApplicationManifest> applicationSpecList = this.applicationManifestReader .read(replacingRelease .getManifest().getData()); Map<String, String> appNameDeploymentIdMap = new HashMap<>(); for (SpringCloudDeployerApplicationManifest applicationManifest : applicationSpecList) { if (applicationNamesToUpgrade.contains(applicationManifest.getApplicationName())) { AppDeploymentRequest appDeploymentRequest = appDeploymentRequestFactory.createAppDeploymentRequest( applicationManifest, replacingRelease.getName(), String.valueOf(replacingRelease.getVersion())); // ============= // DEPLOY DEPLOY // ============= String deploymentId = appDeployer.deploy(appDeploymentRequest); appNameDeploymentIdMap.put(applicationManifest.getApplicationName(), deploymentId); } } return appNameDeploymentIdMap; }
Example 2
Source File: LocalAppDeployerEnvironmentIntegrationTests.java From spring-cloud-deployer-local with Apache License 2.0 | 6 votes |
@Test // was triggered by GH-50 and subsequently GH-55 public void testNoStdoutStderrOnInheritLoggingAndNoNPEOnGetAttributes() { Map<String, String> properties = new HashMap<>(); AppDefinition definition = new AppDefinition(randomName(), properties); Resource resource = testApplication(); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, Collections.singletonMap(LocalDeployerProperties.INHERIT_LOGGING, "true")); AppDeployer deployer = appDeployer(); String deploymentId = deployer.deploy(request); AppStatus appStatus = deployer.status(deploymentId); assertTrue(appStatus.getInstances().size() > 0); for (Entry<String, AppInstanceStatus> instanceStatusEntry : appStatus.getInstances().entrySet()) { Map<String, String> attributes = instanceStatusEntry.getValue().getAttributes(); assertFalse(attributes.containsKey("stdout")); assertFalse(attributes.containsKey("stderr")); } deployer.undeploy(deploymentId); }
Example 3
Source File: LocalAppDeployerIntegrationTests.java From spring-cloud-deployer-local with Apache License 2.0 | 6 votes |
@Test // was triggered by GH-50 and subsequently GH-55 public void testNoStdoutStderrOnInheritLoggingAndNoNPEOnGetAttributes() { Map<String, String> properties = new HashMap<>(); AppDefinition definition = new AppDefinition(randomName(), properties); Resource resource = testApplication(); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, Collections.singletonMap(LocalDeployerProperties.INHERIT_LOGGING, "true")); AppDeployer deployer = appDeployer(); String deploymentId = deployer.deploy(request); AppStatus appStatus = deployer.status(deploymentId); assertTrue(appStatus.getInstances().size() > 0); for (Entry<String, AppInstanceStatus> instanceStatusEntry : appStatus.getInstances().entrySet()) { Map<String, String> attributes = instanceStatusEntry.getValue().getAttributes(); assertFalse(attributes.containsKey("stdout")); assertFalse(attributes.containsKey("stderr")); } deployer.undeploy(deploymentId); }
Example 4
Source File: LocalAppDeployerEnvironmentIntegrationTests.java From spring-cloud-deployer-local with Apache License 2.0 | 5 votes |
@Test public void testInDebugModeWithSuspended() throws Exception { Map<String, String> properties = new HashMap<>(); AppDefinition definition = new AppDefinition(randomName(), properties); Resource resource = testApplication(); Map<String, String> deploymentProperties = new HashMap<>(); deploymentProperties.put(LocalDeployerProperties.DEBUG_PORT, "9999"); deploymentProperties.put(LocalDeployerProperties.DEBUG_SUSPEND, "y"); deploymentProperties.put(LocalDeployerProperties.INHERIT_LOGGING, "true"); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, deploymentProperties); AppDeployer deployer = appDeployer(); String deploymentId = deployer.deploy(request); Thread.sleep(5000); AppStatus appStatus = deployer.status(deploymentId); if (resource instanceof DockerResource) { try { String containerId = getCommandOutput("docker ps -q --filter ancestor="+ TESTAPP_DOCKER_IMAGE_NAME); String logOutput = getCommandOutput("docker logs "+ containerId); assertTrue(logOutput.contains("Listening for transport dt_socket at address: 9999")); } catch (IOException e) { } } else { assertEquals("deploying", appStatus.toString()); } deployer.undeploy(deploymentId); }
Example 5
Source File: LocalAppDeployerIntegrationTests.java From spring-cloud-deployer-local with Apache License 2.0 | 5 votes |
@Test public void testInDebugModeWithSuspended() throws Exception { Map<String, String> properties = new HashMap<>(); AppDefinition definition = new AppDefinition(randomName(), properties); Resource resource = testApplication(); Map<String, String> deploymentProperties = new HashMap<>(); deploymentProperties.put(LocalDeployerProperties.DEBUG_PORT, "9999"); deploymentProperties.put(LocalDeployerProperties.DEBUG_SUSPEND, "y"); deploymentProperties.put(LocalDeployerProperties.INHERIT_LOGGING, "true"); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, deploymentProperties); AppDeployer deployer = appDeployer(); String deploymentId = deployer.deploy(request); Thread.sleep(5000); AppStatus appStatus = deployer.status(deploymentId); if (resource instanceof DockerResource) { try { String containerId = getCommandOutput("docker ps -q --filter ancestor="+ TESTAPP_DOCKER_IMAGE_NAME); String logOutput = getCommandOutput("docker logs "+ containerId); assertTrue(logOutput.contains("Listening for transport dt_socket at address: 9999")); } catch (IOException e) { } } else { assertEquals("deploying", appStatus.toString()); } deployer.undeploy(deploymentId); }
Example 6
Source File: LocalAppDeployerIntegrationTests.java From spring-cloud-deployer-local with Apache License 2.0 | 5 votes |
@Test public void testInDebugModeWithSuspendedUseCamelCase() throws Exception { Map<String, String> properties = new HashMap<>(); AppDefinition definition = new AppDefinition(randomName(), properties); Resource resource = testApplication(); Map<String, String> deploymentProperties = new HashMap<>(); deploymentProperties.put(LocalDeployerProperties.PREFIX + ".debugPort", "8888"); deploymentProperties.put(LocalDeployerProperties.PREFIX + ".debugSuspend", "y"); deploymentProperties.put(LocalDeployerProperties.PREFIX + ".inheritLogging", "true"); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, deploymentProperties); AppDeployer deployer = appDeployer(); String deploymentId = deployer.deploy(request); Thread.sleep(5000); AppStatus appStatus = deployer.status(deploymentId); if (resource instanceof DockerResource) { try { String containerId = getCommandOutput("docker ps -q --filter ancestor="+ TESTAPP_DOCKER_IMAGE_NAME); String logOutput = getCommandOutput("docker logs "+ containerId); assertTrue(logOutput.contains("Listening for transport dt_socket at address: 8888")); } catch (IOException e) { } } else { assertEquals("deploying", appStatus.toString()); } deployer.undeploy(deploymentId); }
Example 7
Source File: LocalAppDeployerIntegrationTests.java From spring-cloud-deployer-local with Apache License 2.0 | 5 votes |
@Test public void testUseDefaultDeployerProperties() throws IOException { LocalDeployerProperties localDeployerProperties = new LocalDeployerProperties(); Path tmpPath = new File(System.getProperty("java.io.tmpdir")).toPath(); Path customWorkDirRoot = tmpPath.resolve("test-default-directory"); localDeployerProperties.setWorkingDirectoriesRoot(customWorkDirRoot.toFile().getAbsolutePath()); // Create a new LocalAppDeployer using a working directory that is different from the default value. AppDeployer appDeployer = new LocalAppDeployer(localDeployerProperties); List<Path> beforeDirs = getBeforePaths(customWorkDirRoot); Map<String, String> properties = new HashMap<>(); properties.put("server.port", "0"); AppDefinition definition = new AppDefinition(randomName(), properties); Resource resource = testApplication(); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource); // Deploy String deploymentId = appDeployer.deploy(request); Timeout timeout = deploymentTimeout(); assertThat(deploymentId, eventually(hasStatusThat( appDeployer, Matchers.<AppStatus>hasProperty("state", is(deployed))), timeout.maxAttempts, timeout.pause)); timeout = undeploymentTimeout(); // Undeploy appDeployer.undeploy(deploymentId); assertThat(deploymentId, eventually(hasStatusThat( appDeployer, Matchers.<AppStatus>hasProperty("state", is(unknown))), timeout.maxAttempts, timeout.pause)); List<Path> afterDirs = getAfterPaths(customWorkDirRoot); assertThat("Additional working directory not created", afterDirs.size(), CoreMatchers.is(beforeDirs.size()+1)); }
Example 8
Source File: DefaultReleaseManager.java From spring-cloud-skipper with Apache License 2.0 | 4 votes |
public Release install(Release newRelease) { Release release = this.releaseRepository.save(newRelease); logger.debug("Manifest = " + ArgumentSanitizer.sanitizeYml(newRelease.getManifest().getData())); // Deploy the application List<? extends SpringCloudDeployerApplicationManifest> applicationSpecList = this.applicationManifestReader .read(release.getManifest().getData()); AppDeployer appDeployer = this.deployerRepository.findByNameRequired(release.getPlatformName()) .getAppDeployer(); Map<String, String> appNameDeploymentIdMap = new HashMap<>(); for (SpringCloudDeployerApplicationManifest springCloudDeployerApplicationManifest : applicationSpecList) { AppDeploymentRequest appDeploymentRequest = this.appDeploymentRequestFactory.createAppDeploymentRequest( springCloudDeployerApplicationManifest, release.getName(), String.valueOf(release.getVersion())); try { String deploymentId = appDeployer.deploy(appDeploymentRequest); appNameDeploymentIdMap .put(springCloudDeployerApplicationManifest.getApplicationName(), deploymentId); } catch (Exception e) { // Update Status in DB Status status = new Status(); status.setStatusCode(StatusCode.FAILED); release.getInfo().setStatus(status); release.getInfo().setDescription("Install failed"); throw new SkipperException(String.format("Could not install AppDeployRequest [%s] " + " to platform [%s]. Error Message = [%s]", appDeploymentRequest.toString(), release.getPlatformName(), e.getMessage()), e); } } saveAppDeployerData(release, appNameDeploymentIdMap); // Update Status in DB updateInstallComplete(release); // Store updated state in in DB and compute status return status(this.releaseRepository.save(release)); }
Example 9
Source File: AppDeployerIT.java From spring-cloud-deployer-yarn with Apache License 2.0 | 4 votes |
@Test public void testStreamTimeLog() throws Exception { assertThat(context.containsBean("appDeployer"), is(true)); assertThat(context.getBean("appDeployer"), instanceOf(YarnAppDeployer.class)); AppDeployer deployer = context.getBean("appDeployer", AppDeployer.class); YarnCloudAppService yarnCloudAppService = context.getBean(YarnCloudAppService.class); MavenProperties m2Properties = new MavenProperties(); Map<String, RemoteRepository> remoteRepositories = new HashMap<>(); remoteRepositories.put("default", new RemoteRepository("https://repo.spring.io/libs-snapshot-local")); m2Properties.setRemoteRepositories(remoteRepositories); MavenResource timeResource = new MavenResource.Builder(m2Properties) .artifactId("time-source") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); MavenResource logResource = new MavenResource.Builder(m2Properties) .artifactId("log-sink") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); Map<String, String> timeProperties = new HashMap<>(); timeProperties.put("spring.cloud.stream.bindings.output.destination", "ticktock.0"); AppDefinition timeDefinition = new AppDefinition("time", timeProperties); Map<String, String> timeEnvironmentProperties = new HashMap<>(); timeEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); timeEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "ticktock"); AppDeploymentRequest timeRequest = new AppDeploymentRequest(timeDefinition, timeResource, timeEnvironmentProperties); Map<String, String> logProperties = new HashMap<>(); logProperties.put("spring.cloud.stream.bindings.input.destination", "ticktock.0"); logProperties.put("expression", "new String(payload + ' hello')"); AppDefinition logDefinition = new AppDefinition("log", logProperties); Map<String, String> logEnvironmentProperties = new HashMap<>(); logEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); logEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "ticktock"); AppDeploymentRequest logRequest = new AppDeploymentRequest(logDefinition, logResource, logEnvironmentProperties); String timeId = deployer.deploy(timeRequest); assertThat(timeId, notNullValue()); ApplicationId applicationId = assertWaitApp(2, TimeUnit.MINUTES, yarnCloudAppService); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "Started TimeSourceApplication"); assertThat(deployer.status(timeId).getState(), is(DeploymentState.deployed)); String logId = deployer.deploy(logRequest); assertThat(logId, notNullValue()); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "Started LogSinkApplication"); assertThat(deployer.status(logId).getState(), is(DeploymentState.deployed)); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "hello"); deployer.undeploy(timeId); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped outbound.ticktock.0"); deployer.undeploy(logId); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped inbound.ticktock.0"); assertThat(deployer.status(timeId).getState(), is(DeploymentState.unknown)); assertThat(deployer.status(logId).getState(), is(DeploymentState.unknown)); List<Resource> resources = ContainerLogUtils.queryContainerLogs( getYarnCluster(), applicationId); assertThat(resources, notNullValue()); assertThat(resources.size(), is(6)); for (Resource res : resources) { File file = res.getFile(); String content = ContainerLogUtils.getFileContent(file); if (file.getName().endsWith("stdout")) { assertThat(file.length(), greaterThan(0l)); } else if (file.getName().endsWith("Container.stderr")) { assertThat("stderr with content: " + content, file.length(), is(0l)); } } }
Example 10
Source File: AppDeployerIT.java From spring-cloud-deployer-yarn with Apache License 2.0 | 4 votes |
@Test public void testStreamTimeLogAsHdfsResource() throws Exception { assertThat(context.containsBean("appDeployer"), is(true)); assertThat(context.getBean("appDeployer"), instanceOf(YarnAppDeployer.class)); AppDeployer deployer = context.getBean("appDeployer", AppDeployer.class); YarnCloudAppService yarnCloudAppService = context.getBean(YarnCloudAppService.class); MavenProperties m2Properties = new MavenProperties(); Map<String, RemoteRepository> remoteRepositories = new HashMap<>(); remoteRepositories.put("default", new RemoteRepository("https://repo.spring.io/libs-snapshot-local")); m2Properties.setRemoteRepositories(remoteRepositories); MavenResource timeResourceBase = new MavenResource.Builder(m2Properties) .artifactId("time-source") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); MavenResource logResourceBase = new MavenResource.Builder(m2Properties) .artifactId("log-sink") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); copyFile(timeResourceBase, "/dataflow/artifacts/repo/"); copyFile(logResourceBase, "/dataflow/artifacts/repo/"); @SuppressWarnings("resource") HdfsResourceLoader resourceLoader = new HdfsResourceLoader(getConfiguration()); resourceLoader.setHandleNoprefix(true); Resource timeResource = resourceLoader.getResource("hdfs:/dataflow/artifacts/repo/time-source-1.0.0.BUILD-SNAPSHOT-exec.jar"); Resource logResource = resourceLoader.getResource("hdfs:/dataflow/artifacts/repo/log-sink-1.0.0.BUILD-SNAPSHOT-exec.jar"); Map<String, String> timeProperties = new HashMap<>(); timeProperties.put("spring.cloud.stream.bindings.output.destination", "ticktock.0"); AppDefinition timeDefinition = new AppDefinition("time", timeProperties); Map<String, String> timeEnvironmentProperties = new HashMap<>(); timeEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); timeEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "ticktock"); AppDeploymentRequest timeRequest = new AppDeploymentRequest(timeDefinition, timeResource, timeEnvironmentProperties); Map<String, String> logProperties = new HashMap<>(); logProperties.put("spring.cloud.stream.bindings.input.destination", "ticktock.0"); logProperties.put("expression", "new String(payload + ' hello')"); AppDefinition logDefinition = new AppDefinition("log", logProperties); Map<String, String> logEnvironmentProperties = new HashMap<>(); logEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); logEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "ticktock"); AppDeploymentRequest logRequest = new AppDeploymentRequest(logDefinition, logResource, logEnvironmentProperties); String timeId = deployer.deploy(timeRequest); assertThat(timeId, notNullValue()); ApplicationId applicationId = assertWaitApp(2, TimeUnit.MINUTES, yarnCloudAppService); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "Started TimeSourceApplication"); assertThat(deployer.status(timeId).getState(), is(DeploymentState.deployed)); String logId = deployer.deploy(logRequest); assertThat(logId, notNullValue()); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "Started LogSinkApplication"); assertThat(deployer.status(logId).getState(), is(DeploymentState.deployed)); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "hello"); deployer.undeploy(timeId); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped outbound.ticktock.0"); deployer.undeploy(logId); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped inbound.ticktock.0"); assertThat(deployer.status(timeId).getState(), is(DeploymentState.unknown)); assertThat(deployer.status(logId).getState(), is(DeploymentState.unknown)); List<Resource> resources = ContainerLogUtils.queryContainerLogs( getYarnCluster(), applicationId); assertThat(resources, notNullValue()); assertThat(resources.size(), is(6)); for (Resource res : resources) { File file = res.getFile(); String content = ContainerLogUtils.getFileContent(file); if (file.getName().endsWith("stdout")) { assertThat(file.length(), greaterThan(0l)); } else if (file.getName().endsWith("Container.stderr")) { assertThat("stderr with content: " + content, file.length(), is(0l)); } } }
Example 11
Source File: AppDeployerIT.java From spring-cloud-deployer-yarn with Apache License 2.0 | 4 votes |
@Test public void testStreamTimeHdfs() throws Exception { assertThat(context.containsBean("appDeployer"), is(true)); assertThat(context.getBean("appDeployer"), instanceOf(YarnAppDeployer.class)); AppDeployer deployer = context.getBean("appDeployer", AppDeployer.class); YarnCloudAppService yarnCloudAppService = context.getBean(YarnCloudAppService.class); String fsUri = getConfiguration().get("fs.defaultFS"); MavenProperties m2Properties = new MavenProperties(); Map<String, RemoteRepository> remoteRepositories = new HashMap<>(); remoteRepositories.put("default", new RemoteRepository("https://repo.spring.io/libs-snapshot-local")); m2Properties.setRemoteRepositories(remoteRepositories); MavenResource timeResource = new MavenResource.Builder(m2Properties) .artifactId("time-source") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); MavenResource hdfsResource = new MavenResource.Builder(m2Properties) .artifactId("hdfs-sink") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); Map<String, String> timeProperties = new HashMap<>(); timeProperties.put("spring.cloud.stream.bindings.output.destination", "timehdfs.0"); AppDefinition timeDefinition = new AppDefinition("time", timeProperties); Map<String, String> timeEnvironmentProperties = new HashMap<>(); timeEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); timeEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "timehdfs"); AppDeploymentRequest timeRequest = new AppDeploymentRequest(timeDefinition, timeResource, timeEnvironmentProperties); Map<String, String> hdfsProperties = new HashMap<>(); hdfsProperties.put("spring.cloud.stream.bindings.input.destination", "timehdfs.0"); hdfsProperties.put("spring.hadoop.fsUri", fsUri); AppDefinition hdfsDefinition = new AppDefinition("log", hdfsProperties); Map<String, String> hdfsEnvironmentProperties = new HashMap<>(); hdfsEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); hdfsEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "timehdfs"); AppDeploymentRequest hdfsRequest = new AppDeploymentRequest(hdfsDefinition, hdfsResource, hdfsEnvironmentProperties); String timeId = deployer.deploy(timeRequest); assertThat(timeId, notNullValue()); ApplicationId applicationId = assertWaitApp(2, TimeUnit.MINUTES, yarnCloudAppService); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "Started TimeSourceApplication"); assertThat(deployer.status(timeId).getState(), is(DeploymentState.deployed)); String hdfsId = deployer.deploy(hdfsRequest); assertThat(hdfsId, notNullValue()); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "Started HdfsSinkApplication"); assertThat(deployer.status(hdfsId).getState(), is(DeploymentState.deployed)); waitHdfsFile("/tmp/hdfs-sink/data-0.txt", 2, TimeUnit.MINUTES); deployer.undeploy(timeId); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped outbound.timehdfs.0"); deployer.undeploy(hdfsId); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped inbound.timehdfs.0"); List<Resource> resources = ContainerLogUtils.queryContainerLogs( getYarnCluster(), applicationId); assertThat(resources, notNullValue()); assertThat(resources.size(), is(6)); }
Example 12
Source File: AppDeployerIT.java From spring-cloud-deployer-yarn with Apache License 2.0 | 4 votes |
@Test public void testSmokeDeployer() throws Exception { assertThat(context.containsBean("appDeployer"), is(true)); assertThat(context.getBean("appDeployer"), instanceOf(YarnAppDeployer.class)); AppDeployer deployer = context.getBean("appDeployer", AppDeployer.class); YarnCloudAppService yarnCloudAppService = context.getBean(YarnCloudAppService.class); MavenProperties m2Properties = new MavenProperties(); Map<String, RemoteRepository> remoteRepositories = new HashMap<>(); remoteRepositories.put("default", new RemoteRepository("https://repo.spring.io/libs-snapshot-local")); m2Properties.setRemoteRepositories(remoteRepositories); MavenResource timeResource = new MavenResource.Builder(m2Properties) .artifactId("time-source") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); MavenResource logResource = new MavenResource.Builder(m2Properties) .artifactId("log-sink") .groupId(GROUP_ID) .version(artifactVersion) .extension("jar") .classifier("exec") .build(); Map<String, String> timeProperties = new HashMap<>(); timeProperties.put("spring.cloud.stream.bindings.output.destination", "ticktock.0"); AppDefinition timeDefinition = new AppDefinition("time", timeProperties); Map<String, String> timeEnvironmentProperties = new HashMap<>(); timeEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); timeEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "ticktock"); AppDeploymentRequest timeRequest = new AppDeploymentRequest(timeDefinition, timeResource, timeEnvironmentProperties); Map<String, String> logProperties = new HashMap<>(); logProperties.put("spring.cloud.stream.bindings.input.destination", "ticktock.0"); logProperties.put("expression", "new String(payload + ' hello')"); AppDefinition logDefinition = new AppDefinition("log", logProperties); Map<String, String> logEnvironmentProperties = new HashMap<>(); logEnvironmentProperties.put(AppDeployer.COUNT_PROPERTY_KEY, "1"); logEnvironmentProperties.put(AppDeployer.GROUP_PROPERTY_KEY, "ticktock"); AppDeploymentRequest logRequest = new AppDeploymentRequest(logDefinition, logResource, logEnvironmentProperties); String timeId = deployer.deploy(timeRequest); assertThat(timeId, notNullValue()); String logId = deployer.deploy(logRequest); assertThat(logId, notNullValue()); ApplicationId applicationId = assertWaitApp(2, TimeUnit.MINUTES, yarnCloudAppService); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "Started TimeSourceApplication"); assertThat(deployer.status(timeId).getState(), is(DeploymentState.deployed)); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "Started LogSinkApplication"); assertThat(deployer.status(logId).getState(), is(DeploymentState.deployed)); assertWaitFileContent(1, TimeUnit.MINUTES, applicationId, "hello"); for (int i = 0; i < 10; i++) { deployer.status(timeId); deployer.status(logId); } deployer.undeploy(timeId); for (int i = 0; i < 500; i++) { deployer.status(timeId); deployer.status(logId); } deployer.undeploy(logId); for (int i = 0; i < 500; i++) { deployer.status(timeId); deployer.status(logId); } assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped outbound.ticktock.0"); assertWaitFileContent(2, TimeUnit.MINUTES, applicationId, "stopped inbound.ticktock.0"); List<Resource> resources = ContainerLogUtils.queryContainerLogs( getYarnCluster(), applicationId); assertThat(resources, notNullValue()); assertThat(resources.size(), is(6)); for (Resource res : resources) { File file = res.getFile(); String content = ContainerLogUtils.getFileContent(file); if (file.getName().endsWith("stdout")) { assertThat(file.length(), greaterThan(0l)); } else if (file.getName().endsWith("Container.stderr")) { assertThat("stderr with content: " + content, file.length(), is(0l)); } } }