From 8fc806c25acceb4e2639a05fa30f235d5ba6c211 Mon Sep 17 00:00:00 2001 From: Alexander Garagatyi Date: Thu, 21 Apr 2016 14:42:11 +0300 Subject: [PATCH] CHE-1037: fix pulling of docker images (#1106) Signed-off-by: Alexander Garagatyi --- ...eOfflineDockerMachineBuildInterceptor.java | 6 +++-- ...lineDockerMachineBuildInterceptorTest.java | 24 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptor.java b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptor.java index 23066dc213e..e3f0e0e2a3c 100644 --- a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptor.java +++ b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptor.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.che.plugin.docker.machine.local.interceptor; +import com.google.common.base.MoreObjects; + import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.eclipse.che.api.core.util.LineConsumer; @@ -30,7 +32,7 @@ * * @author Alexander Garagatyi * - * @see org.eclipse.che.plugin.docker.machine.DockerInstanceProvider#buildImage(Dockerfile, LineConsumer, String, boolean) + * @see org.eclipse.che.plugin.docker.machine.DockerInstanceProvider#buildImage(Dockerfile, LineConsumer, String, boolean, long, long) */ public class EnableOfflineDockerMachineBuildInterceptor implements MethodInterceptor { private static final Logger LOG = LoggerFactory.getLogger(EnableOfflineDockerMachineBuildInterceptor.class); @@ -64,7 +66,7 @@ private void pullImage(String image, final LineConsumer creationLogsOutput) DockerImageIdentifier imageIdentifier = DockerImageIdentifierParser.parse(image); final ProgressLineFormatterImpl progressLineFormatter = new ProgressLineFormatterImpl(); dockerConnector.pull(imageIdentifier.getRepository(), - imageIdentifier.getTag(), + MoreObjects.firstNonNull(imageIdentifier.getTag(), "latest"), imageIdentifier.getRegistry(), currentProgressStatus -> { try { diff --git a/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptorTest.java b/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptorTest.java index 810185f2da1..5c60aa4887c 100644 --- a/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptorTest.java +++ b/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/local/interceptor/EnableOfflineDockerMachineBuildInterceptorTest.java @@ -56,7 +56,7 @@ public class EnableOfflineDockerMachineBuildInterceptorTest { @Test public void shouldProceedInterceptedMethodIfForcePullIsDisabled() throws Throwable { - final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.FALSE}; + final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.FALSE, 0L, 0L}; when(methodInvocation.getArguments()).thenReturn(arguments); @@ -69,7 +69,7 @@ public void shouldProceedInterceptedMethodIfForcePullIsDisabled() throws Throwab @Test public void shouldPullDockerImageIfForcePullIsEnabled() throws Throwable { - final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.TRUE}; + final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.TRUE, 0L, 0L}; when(methodInvocation.getArguments()).thenReturn(arguments); when(dockerfile.getImages()).thenReturn(Collections.singletonList(dockerImage)); final String tag = "latest"; @@ -88,7 +88,7 @@ public void shouldPullDockerImageIfForcePullIsEnabled() throws Throwable { @Test(dataProvider = "throwableProvider") public void shouldIgnoreExceptionsOnDockerImagePullingIfForcePullIsEnabled(Throwable throwable) throws Throwable { - final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.TRUE}; + final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.TRUE, 0L, 0L}; when(methodInvocation.getArguments()).thenReturn(arguments); when(dockerfile.getImages()).thenReturn(Collections.singletonList(dockerImage)); final String tag = "latest"; @@ -104,6 +104,24 @@ public void shouldIgnoreExceptionsOnDockerImagePullingIfForcePullIsEnabled(Throw verify(methodInvocation).proceed(); } + @Test + public void shouldPullLatestIfNoTagFoundInDockerfile() throws Throwable { + final Object[] arguments = {dockerfile, lineConsumer, "string", Boolean.TRUE, 0L, 0L}; + when(methodInvocation.getArguments()).thenReturn(arguments); + when(dockerfile.getImages()).thenReturn(Collections.singletonList(dockerImage)); + final String repo = "my_repo/my_image"; + when(dockerImage.getFrom()).thenReturn(repo); + + + interceptor.invoke(methodInvocation); + + + assertFalse((Boolean)arguments[3]); + verify(methodInvocation).proceed(); + verify(dockerfile).getImages(); + verify(dockerConnector).pull(eq(repo), eq("latest"), eq(null), any(ProgressMonitor.class)); + } + @DataProvider(name = "throwableProvider") public static Object[][] throwableProvider() { return new Object[][] {{new IOException("test_exception")},