From 6309e1f23177070ae2a2a3877da164ce73c4108a Mon Sep 17 00:00:00 2001 From: Mark Collin Date: Mon, 15 Feb 2016 09:48:11 +0000 Subject: [PATCH 1/2] Fix #38 Images that should be pushed but not kept are now deleted --- .../docker/maven/AbstractDockerMojo.java | 13 ++-- .../docker/maven/BuildImageMojo.java | 20 +++++ .../docker/maven/PushImageMojo.java | 22 ++++++ .../docker/maven/BuildImageMojoTest.java | 76 +++++++++++++++++++ .../docker/maven/PushImageMojoTest.java | 51 ++++++++++++- 5 files changed, 175 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java b/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java index 9909a8f..42a8027 100644 --- a/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java +++ b/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java @@ -60,6 +60,7 @@ public abstract class AbstractDockerMojo extends AbstractMojo { private static final String BUILT_IMAGES_KEY = "builtImages"; private static final String PUSHABLE_IMAGES_KEY = "pushableImages"; private static final String ERRORS_KEY = "errors"; + protected static final String IMAGE_LIST_PROPERTY = "docker.containers.to.remove.after.push"; @Component private RepositorySystem repositorySystem; @@ -224,10 +225,10 @@ protected DockerProvider getDockerProvider() { protected Credentials getCredentials() { // priority to credentials from plugin configuration over the ones from settings return Stream.of(getCredentialsFromParameters(), getCredentialsFromSettings()) - .filter(Optional::isPresent) - .map(Optional::get) - .findFirst() - .orElse(null); + .filter(Optional::isPresent) + .map(Optional::get) + .findFirst() + .orElse(null); } private Optional getCredentialsFromParameters() { @@ -240,12 +241,12 @@ private Optional getCredentialsFromParameters() { } private Optional getCredentialsFromSettings() { - if(settings == null) { + if (settings == null) { getLog().debug("No settings.xml"); return empty(); } Server server = settings.getServer(serverId); - if(server == null) { + if (server == null) { getLog().debug("Cannot find server " + serverId + " in Maven settings"); return empty(); } diff --git a/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java b/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java index a3c13b5..50701fa 100644 --- a/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java +++ b/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java @@ -25,7 +25,9 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -41,6 +43,9 @@ public class BuildImageMojo extends AbstractPreVerifyDockerMojo { @Parameter(required = true) private List images; + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + public void setImages(final List images) { this.images = images; } @@ -54,17 +59,28 @@ protected void doExecute() throws MojoExecutionException, MojoFailureException { validateAllImages(); + ArrayList imagesToDeleteAfterPush = new ArrayList<>(); + for (ImageBuildConfiguration image : images) { try { logImageConfig(image); String imageId = getDockerProvider().buildImage(image); getLog().info(String.format("Image '%s' has Id '%s'", image.getId(), imageId)); registerBuiltImage(imageId, image); + if (image.isPush() && !image.isKeep()) { + imagesToDeleteAfterPush.add(imageId); + } } catch (DockerException e) { String errorMessage = String.format("Cannot build image '%s'", image.getId()); handleDockerException(errorMessage, e); } } + + if (imagesToDeleteAfterPush.size() > 0) { + String listOfImagesToDeleteAfterPush = String.join(",", imagesToDeleteAfterPush); + getLog().debug(String.format("Storing list of containers that need to be removed after a push: %s", listOfImagesToDeleteAfterPush)); + project.getProperties().setProperty(IMAGE_LIST_PROPERTY, listOfImagesToDeleteAfterPush); + } } private void logImageConfig(final ImageBuildConfiguration image) { @@ -87,6 +103,10 @@ private void validateAllImages() throws MojoExecutionException { } } + public void setProject(MavenProject project) { + this.project = project; + } + @Override protected String getMojoGoalName() { return "build-images"; diff --git a/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java b/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java index ac58929..80fbcc0 100644 --- a/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java +++ b/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java @@ -25,8 +25,12 @@ import org.apache.maven.plugins.annotations.InstantiationStrategy; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import java.util.Arrays; import java.util.Iterator; +import java.util.List; /** * This class is responsible for pushing docking images in the deploy phase of the maven build. The goal @@ -36,6 +40,9 @@ instantiationStrategy = InstantiationStrategy.PER_LOOKUP) public class PushImageMojo extends AbstractDockerMojo { + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + @Override public void doExecute() throws MojoExecutionException, MojoFailureException { ensureThatAllPushableImagesHaveAName(); @@ -50,6 +57,18 @@ public void doExecute() throws MojoExecutionException, MojoFailureException { handleDockerException(message, e); } } + + String listOfImagesToDeleteAfterPush = project.getProperties().getProperty(IMAGE_LIST_PROPERTY); + if (listOfImagesToDeleteAfterPush != null) { + List imageIDs = Arrays.asList(listOfImagesToDeleteAfterPush.split(",")); + for (String imageID : imageIDs) { + try { + getDockerProvider().removeImage(imageID); + } catch (DockerException e) { + getLog().error("Failed to remove image", e); + } + } + } } private void ensureThatAllPushableImagesHaveAName() throws MojoFailureException { @@ -65,4 +84,7 @@ private void ensureThatAllPushableImagesHaveAName() throws MojoFailureException } } + public void setProject(MavenProject project) { + this.project = project; + } } \ No newline at end of file diff --git a/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java b/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java index 43192da..5f95c53 100644 --- a/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java +++ b/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java @@ -24,6 +24,7 @@ import net.wouterdanes.docker.provider.model.PushableImage; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -31,18 +32,24 @@ import java.util.*; +import static net.wouterdanes.docker.maven.AbstractDockerMojo.IMAGE_LIST_PROPERTY; import static org.junit.Assert.*; import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class BuildImageMojoTest { private static final String FAKE_PROVIDER_KEY = UUID.randomUUID().toString(); private static final String IMAGEID = UUID.randomUUID().toString(); private static final String STARTID = UUID.randomUUID().toString(); + private static final String STARTIDTWO = UUID.randomUUID().toString(); private static final String NAMEANDTAG = UUID.randomUUID().toString(); + private static final String NAMEANDTAGTWO = UUID.randomUUID().toString(); private static final String REGISTRY = UUID.randomUUID().toString(); private static final String REGISTRYANDNAMEANDTAG = REGISTRY + "/" + NAMEANDTAG; + private final MavenProject mavenProject = mock(MavenProject.class); private BuildImageMojo mojo = new BuildImageMojo(); private ImageBuildConfiguration mockImage; @@ -51,6 +58,9 @@ public class BuildImageMojoTest { public void setUp() throws Exception { mojo.setPluginContext(new HashMap()); + Properties mavenProjectProperties = new Properties(); + when(mavenProject.getProperties()).thenReturn(mavenProjectProperties); + FakeDockerProvider.instance = Mockito.mock(FakeDockerProvider.class); Mockito.when(FakeDockerProvider.instance.buildImage(any(ImageBuildConfiguration.class))).thenReturn(IMAGEID); @@ -134,8 +144,74 @@ public void testThatTheMojoThrowsAnExceptionWhenDuplicateImageIdsExist() throws assertImageEnqueuedForPush(null); } + @Test + public void imageListPropertyNotSetWhenImageIsPushAndIsKeep() throws Exception { + Mockito.when(mockImage.isPush()).thenReturn(true); + Mockito.when(mockImage.isKeep()).thenReturn(true); + + executeMojo(FAKE_PROVIDER_KEY); + + assertEquals(1, mojo.getImagesToPush().size()); + + PushableImage actual = mojo.getImagesToPush().get(0); + + assertEquals(BuildImageMojoTest.IMAGEID, actual.getImageId()); + assertEquals(null, mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + } + + @Test + public void imageListPropertyNotSetWhenImageIsNotPushAndIsNotKeep() throws Exception { + Mockito.when(mockImage.isPush()).thenReturn(false); + Mockito.when(mockImage.isKeep()).thenReturn(false); + + executeMojo(FAKE_PROVIDER_KEY); + + assertEquals(0, mojo.getImagesToPush().size()); + assertEquals(null, mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + } + + @Test + public void imageListPropertySetWhenImageIsPushButNotIsKeep() throws Exception { + Mockito.when(mockImage.isPush()).thenReturn(true); + Mockito.when(mockImage.isKeep()).thenReturn(false); + + executeMojo(FAKE_PROVIDER_KEY); + + assertEquals(1, mojo.getImagesToPush().size()); + + assertEquals(mojo.getImagesToPush().get(0).getImageId(), + mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + } + + @Test + public void imageListPropertySetWhenMultipleImagesSetToIsPushButNotIsKeep() throws Exception { + Mockito.when(mockImage.isPush()).thenReturn(true); + Mockito.when(mockImage.isKeep()).thenReturn(false); + + ImageBuildConfiguration mockImageTwo = Mockito.mock(ImageBuildConfiguration.class); + Mockito.when(mockImageTwo.getId()).thenReturn(STARTIDTWO); + Mockito.when(mockImageTwo.getNameAndTag()).thenReturn(NAMEANDTAGTWO); + Mockito.when(mockImageTwo.isPush()).thenReturn(true); + Mockito.when(mockImageTwo.isKeep()).thenReturn(false); + + List images = new ArrayList<>(); + images.add(mockImage); + images.add(mockImageTwo); + mojo.setImages(images); + + executeMojo(FAKE_PROVIDER_KEY); + + assertEquals(2, mojo.getImagesToPush().size()); + + String expectedImageListPropertyValue = mojo.getImagesToPush().get(0).getImageId() + "," + mojo.getImagesToPush().get(1).getImageId(); + + assertEquals(expectedImageListPropertyValue, + mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + } + private void executeMojo(String provider) throws MojoExecutionException, MojoFailureException { mojo.setProviderName(provider); + mojo.setProject(mavenProject); mojo.execute(); } diff --git a/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java b/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java index 649627c..bd52cba 100644 --- a/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java +++ b/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java @@ -21,31 +21,46 @@ import net.wouterdanes.docker.provider.DockerProviderSupplier; import net.wouterdanes.docker.provider.model.ImageBuildConfiguration; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Matchers; +import org.mockito.Mockito; +import org.mockito.internal.verification.VerificationModeFactory; import java.util.HashMap; import java.util.Optional; +import java.util.Properties; import java.util.UUID; +import static net.wouterdanes.docker.maven.AbstractDockerMojo.IMAGE_LIST_PROPERTY; import static org.mockito.Mockito.*; public class PushImageMojoTest { private final String fakeProviderKey = UUID.randomUUID().toString(); + private final MavenProject mavenProject = mock(MavenProject.class); private PushImageMojo mojo; + private ImageBuildConfiguration mockImage; + + private static final String NAME_AND_TAG = UUID.randomUUID().toString(); @Before public void setUp() throws Exception { + Properties mavenProjectProperties = new Properties(); + when(mavenProject.getProperties()).thenReturn(mavenProjectProperties); + + mockImage = Mockito.mock(ImageBuildConfiguration.class); + Mockito.when(mockImage.getNameAndTag()).thenReturn(NAME_AND_TAG); + Mockito.when(mockImage.isPush()).thenReturn(true); FakeDockerProvider.instance = mock(FakeDockerProvider.class); DockerProviderSupplier.registerProvider(fakeProviderKey, FakeDockerProvider.class); mojo = new PushImageMojo(); mojo.setPluginContext(new HashMap()); - + mojo.setProject(mavenProject); mojo.setProviderName(fakeProviderKey); } @@ -74,6 +89,40 @@ public void testThatNoImagesArePushedWhenThereAreNoImagesMarkedToPush() throws E } + @Test + public void willNotRemoveImagesIfImageListPropertyIsNotSet() throws Exception { + + mojo.enqueueForPushing("some-image-id", mockImage); + mojo.enqueueForPushing("another-image-id", mockImage); + mojo.execute(); + + verify(FakeDockerProvider.instance, never()).removeImage(Matchers.any()); + } + + @Test + public void willRemoveImagesIfImageListPropertyContainsASingleID() throws Exception { + + mavenProject.getProperties().setProperty(IMAGE_LIST_PROPERTY, "some-image-id"); + + mojo.enqueueForPushing("some-image-id", mockImage); + mojo.enqueueForPushing("another-image-id", mockImage); + mojo.execute(); + + verify(FakeDockerProvider.instance, VerificationModeFactory.times(1)).removeImage(Matchers.any()); + } + + @Test + public void willRemoveImagesIfImageListPropertyContainsMultipleIDs() throws Exception { + + mavenProject.getProperties().setProperty(IMAGE_LIST_PROPERTY, "some-image-id,another-image-id"); + + mojo.enqueueForPushing("some-image-id", mockImage); + mojo.enqueueForPushing("another-image-id", mockImage); + mojo.execute(); + + verify(FakeDockerProvider.instance, VerificationModeFactory.times(2)).removeImage(Matchers.any()); + } + public static class FakeDockerProvider extends AbstractFakeDockerProvider { private static FakeDockerProvider instance; From af264fe93593de936108c8e9b2a0dcba3cd099ad Mon Sep 17 00:00:00 2001 From: Mark Collin Date: Tue, 16 Feb 2016 11:24:46 +0000 Subject: [PATCH 2/2] Refactor implementation. Now stores images to delete as a list in AbstractDockerMojo instead of passing around a maven property. --- .../docker/maven/AbstractDockerMojo.java | 2 +- .../docker/maven/BuildImageMojo.java | 17 ---------- .../docker/maven/PushImageMojo.java | 25 +++------------ .../docker/maven/BuildImageMojoTest.java | 31 +++++++++---------- .../docker/maven/PushImageMojoTest.java | 19 ++++-------- 5 files changed, 27 insertions(+), 67 deletions(-) diff --git a/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java b/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java index 42a8027..4bafe8c 100644 --- a/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java +++ b/src/main/java/net/wouterdanes/docker/maven/AbstractDockerMojo.java @@ -60,7 +60,7 @@ public abstract class AbstractDockerMojo extends AbstractMojo { private static final String BUILT_IMAGES_KEY = "builtImages"; private static final String PUSHABLE_IMAGES_KEY = "pushableImages"; private static final String ERRORS_KEY = "errors"; - protected static final String IMAGE_LIST_PROPERTY = "docker.containers.to.remove.after.push"; + protected static ArrayList imagesToDeleteAfterPush = new ArrayList<>(); @Component private RepositorySystem repositorySystem; diff --git a/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java b/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java index 50701fa..9137185 100644 --- a/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java +++ b/src/main/java/net/wouterdanes/docker/maven/BuildImageMojo.java @@ -25,9 +25,7 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.project.MavenProject; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -43,9 +41,6 @@ public class BuildImageMojo extends AbstractPreVerifyDockerMojo { @Parameter(required = true) private List images; - @Parameter(defaultValue = "${project}", readonly = true) - private MavenProject project; - public void setImages(final List images) { this.images = images; } @@ -59,8 +54,6 @@ protected void doExecute() throws MojoExecutionException, MojoFailureException { validateAllImages(); - ArrayList imagesToDeleteAfterPush = new ArrayList<>(); - for (ImageBuildConfiguration image : images) { try { logImageConfig(image); @@ -75,12 +68,6 @@ protected void doExecute() throws MojoExecutionException, MojoFailureException { handleDockerException(errorMessage, e); } } - - if (imagesToDeleteAfterPush.size() > 0) { - String listOfImagesToDeleteAfterPush = String.join(",", imagesToDeleteAfterPush); - getLog().debug(String.format("Storing list of containers that need to be removed after a push: %s", listOfImagesToDeleteAfterPush)); - project.getProperties().setProperty(IMAGE_LIST_PROPERTY, listOfImagesToDeleteAfterPush); - } } private void logImageConfig(final ImageBuildConfiguration image) { @@ -103,10 +90,6 @@ private void validateAllImages() throws MojoExecutionException { } } - public void setProject(MavenProject project) { - this.project = project; - } - @Override protected String getMojoGoalName() { return "build-images"; diff --git a/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java b/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java index 80fbcc0..412eecd 100644 --- a/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java +++ b/src/main/java/net/wouterdanes/docker/maven/PushImageMojo.java @@ -25,12 +25,8 @@ import org.apache.maven.plugins.annotations.InstantiationStrategy; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.project.MavenProject; -import java.util.Arrays; import java.util.Iterator; -import java.util.List; /** * This class is responsible for pushing docking images in the deploy phase of the maven build. The goal @@ -40,9 +36,6 @@ instantiationStrategy = InstantiationStrategy.PER_LOOKUP) public class PushImageMojo extends AbstractDockerMojo { - @Parameter(defaultValue = "${project}", readonly = true) - private MavenProject project; - @Override public void doExecute() throws MojoExecutionException, MojoFailureException { ensureThatAllPushableImagesHaveAName(); @@ -58,15 +51,11 @@ public void doExecute() throws MojoExecutionException, MojoFailureException { } } - String listOfImagesToDeleteAfterPush = project.getProperties().getProperty(IMAGE_LIST_PROPERTY); - if (listOfImagesToDeleteAfterPush != null) { - List imageIDs = Arrays.asList(listOfImagesToDeleteAfterPush.split(",")); - for (String imageID : imageIDs) { - try { - getDockerProvider().removeImage(imageID); - } catch (DockerException e) { - getLog().error("Failed to remove image", e); - } + for (String imageID : imagesToDeleteAfterPush) { + try { + getDockerProvider().removeImage(imageID); + } catch (DockerException e) { + getLog().error("Failed to remove image", e); } } } @@ -83,8 +72,4 @@ private void ensureThatAllPushableImagesHaveAName() throws MojoFailureException throw new MojoFailureException("There are images that need to be pushed without a name."); } } - - public void setProject(MavenProject project) { - this.project = project; - } } \ No newline at end of file diff --git a/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java b/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java index 5f95c53..1255f72 100644 --- a/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java +++ b/src/test/java/net/wouterdanes/docker/maven/BuildImageMojoTest.java @@ -24,7 +24,6 @@ import net.wouterdanes.docker.provider.model.PushableImage; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.project.MavenProject; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -32,11 +31,9 @@ import java.util.*; -import static net.wouterdanes.docker.maven.AbstractDockerMojo.IMAGE_LIST_PROPERTY; +import static net.wouterdanes.docker.maven.AbstractDockerMojo.imagesToDeleteAfterPush; import static org.junit.Assert.*; import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class BuildImageMojoTest { @@ -49,18 +46,15 @@ public class BuildImageMojoTest { private static final String REGISTRY = UUID.randomUUID().toString(); private static final String REGISTRYANDNAMEANDTAG = REGISTRY + "/" + NAMEANDTAG; - private final MavenProject mavenProject = mock(MavenProject.class); private BuildImageMojo mojo = new BuildImageMojo(); private ImageBuildConfiguration mockImage; @Before public void setUp() throws Exception { + imagesToDeleteAfterPush = new ArrayList<>(); mojo.setPluginContext(new HashMap()); - Properties mavenProjectProperties = new Properties(); - when(mavenProject.getProperties()).thenReturn(mavenProjectProperties); - FakeDockerProvider.instance = Mockito.mock(FakeDockerProvider.class); Mockito.when(FakeDockerProvider.instance.buildImage(any(ImageBuildConfiguration.class))).thenReturn(IMAGEID); @@ -80,6 +74,7 @@ public void setUp() throws Exception { @After public void tearDown() throws Exception { DockerProviderSupplier.removeProvider(FAKE_PROVIDER_KEY); + imagesToDeleteAfterPush = new ArrayList<>(); } @Test @@ -156,7 +151,7 @@ public void imageListPropertyNotSetWhenImageIsPushAndIsKeep() throws Exception { PushableImage actual = mojo.getImagesToPush().get(0); assertEquals(BuildImageMojoTest.IMAGEID, actual.getImageId()); - assertEquals(null, mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + assertEquals(0, imagesToDeleteAfterPush.size()); } @Test @@ -167,11 +162,13 @@ public void imageListPropertyNotSetWhenImageIsNotPushAndIsNotKeep() throws Excep executeMojo(FAKE_PROVIDER_KEY); assertEquals(0, mojo.getImagesToPush().size()); - assertEquals(null, mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + assertEquals(0, imagesToDeleteAfterPush.size()); } @Test public void imageListPropertySetWhenImageIsPushButNotIsKeep() throws Exception { + ArrayList expectedImagesToBeDeletedAfterPush = new ArrayList<>(); + Mockito.when(mockImage.isPush()).thenReturn(true); Mockito.when(mockImage.isKeep()).thenReturn(false); @@ -179,12 +176,15 @@ public void imageListPropertySetWhenImageIsPushButNotIsKeep() throws Exception { assertEquals(1, mojo.getImagesToPush().size()); - assertEquals(mojo.getImagesToPush().get(0).getImageId(), - mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + expectedImagesToBeDeletedAfterPush.add(mojo.getImagesToPush().get(0).getImageId()); + + assertEquals(imagesToDeleteAfterPush, expectedImagesToBeDeletedAfterPush); } @Test public void imageListPropertySetWhenMultipleImagesSetToIsPushButNotIsKeep() throws Exception { + ArrayList expectedImagesToBeDeletedAfterPush = new ArrayList<>(); + Mockito.when(mockImage.isPush()).thenReturn(true); Mockito.when(mockImage.isKeep()).thenReturn(false); @@ -203,15 +203,14 @@ public void imageListPropertySetWhenMultipleImagesSetToIsPushButNotIsKeep() thro assertEquals(2, mojo.getImagesToPush().size()); - String expectedImageListPropertyValue = mojo.getImagesToPush().get(0).getImageId() + "," + mojo.getImagesToPush().get(1).getImageId(); + expectedImagesToBeDeletedAfterPush.add(mojo.getImagesToPush().get(0).getImageId()); + expectedImagesToBeDeletedAfterPush.add(mojo.getImagesToPush().get(1).getImageId()); - assertEquals(expectedImageListPropertyValue, - mavenProject.getProperties().getProperty(IMAGE_LIST_PROPERTY)); + assertEquals(imagesToDeleteAfterPush, expectedImagesToBeDeletedAfterPush); } private void executeMojo(String provider) throws MojoExecutionException, MojoFailureException { mojo.setProviderName(provider); - mojo.setProject(mavenProject); mojo.execute(); } diff --git a/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java b/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java index bd52cba..be7a67e 100644 --- a/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java +++ b/src/test/java/net/wouterdanes/docker/maven/PushImageMojoTest.java @@ -21,7 +21,6 @@ import net.wouterdanes.docker.provider.DockerProviderSupplier; import net.wouterdanes.docker.provider.model.ImageBuildConfiguration; import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.project.MavenProject; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -29,18 +28,16 @@ import org.mockito.Mockito; import org.mockito.internal.verification.VerificationModeFactory; +import java.util.ArrayList; import java.util.HashMap; import java.util.Optional; -import java.util.Properties; import java.util.UUID; -import static net.wouterdanes.docker.maven.AbstractDockerMojo.IMAGE_LIST_PROPERTY; import static org.mockito.Mockito.*; public class PushImageMojoTest { private final String fakeProviderKey = UUID.randomUUID().toString(); - private final MavenProject mavenProject = mock(MavenProject.class); private PushImageMojo mojo; private ImageBuildConfiguration mockImage; @@ -48,8 +45,7 @@ public class PushImageMojoTest { @Before public void setUp() throws Exception { - Properties mavenProjectProperties = new Properties(); - when(mavenProject.getProperties()).thenReturn(mavenProjectProperties); + AbstractDockerMojo.imagesToDeleteAfterPush = new ArrayList<>(); mockImage = Mockito.mock(ImageBuildConfiguration.class); Mockito.when(mockImage.getNameAndTag()).thenReturn(NAME_AND_TAG); @@ -60,15 +56,13 @@ public void setUp() throws Exception { mojo = new PushImageMojo(); mojo.setPluginContext(new HashMap()); - mojo.setProject(mavenProject); mojo.setProviderName(fakeProviderKey); } @After public void tearDown() throws Exception { - DockerProviderSupplier.removeProvider(fakeProviderKey); - + AbstractDockerMojo.imagesToDeleteAfterPush = new ArrayList<>(); } @Test(expected = MojoFailureException.class) @@ -101,8 +95,7 @@ public void willNotRemoveImagesIfImageListPropertyIsNotSet() throws Exception { @Test public void willRemoveImagesIfImageListPropertyContainsASingleID() throws Exception { - - mavenProject.getProperties().setProperty(IMAGE_LIST_PROPERTY, "some-image-id"); + AbstractDockerMojo.imagesToDeleteAfterPush.add("some-image-id"); mojo.enqueueForPushing("some-image-id", mockImage); mojo.enqueueForPushing("another-image-id", mockImage); @@ -113,8 +106,8 @@ public void willRemoveImagesIfImageListPropertyContainsASingleID() throws Except @Test public void willRemoveImagesIfImageListPropertyContainsMultipleIDs() throws Exception { - - mavenProject.getProperties().setProperty(IMAGE_LIST_PROPERTY, "some-image-id,another-image-id"); + AbstractDockerMojo.imagesToDeleteAfterPush.add("some-image-id"); + AbstractDockerMojo.imagesToDeleteAfterPush.add("some-image-id,another-image-id"); mojo.enqueueForPushing("some-image-id", mockImage); mojo.enqueueForPushing("another-image-id", mockImage);