diff --git a/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/java/com/aws/greengrass/testing/features/DockerSteps.java b/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/java/com/aws/greengrass/testing/features/DockerSteps.java
index 6fe60173..f0cf8514 100644
--- a/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/java/com/aws/greengrass/testing/features/DockerSteps.java
+++ b/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/java/com/aws/greengrass/testing/features/DockerSteps.java
@@ -39,11 +39,13 @@ public class DockerSteps {
*
* @param image fully qualified image name in name:tag
representation
*/
- @Given("the docker image {word} does not exist on the device")
+ @Given("deleted the docker image {word} if exists on the device")
public void checkDockerImageIsMissing(String image) {
Predicate> predicate = Set::isEmpty;
- checkDockerImagePresence(image, predicate.negate(),
- "The image " + image + " is already on the device. Please remove the image and try again.");
+ if (isDockerImagePresence(image, predicate.negate())) {
+ removeDockerImage(image);
+ }
+
}
@Then("I can check that the docker image {word} exists on the device")
@@ -65,18 +67,30 @@ public void removeDockerImage(String image) {
LOGGER.debug("Removed docker image {}: {}", image, result);
}
- private void checkDockerImagePresence(String image, Predicate> validity, String message) {
+ private boolean isDockerImagePresence(String image, Predicate> validity) {
// This could be improved by using the API on a local host.
+
Set parts = new HashSet<>(Arrays.stream(image.split(":")).collect(Collectors.toSet()));
String[] result = platform.commands().executeToString(CommandInput.builder()
.line("docker").addArgs("images")
.build())
.split("\\r?\\n");
+
Arrays.stream(result)
.map(String::trim)
.flatMap(line -> Arrays.stream(line.split("\\s+")))
.forEach(parts::remove);
+
if (!validity.test(parts)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private void checkDockerImagePresence(String image, Predicate> validity, String message) {
+
+ if (!isDockerImagePresence(image, validity)) {
throw new IllegalStateException(message);
}
}
diff --git a/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/resources/greengrass/features/docker.feature b/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/resources/greengrass/features/docker.feature
index be0027d4..94e9ff77 100644
--- a/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/resources/greengrass/features/docker.feature
+++ b/aws-greengrass-testing-features/aws-greengrass-testing-features-docker/src/main/resources/greengrass/features/docker.feature
@@ -6,7 +6,7 @@ Feature: Greengrass V2 Docker Component
@Docker @IDT
Scenario: I can deploy Docker containers as Greengrass Components
- Given the docker image amazon/amazon-ec2-metadata-mock:v1.9.0 does not exist on the device
+ Given deleted the docker image amazon/amazon-ec2-metadata-mock:v1.9.0 if exists on the device
And I create a Greengrass deployment with components
| DockerHubAmazonContainer | classpath:/greengrass/component/recipes/DockerHubAmazonContainer.yaml |
When I deploy the Greengrass deployment configuration