diff --git a/README.md b/README.md index 4ea27e7..40b3242 100644 --- a/README.md +++ b/README.md @@ -80,19 +80,6 @@ use this Cloud Batch Client Library. -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/java-batch/tree/main/samples) directory. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Create With Container No Mounting | [source code](https://github.com/googleapis/java-batch/blob/main/samples/snippets/src/main/java/CreateWithContainerNoMounting.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-batch&page=editor&open_in_editor=samples/snippets/src/main/java/CreateWithContainerNoMounting.java) | -| Create With Script No Mounting | [source code](https://github.com/googleapis/java-batch/blob/main/samples/snippets/src/main/java/CreateWithScriptNoMounting.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-batch&page=editor&open_in_editor=samples/snippets/src/main/java/CreateWithScriptNoMounting.java) | -| Delete Job | [source code](https://github.com/googleapis/java-batch/blob/main/samples/snippets/src/main/java/DeleteJob.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-batch&page=editor&open_in_editor=samples/snippets/src/main/java/DeleteJob.java) | -| Get Job | [source code](https://github.com/googleapis/java-batch/blob/main/samples/snippets/src/main/java/GetJob.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-batch&page=editor&open_in_editor=samples/snippets/src/main/java/GetJob.java) | -| List Jobs | [source code](https://github.com/googleapis/java-batch/blob/main/samples/snippets/src/main/java/ListJobs.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-batch&page=editor&open_in_editor=samples/snippets/src/main/java/ListJobs.java) | - - ## Troubleshooting diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index de28884..677e77c 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -4,12 +4,12 @@ com.google.cloud -snippets jar - Google Google Cloud Batch Snippets + Google Cloud Batch Snippets https://github.com/googleapis/java-batch com.google.cloud.samples @@ -28,7 +28,7 @@ com.google.cloud google-cloud-batch - 0.3.2 + 0.5.0 diff --git a/samples/snippets/src/main/java/CreateWithContainerNoMounting.java b/samples/snippets/src/main/java/CreateWithContainerNoMounting.java deleted file mode 100644 index 71c6f0b..0000000 --- a/samples/snippets/src/main/java/CreateWithContainerNoMounting.java +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// [START batch_create_container_job] - -import com.google.cloud.batch.v1.AllocationPolicy; -import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicy; -import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicyOrTemplate; -import com.google.cloud.batch.v1.BatchServiceClient; -import com.google.cloud.batch.v1.ComputeResource; -import com.google.cloud.batch.v1.CreateJobRequest; -import com.google.cloud.batch.v1.Job; -import com.google.cloud.batch.v1.LogsPolicy; -import com.google.cloud.batch.v1.LogsPolicy.Destination; -import com.google.cloud.batch.v1.Runnable; -import com.google.cloud.batch.v1.Runnable.Container; -import com.google.cloud.batch.v1.TaskGroup; -import com.google.cloud.batch.v1.TaskSpec; -import com.google.protobuf.Duration; -import java.io.IOException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class CreateWithContainerNoMounting { - - public static void main(String[] args) - throws IOException, ExecutionException, InterruptedException, TimeoutException { - // TODO(developer): Replace these variables before running the sample. - // Project ID or project number of the Cloud project you want to use. - String projectId = "YOUR_PROJECT_ID"; - - // Name of the region you want to use to run the job. Regions that are - // available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations - String region = "europe-central2"; - - // The name of the job that will be created. - // It needs to be unique for each project and region pair. - String jobName = "JOB_NAME"; - - createContainerJob(projectId, region, jobName); - } - - // This method shows how to create a sample Batch Job that will run a simple command inside a - // container on Cloud Compute instances. - public static void createContainerJob(String projectId, String region, String jobName) - throws IOException, ExecutionException, InterruptedException, TimeoutException { - // Initialize client that will be used to send requests. This client only needs to be created - // once, and can be reused for multiple requests. After completing all of your requests, call - // the `batchServiceClient.close()` method on the client to safely - // clean up any remaining background resources. - try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) { - - // Define what will be done as part of the job. - Runnable runnable = - Runnable.newBuilder() - .setContainer( - Container.newBuilder() - .setImageUri("gcr.io/google-containers/busybox") - .setEntrypoint("/bin/sh") - .addCommands("-c") - .addCommands( - "echo Hello world! This is task ${BATCH_TASK_INDEX}. " - + "This job has a total of ${BATCH_TASK_COUNT} tasks.") - .build()) - .build(); - - // We can specify what resources are requested by each task. - ComputeResource computeResource = - ComputeResource.newBuilder() - // In milliseconds per cpu-second. This means the task requires 2 whole CPUs. - .setCpuMilli(2000) - // In MiB. - .setMemoryMib(16) - .build(); - - TaskSpec task = - TaskSpec.newBuilder() - // Jobs can be divided into tasks. In this case, we have only one task. - .addRunnables(runnable) - .setComputeResource(computeResource) - .setMaxRetryCount(2) - .setMaxRunDuration(Duration.newBuilder().setSeconds(3600).build()) - .build(); - - // Tasks are grouped inside a job using TaskGroups. - TaskGroup taskGroup = TaskGroup.newBuilder().setTaskCount(4).setTaskSpec(task).build(); - - // Policies are used to define on what kind of virtual machines the tasks will run on. - // In this case, we tell the system to use "e2-standard-4" machine type. - // Read more about machine types here: https://cloud.google.com/compute/docs/machine-types - InstancePolicy instancePolicy = - InstancePolicy.newBuilder().setMachineType("e2-standard-4").build(); - - AllocationPolicy allocationPolicy = - AllocationPolicy.newBuilder() - .addInstances(InstancePolicyOrTemplate.newBuilder().setPolicy(instancePolicy).build()) - .build(); - - Job job = - Job.newBuilder() - .addTaskGroups(taskGroup) - .setAllocationPolicy(allocationPolicy) - .putLabels("env", "testing") - .putLabels("type", "container") - // We use Cloud Logging as it's an out of the box available option. - .setLogsPolicy( - LogsPolicy.newBuilder().setDestination(Destination.CLOUD_LOGGING).build()) - .build(); - - CreateJobRequest createJobRequest = - CreateJobRequest.newBuilder() - // The job's parent is the region in which the job will run. - .setParent(String.format("projects/%s/locations/%s", projectId, region)) - .setJob(job) - .setJobId(jobName) - .build(); - - Job result = - batchServiceClient - .createJobCallable() - .futureCall(createJobRequest) - .get(3, TimeUnit.MINUTES); - - System.out.printf("Successfully created the job: %s", result.getName()); - } - } -} -// [END batch_create_container_job] diff --git a/samples/snippets/src/main/java/CreateWithScriptNoMounting.java b/samples/snippets/src/main/java/CreateWithScriptNoMounting.java deleted file mode 100644 index 36ed06c..0000000 --- a/samples/snippets/src/main/java/CreateWithScriptNoMounting.java +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// [START batch_create_script_job] - -import com.google.cloud.batch.v1.AllocationPolicy; -import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicy; -import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicyOrTemplate; -import com.google.cloud.batch.v1.BatchServiceClient; -import com.google.cloud.batch.v1.ComputeResource; -import com.google.cloud.batch.v1.CreateJobRequest; -import com.google.cloud.batch.v1.Job; -import com.google.cloud.batch.v1.LogsPolicy; -import com.google.cloud.batch.v1.LogsPolicy.Destination; -import com.google.cloud.batch.v1.Runnable; -import com.google.cloud.batch.v1.Runnable.Script; -import com.google.cloud.batch.v1.TaskGroup; -import com.google.cloud.batch.v1.TaskSpec; -import com.google.protobuf.Duration; -import java.io.IOException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class CreateWithScriptNoMounting { - - public static void main(String[] args) - throws IOException, ExecutionException, InterruptedException, TimeoutException { - // TODO(developer): Replace these variables before running the sample. - // Project ID or project number of the Cloud project you want to use. - String projectId = "YOUR_PROJECT_ID"; - - // Name of the region you want to use to run the job. Regions that are - // available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations - String region = "europe-central2"; - - // The name of the job that will be created. - // It needs to be unique for each project and region pair. - String jobName = "JOB_NAME"; - - createScriptJob(projectId, region, jobName); - } - - // This method shows how to create a sample Batch Job that will run - // a simple command on Cloud Compute instances. - public static void createScriptJob(String projectId, String region, String jobName) - throws IOException, ExecutionException, InterruptedException, TimeoutException { - // Initialize client that will be used to send requests. This client only needs to be created - // once, and can be reused for multiple requests. After completing all of your requests, call - // the `batchServiceClient.close()` method on the client to safely - // clean up any remaining background resources. - try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) { - - // Define what will be done as part of the job. - Runnable runnable = - Runnable.newBuilder() - .setScript( - Script.newBuilder() - .setText( - "echo Hello world! This is task ${BATCH_TASK_INDEX}. " - + "This job has a total of ${BATCH_TASK_COUNT} tasks.") - // You can also run a script from a file. Just remember, that needs to be a - // script that's already on the VM that will be running the job. - // Using setText() and setPath() is mutually exclusive. - // .setPath("/tmp/test.sh") - .build()) - .build(); - - // We can specify what resources are requested by each task. - ComputeResource computeResource = - ComputeResource.newBuilder() - // In milliseconds per cpu-second. This means the task requires 2 whole CPUs. - .setCpuMilli(2000) - // In MiB. - .setMemoryMib(16) - .build(); - - TaskSpec task = - TaskSpec.newBuilder() - // Jobs can be divided into tasks. In this case, we have only one task. - .addRunnables(runnable) - .setComputeResource(computeResource) - .setMaxRetryCount(2) - .setMaxRunDuration(Duration.newBuilder().setSeconds(3600).build()) - .build(); - - // Tasks are grouped inside a job using TaskGroups. - TaskGroup taskGroup = TaskGroup.newBuilder().setTaskCount(4).setTaskSpec(task).build(); - - // Policies are used to define on what kind of virtual machines the tasks will run on. - // In this case, we tell the system to use "e2-standard-4" machine type. - // Read more about machine types here: https://cloud.google.com/compute/docs/machine-types - InstancePolicy instancePolicy = - InstancePolicy.newBuilder().setMachineType("e2-standard-4").build(); - - AllocationPolicy allocationPolicy = - AllocationPolicy.newBuilder() - .addInstances(InstancePolicyOrTemplate.newBuilder().setPolicy(instancePolicy).build()) - .build(); - - Job job = - Job.newBuilder() - .addTaskGroups(taskGroup) - .setAllocationPolicy(allocationPolicy) - .putLabels("env", "testing") - .putLabels("type", "script") - // We use Cloud Logging as it's an out of the box available option. - .setLogsPolicy( - LogsPolicy.newBuilder().setDestination(Destination.CLOUD_LOGGING).build()) - .build(); - - CreateJobRequest createJobRequest = - CreateJobRequest.newBuilder() - // The job's parent is the region in which the job will run. - .setParent(String.format("projects/%s/locations/%s", projectId, region)) - .setJob(job) - .setJobId(jobName) - .build(); - - Job result = - batchServiceClient - .createJobCallable() - .futureCall(createJobRequest) - .get(3, TimeUnit.MINUTES); - - System.out.printf("Successfully created the job: %s", result.getName()); - } - } -} -// [END batch_create_script_job] diff --git a/samples/snippets/src/main/java/DeleteJob.java b/samples/snippets/src/main/java/DeleteJob.java deleted file mode 100644 index a424eca..0000000 --- a/samples/snippets/src/main/java/DeleteJob.java +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// [START batch_delete_job] - -import com.google.cloud.batch.v1.BatchServiceClient; -import java.io.IOException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class DeleteJob { - - public static void main(String[] args) - throws IOException, ExecutionException, InterruptedException, TimeoutException { - // TODO(developer): Replace these variables before running the sample. - // Project ID or project number of the Cloud project you want to use. - String projectId = "YOUR_PROJECT_ID"; - - // Name of the region hosts the job. - String region = "europe-central2"; - - // The name of the job that you want to delete. - String jobName = "JOB_NAME"; - - deleteJob(projectId, region, jobName); - } - - // Triggers the deletion of a Job. - public static void deleteJob(String projectId, String region, String jobName) - throws IOException, ExecutionException, InterruptedException, TimeoutException { - // Initialize client that will be used to send requests. This client only needs to be created - // once, and can be reused for multiple requests. After completing all of your requests, call - // the `batchServiceClient.close()` method on the client to safely - // clean up any remaining background resources. - try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) { - - // Construct the parent path of the job. - String name = String.format("projects/%s/locations/%s/jobs/%s", projectId, region, jobName); - - batchServiceClient.deleteJobAsync(name).get(3, TimeUnit.MINUTES); - System.out.printf("Delete the job: %s", jobName); - } - } -} -// [END batch_delete_job] diff --git a/samples/snippets/src/main/java/GetJob.java b/samples/snippets/src/main/java/GetJob.java deleted file mode 100644 index c7637f7..0000000 --- a/samples/snippets/src/main/java/GetJob.java +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// [START batch_get_job] - -import com.google.cloud.batch.v1.BatchServiceClient; -import com.google.cloud.batch.v1.Job; -import com.google.cloud.batch.v1.JobName; -import java.io.IOException; - -public class GetJob { - - public static void main(String[] args) throws IOException { - // TODO(developer): Replace these variables before running the sample. - // Project ID or project number of the Cloud project you want to use. - String projectId = "YOUR_PROJECT_ID"; - - // Name of the region hosts the job. - String region = "europe-central2"; - - // The name of the job you want to retrieve information about. - String jobName = "JOB_NAME"; - - getJob(projectId, region, jobName); - } - - // Retrieve information about a Batch Job. - public static void getJob(String projectId, String region, String jobName) throws IOException { - // Initialize client that will be used to send requests. This client only needs to be created - // once, and can be reused for multiple requests. After completing all of your requests, call - // the `batchServiceClient.close()` method on the client to safely - // clean up any remaining background resources. - try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) { - - Job job = - batchServiceClient.getJob( - JobName.newBuilder() - .setProject(projectId) - .setLocation(region) - .setJob(jobName) - .build()); - - System.out.printf("Retrieved the job: %s ", job.getName()); - } - } -} -// [END batch_get_job] diff --git a/samples/snippets/src/main/java/ListJobs.java b/samples/snippets/src/main/java/ListJobs.java deleted file mode 100644 index e58bc80..0000000 --- a/samples/snippets/src/main/java/ListJobs.java +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// [START batch_list_jobs] - -import com.google.cloud.batch.v1.BatchServiceClient; -import com.google.cloud.batch.v1.Job; -import java.io.IOException; - -public class ListJobs { - - public static void main(String[] args) throws IOException { - // TODO(developer): Replace these variables before running the sample. - // Project ID or project number of the Cloud project you want to use. - String projectId = "YOUR_PROJECT_ID"; - - // Name of the region hosting the jobs. - String region = "europe-central2"; - - listJobs(projectId, region); - } - - // Get a list of all jobs defined in given region. - public static void listJobs(String projectId, String region) throws IOException { - // Initialize client that will be used to send requests. This client only needs to be created - // once, and can be reused for multiple requests. After completing all of your requests, call - // the `batchServiceClient.close()` method on the client to safely - // clean up any remaining background resources. - try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) { - - // Construct the parent path of the job. - String parent = String.format("projects/%s/locations/%s", projectId, region); - - for (Job job : batchServiceClient.listJobs(parent).iterateAll()) { - System.out.println(job.getName()); - } - System.out.println("Listed all batch jobs."); - } - } -} -// [END batch_list_jobs] diff --git a/samples/snippets/src/test/java/BatchBasicIT.java b/samples/snippets/src/test/java/BatchBasicIT.java deleted file mode 100644 index 98c2a04..0000000 --- a/samples/snippets/src/test/java/BatchBasicIT.java +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth.assertWithMessage; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.util.UUID; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -@RunWith(JUnit4.class) -public class BatchBasicIT { - - private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); - private static final String REGION = "europe-north1"; - private static String SCRIPT_JOB_NAME; - private static String CONTAINER_JOB_NAME; - - private ByteArrayOutputStream stdOut; - - // Check if the required environment variables are set. - public static void requireEnvVar(String envVarName) { - assertWithMessage(String.format("Missing environment variable '%s' ", envVarName)) - .that(System.getenv(envVarName)) - .isNotEmpty(); - } - - @BeforeClass - public static void setUp() - throws IOException, InterruptedException, ExecutionException, TimeoutException { - final PrintStream out = System.out; - ByteArrayOutputStream stdOut = new ByteArrayOutputStream(); - System.setOut(new PrintStream(stdOut)); - requireEnvVar("GOOGLE_APPLICATION_CREDENTIALS"); - requireEnvVar("GOOGLE_CLOUD_PROJECT"); - - String uuid = String.valueOf(UUID.randomUUID()); - SCRIPT_JOB_NAME = "test-job-script-" + uuid; - CONTAINER_JOB_NAME = "test-job-container-" + uuid; - - CreateWithContainerNoMounting.createContainerJob(PROJECT_ID, REGION, CONTAINER_JOB_NAME); - assertThat(stdOut.toString()) - .contains( - "Successfully created the job: " - + String.format( - "projects/%s/locations/%s/jobs/%s", PROJECT_ID, REGION, CONTAINER_JOB_NAME)); - CreateWithScriptNoMounting.createScriptJob(PROJECT_ID, REGION, SCRIPT_JOB_NAME); - assertThat(stdOut.toString()) - .contains( - "Successfully created the job: " - + String.format( - "projects/%s/locations/%s/jobs/%s", PROJECT_ID, REGION, SCRIPT_JOB_NAME)); - TimeUnit.SECONDS.sleep(10); - - stdOut.close(); - System.setOut(out); - } - - @AfterClass - public static void cleanup() - throws IOException, InterruptedException, ExecutionException, TimeoutException { - final PrintStream out = System.out; - ByteArrayOutputStream stdOut = new ByteArrayOutputStream(); - System.setOut(new PrintStream(stdOut)); - - DeleteJob.deleteJob(PROJECT_ID, REGION, CONTAINER_JOB_NAME); - DeleteJob.deleteJob(PROJECT_ID, REGION, SCRIPT_JOB_NAME); - - stdOut.close(); - System.setOut(out); - } - - @Before - public void beforeEach() { - stdOut = new ByteArrayOutputStream(); - System.setOut(new PrintStream(stdOut)); - } - - @After - public void afterEach() { - stdOut = null; - System.setOut(null); - } - - @Test - public void testGetJob() throws IOException { - GetJob.getJob(PROJECT_ID, REGION, CONTAINER_JOB_NAME); - assertThat(stdOut.toString()).contains("Retrieved the job"); - } - - @Test - public void testListJobs() throws IOException { - ListJobs.listJobs(PROJECT_ID, REGION); - assertThat(stdOut.toString()).contains(CONTAINER_JOB_NAME); - assertThat(stdOut.toString()).contains(SCRIPT_JOB_NAME); - } -}