From 53b390ab378416750015344cc9f4d96692ffe1ef Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 20 Nov 2018 18:34:46 -0500 Subject: [PATCH 1/9] Allow configuring WorkDir --- .../tools/jib/api/JibContainerBuilder.java | 11 ++++++++ .../jib/builder/steps/BuildImageStep.java | 3 ++ .../configuration/ContainerConfiguration.java | 28 +++++++++++++++++-- .../jib/api/JibContainerBuilderTest.java | 6 +++- .../jib/builder/steps/BuildImageStepTest.java | 21 ++++++++++++++ .../ContainerConfigurationTest.java | 8 ++++++ .../tools/jib/gradle/ContainerParameters.java | 15 ++++++++++ .../jib/gradle/GradleRawConfiguration.java | 5 ++++ .../jib/maven/JibPluginConfiguration.java | 15 ++++++++++ .../jib/maven/MavenRawConfiguration.java | 5 ++++ .../jib/maven/JibPluginConfigurationTest.java | 4 +++ .../common/PluginConfigurationProcessor.java | 5 ++++ .../jib/plugins/common/PropertyNames.java | 1 + .../jib/plugins/common/RawConfiguration.java | 2 ++ 14 files changed, 125 insertions(+), 4 deletions(-) diff --git a/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java b/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java index 8aa5c3120c..96407b83a7 100644 --- a/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java +++ b/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java @@ -390,6 +390,17 @@ public JibContainerBuilder setUser(@Nullable String user) { return this; } + /** + * Sets the working directory in the container as. + * + * @param workingDirectory the working directory + * @return this + */ + public JibContainerBuilder setWorkingDirectory(@Nullable AbsoluteUnixPath workingDirectory) { + containerConfigurationBuilder.setWorkingDirectory(workingDirectory); + return this; + } + /** * Builds the container. * diff --git a/jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/BuildImageStep.java b/jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/BuildImageStep.java index 449316d20d..47b036ee43 100644 --- a/jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/BuildImageStep.java +++ b/jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/BuildImageStep.java @@ -159,6 +159,9 @@ private Image afterCachedLayerSteps() .setExposedPorts(containerConfiguration.getExposedPorts()) .setVolumes(containerConfiguration.getVolumes()) .addLabels(containerConfiguration.getLabels()); + if (containerConfiguration.getWorkingDirectory() != null) { + imageBuilder.setWorkingDirectory(containerConfiguration.getWorkingDirectory().toString()); + } } // Gets the container configuration content descriptor. diff --git a/jib-core/src/main/java/com/google/cloud/tools/jib/configuration/ContainerConfiguration.java b/jib-core/src/main/java/com/google/cloud/tools/jib/configuration/ContainerConfiguration.java index 460d697e0b..4f486235ac 100644 --- a/jib-core/src/main/java/com/google/cloud/tools/jib/configuration/ContainerConfiguration.java +++ b/jib-core/src/main/java/com/google/cloud/tools/jib/configuration/ContainerConfiguration.java @@ -47,6 +47,7 @@ public static class Builder { @Nullable private List volumes; @Nullable private Map labels; @Nullable private String user; + @Nullable private AbsoluteUnixPath workingDirectory; /** * Sets the image creation time. @@ -198,6 +199,17 @@ public Builder setUser(@Nullable String user) { return this; } + /** + * Sets the working directory in the container. + * + * @param workingDirectory the working directory + * @return this + */ + public Builder setWorkingDirectory(@Nullable AbsoluteUnixPath workingDirectory) { + this.workingDirectory = workingDirectory; + return this; + } + /** * Builds the {@link ContainerConfiguration}. * @@ -212,7 +224,8 @@ public ContainerConfiguration build() { exposedPorts == null ? null : ImmutableList.copyOf(exposedPorts), volumes == null ? null : ImmutableList.copyOf(volumes), labels == null ? null : ImmutableMap.copyOf(labels), - user); + user, + workingDirectory); } private Builder() {} @@ -235,6 +248,7 @@ public static Builder builder() { @Nullable private final ImmutableList volumes; @Nullable private final ImmutableMap labels; @Nullable private final String user; + @Nullable private final AbsoluteUnixPath workingDirectory; private ContainerConfiguration( Instant creationTime, @@ -244,7 +258,8 @@ private ContainerConfiguration( @Nullable ImmutableList exposedPorts, @Nullable ImmutableList volumes, @Nullable ImmutableMap labels, - @Nullable String user) { + @Nullable String user, + @Nullable AbsoluteUnixPath workingDirectory) { this.creationTime = creationTime; this.entrypoint = entrypoint; this.programArguments = programArguments; @@ -253,6 +268,7 @@ private ContainerConfiguration( this.volumes = volumes; this.labels = labels; this.user = user; + this.workingDirectory = workingDirectory; } public Instant getCreationTime() { @@ -294,6 +310,11 @@ public ImmutableMap getLabels() { return labels; } + @Nullable + public AbsoluteUnixPath getWorkingDirectory() { + return workingDirectory; + } + @Override @VisibleForTesting public boolean equals(Object other) { @@ -310,7 +331,8 @@ public boolean equals(Object other) { && Objects.equals(environmentMap, otherContainerConfiguration.environmentMap) && Objects.equals(exposedPorts, otherContainerConfiguration.exposedPorts) && Objects.equals(labels, otherContainerConfiguration.labels) - && Objects.equals(user, otherContainerConfiguration.user); + && Objects.equals(user, otherContainerConfiguration.user) + && Objects.equals(workingDirectory, otherContainerConfiguration.workingDirectory); } @Override diff --git a/jib-core/src/test/java/com/google/cloud/tools/jib/api/JibContainerBuilderTest.java b/jib-core/src/test/java/com/google/cloud/tools/jib/api/JibContainerBuilderTest.java index 496cb9a7d7..3c9840246f 100644 --- a/jib-core/src/test/java/com/google/cloud/tools/jib/api/JibContainerBuilderTest.java +++ b/jib-core/src/test/java/com/google/cloud/tools/jib/api/JibContainerBuilderTest.java @@ -25,6 +25,7 @@ import com.google.cloud.tools.jib.configuration.credentials.CredentialRetriever; import com.google.cloud.tools.jib.event.EventHandlers; import com.google.cloud.tools.jib.event.JibEvent; +import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.ImageFormat; import com.google.cloud.tools.jib.image.ImageReference; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; @@ -69,7 +70,8 @@ public void testToBuildConfiguration_containerConfigurationSet() .setLabels(ImmutableMap.of("key", "value")) .setProgramArguments(Arrays.asList("program", "arguments")) .setCreationTime(Instant.ofEpochMilli(1000)) - .setUser("user"); + .setUser("user") + .setWorkingDirectory(AbsoluteUnixPath.get("/working/directory")); BuildConfiguration buildConfiguration = jibContainerBuilder.toBuildConfiguration(Containerizer.to(baseImage)); @@ -84,6 +86,8 @@ public void testToBuildConfiguration_containerConfigurationSet() Arrays.asList("program", "arguments"), containerConfiguration.getProgramArguments()); Assert.assertEquals(Instant.ofEpochMilli(1000), containerConfiguration.getCreationTime()); Assert.assertEquals("user", containerConfiguration.getUser()); + Assert.assertEquals( + AbsoluteUnixPath.get("/working/directory"), containerConfiguration.getWorkingDirectory()); } @Test diff --git a/jib-core/src/test/java/com/google/cloud/tools/jib/builder/steps/BuildImageStepTest.java b/jib-core/src/test/java/com/google/cloud/tools/jib/builder/steps/BuildImageStepTest.java index 96e1231021..d7608c973c 100644 --- a/jib-core/src/test/java/com/google/cloud/tools/jib/builder/steps/BuildImageStepTest.java +++ b/jib-core/src/test/java/com/google/cloud/tools/jib/builder/steps/BuildImageStepTest.java @@ -23,6 +23,7 @@ import com.google.cloud.tools.jib.configuration.BuildConfiguration; import com.google.cloud.tools.jib.configuration.ContainerConfiguration; import com.google.cloud.tools.jib.event.EventDispatcher; +import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.DescriptorDigest; import com.google.cloud.tools.jib.image.Image; import com.google.cloud.tools.jib.image.Layer; @@ -224,6 +225,26 @@ public void test_propagateBaseImageConfiguration() Assert.assertEquals(ImmutableList.of(), image.getProgramArguments()); } + @Test + public void testOverrideWorkingDirectory() throws InterruptedException, ExecutionException { + Mockito.when(mockContainerConfiguration.getWorkingDirectory()) + .thenReturn(AbsoluteUnixPath.get("/my/directory")); + + BuildImageStep buildImageStep = + new BuildImageStep( + MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()), + mockBuildConfiguration, + mockPullBaseImageStep, + mockPullAndCacheBaseImageLayersStep, + ImmutableList.of( + mockBuildAndCacheApplicationLayerStepDependencies, + mockBuildAndCacheApplicationLayerStepResources, + mockBuildAndCacheApplicationLayerStepClasses)); + Image image = buildImageStep.getFuture().get().getFuture().get(); + + Assert.assertEquals("/my/directory", image.getWorkingDirectory()); + } + @Test public void test_inheritedEntrypoint() throws ExecutionException, InterruptedException { Mockito.when(mockContainerConfiguration.getEntrypoint()).thenReturn(null); diff --git a/jib-core/src/test/java/com/google/cloud/tools/jib/configuration/ContainerConfigurationTest.java b/jib-core/src/test/java/com/google/cloud/tools/jib/configuration/ContainerConfigurationTest.java index c02368430c..c347d7dc1a 100644 --- a/jib-core/src/test/java/com/google/cloud/tools/jib/configuration/ContainerConfigurationTest.java +++ b/jib-core/src/test/java/com/google/cloud/tools/jib/configuration/ContainerConfigurationTest.java @@ -16,6 +16,7 @@ package com.google.cloud.tools.jib.configuration; +import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.common.collect.ImmutableMap; import java.util.Arrays; import java.util.HashMap; @@ -104,4 +105,11 @@ public void testBuilder_user() { ContainerConfiguration configuration = ContainerConfiguration.builder().setUser("john").build(); Assert.assertEquals("john", configuration.getUser()); } + + @Test + public void testBuilder_workingDirectory() { + ContainerConfiguration configuration = + ContainerConfiguration.builder().setWorkingDirectory(AbsoluteUnixPath.get("/path")).build(); + Assert.assertEquals(AbsoluteUnixPath.get("/path"), configuration.getWorkingDirectory()); + } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java index 3dd4968989..52611c1991 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java @@ -44,6 +44,7 @@ public class ContainerParameters { private Map labels = Collections.emptyMap(); private String appRoot = ""; @Nullable private String user; + @Nullable private String workingDirectory; @Input @Optional @@ -197,4 +198,18 @@ public String getUser() { public void setUser(String user) { this.user = user; } + + @Input + @Nullable + @Optional + public String getWorkingDirectory() { + if (System.getProperty(PropertyNames.CONTAINER_USER) != null) { + return System.getProperty(PropertyNames.CONTAINER_USER); + } + return workingDirectory; + } + + public void setWorkingDirectory(String workingDirectory) { + this.workingDirectory = workingDirectory; + } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java index 4431b3a8b6..f023363508 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java @@ -127,6 +127,11 @@ public Optional getUser() { return Optional.ofNullable(jibExtension.getContainer().getUser()); } + @Override + public Optional getWorkingDirectory() { + return Optional.ofNullable(jibExtension.getContainer().getWorkingDirectory()); + } + @Override public boolean getUseCurrentTimestamp() { return jibExtension.getContainer().getUseCurrentTimestamp(); diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java index 4cfe21f399..7b0da4e4ad 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java @@ -151,6 +151,8 @@ public static class ContainerParameters { @Parameter private String appRoot = ""; @Nullable @Parameter private String user; + + @Nullable @Parameter private String workingDirectory; } /** Configuration for the {@code extraDirectory} parameter. */ @@ -375,6 +377,19 @@ String getUser() { return container.user; } + /** + * Gets the working directory in the container. + * + * @return the working directory + */ + @Nullable + String getWorkingDirectory() { + if (System.getProperty(PropertyNames.CONTAINER_WORKING_DIRECTORY) != null) { + return System.getProperty(PropertyNames.CONTAINER_WORKING_DIRECTORY); + } + return container.workingDirectory; + } + /** * Gets the configured main arguments. * diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenRawConfiguration.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenRawConfiguration.java index af93c95cbf..265dda0972 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenRawConfiguration.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenRawConfiguration.java @@ -142,6 +142,11 @@ public Optional getUser() { return Optional.ofNullable(jibPluginConfiguration.getUser()); } + @Override + public Optional getWorkingDirectory() { + return Optional.ofNullable(jibPluginConfiguration.getWorkingDirectory()); + } + @Override public boolean getUseCurrentTimestamp() { return jibPluginConfiguration.getUseCurrentTimestamp(); diff --git a/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/JibPluginConfigurationTest.java b/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/JibPluginConfigurationTest.java index 1f5dbc6101..42e48b6f10 100644 --- a/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/JibPluginConfigurationTest.java +++ b/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/JibPluginConfigurationTest.java @@ -50,6 +50,7 @@ private static void clearProperties() { System.clearProperty("jib.container.ports"); System.clearProperty("jib.container.useCurrentTimestamp"); System.clearProperty("jib.container.user"); + System.clearProperty("jib.container.workingDirectory"); System.clearProperty("jib.extraDirectory.path"); System.clearProperty("jib.extraDirectory.permissions"); } @@ -72,6 +73,7 @@ public void teardown() { @Test public void testDefaults() { Assert.assertEquals("", testPluginConfiguration.getAppRoot()); + Assert.assertNull(testPluginConfiguration.getWorkingDirectory()); } @Test @@ -121,6 +123,8 @@ public void testSystemProperties() { Assert.assertTrue(testPluginConfiguration.getUseCurrentTimestamp()); System.setProperty("jib.container.user", "myUser"); Assert.assertEquals("myUser", testPluginConfiguration.getUser()); + System.setProperty("jib.container.workingDirectory", "working directory"); + Assert.assertEquals("working directory", testPluginConfiguration.getWorkingDirectory()); System.setProperty("jib.extraDirectory.path", "custom-jib"); Assert.assertEquals( diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java index e7fa89f869..ca54ef9f0c 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java @@ -243,6 +243,11 @@ static PluginConfigurationProcessor processCommonConfiguration( .setExposedPorts(ExposedPortsParser.parse(rawConfiguration.getPorts())) .setLabels(rawConfiguration.getLabels()) .setUser(rawConfiguration.getUser().orElse(null)); + rawConfiguration + .getWorkingDirectory() + .ifPresent( + workingDirectory -> + jibContainerBuilder.setWorkingDirectory(AbsoluteUnixPath.get(workingDirectory))); if (rawConfiguration.getUseCurrentTimestamp()) { eventDispatcher.dispatch( LogEvent.warn( diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java index 3c8876f1d9..995767f9e9 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java @@ -37,6 +37,7 @@ public class PropertyNames { public static final String CONTAINER_LABELS = "jib.container.labels"; public static final String CONTAINER_MAIN_CLASS = "jib.container.mainClass"; public static final String CONTAINER_USER = "jib.container.user"; + public static final String CONTAINER_WORKING_DIRECTORY = "jib.container.workingDirectory"; public static final String CONTAINER_PORTS = "jib.container.ports"; public static final String CONTAINER_USE_CURRENT_TIMESTAMP = "jib.container.useCurrentTimestamp"; public static final String USE_ONLY_PROJECT_CACHE = "jib.useOnlyProjectCache"; diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/RawConfiguration.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/RawConfiguration.java index 6ad730653d..93e207285b 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/RawConfiguration.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/RawConfiguration.java @@ -65,6 +65,8 @@ public interface RawConfiguration { Optional getUser(); + Optional getWorkingDirectory(); + boolean getUseCurrentTimestamp(); boolean getAllowInsecureRegistries(); From 6cf2d06665cab820899b8b282bc55fe47de400ca Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 20 Nov 2018 18:37:15 -0500 Subject: [PATCH 2/9] Fix wrong property name --- .../google/cloud/tools/jib/gradle/ContainerParameters.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java index 52611c1991..955e6e2b16 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java @@ -203,8 +203,8 @@ public void setUser(String user) { @Nullable @Optional public String getWorkingDirectory() { - if (System.getProperty(PropertyNames.CONTAINER_USER) != null) { - return System.getProperty(PropertyNames.CONTAINER_USER); + if (System.getProperty(PropertyNames.CONTAINER_WORKING_DIRECTORY) != null) { + return System.getProperty(PropertyNames.CONTAINER_WORKING_DIRECTORY); } return workingDirectory; } From a25592febbeb18442239ea4d0ad5341fcefdd22a Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 20 Nov 2018 18:40:57 -0500 Subject: [PATCH 3/9] Update CHANGELOG --- jib-gradle-plugin/CHANGELOG.md | 1 + jib-maven-plugin/CHANGELOG.md | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jib-gradle-plugin/CHANGELOG.md b/jib-gradle-plugin/CHANGELOG.md index 303be7c02b..61b5b3f392 100644 --- a/jib-gradle-plugin/CHANGELOG.md +++ b/jib-gradle-plugin/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ### Added - Image ID is now written to `build/jib-image.id` ([#1204](https://github.com/GoogleContainerTools/jib/issues/1204)) +- `container.workingDirectory` configuration parameter to set the working directory ([#1225](https://github.com/GoogleContainerTools/jib/issues/1225)) ### Changed diff --git a/jib-maven-plugin/CHANGELOG.md b/jib-maven-plugin/CHANGELOG.md index 126a831001..1066db1e9d 100644 --- a/jib-maven-plugin/CHANGELOG.md +++ b/jib-maven-plugin/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ### Added - Image ID is now written to `target/jib-image.id` ([#1204](https://github.com/GoogleContainerTools/jib/issues/1204)) +- `` configuration parameter to set the working directory ([#1225](https://github.com/GoogleContainerTools/jib/issues/1225)) ### Changed @@ -19,7 +20,7 @@ All notable changes to this project will be documented in this file. - Properties for each configuration parameter, allowing any parameter to be set via commandline ([#728](https://github.com/GoogleContainerTools/jib/issues/728)) - `` and `` can be used to specify a credential helper suffix or a full path to a credential helper executable ([#925](https://github.com/GoogleContainerTools/jib/issues/925)) -- `container.user` configuration parameter to configure the user and group to run the container as ([#1029](https://github.com/GoogleContainerTools/jib/issues/1029)) +- `` configuration parameter to configure the user and group to run the container as ([#1029](https://github.com/GoogleContainerTools/jib/issues/1029)) - Preliminary support for building images for WAR projects ([#431](https://github.com/GoogleContainerTools/jib/issues/431)) - `` object with a `` and `` field ([#794](https://github.com/GoogleContainerTools/jib/issues/794)) - `` configures the extra layer directory (still also configurable via `...`) From ddde44ac21fd60bba533af1560cda7d48abdf1a4 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Mon, 26 Nov 2018 11:49:56 -0500 Subject: [PATCH 4/9] Update Javadoc --- .../com/google/cloud/tools/jib/api/JibContainerBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java b/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java index 96407b83a7..e4dbef7b2a 100644 --- a/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java +++ b/jib-core/src/main/java/com/google/cloud/tools/jib/api/JibContainerBuilder.java @@ -391,7 +391,7 @@ public JibContainerBuilder setUser(@Nullable String user) { } /** - * Sets the working directory in the container as. + * Sets the working directory in the container. * * @param workingDirectory the working directory * @return this From 459ab3f9490d5dd6d4d6f87b7c787d73dec861f1 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Mon, 26 Nov 2018 18:41:19 -0500 Subject: [PATCH 5/9] Validate workingDirectory --- .../tools/jib/gradle/BuildDockerTask.java | 7 +++- .../tools/jib/gradle/BuildImageTask.java | 7 +++- .../cloud/tools/jib/gradle/BuildTarTask.java | 7 +++- .../tools/jib/gradle/DockerContextTask.java | 2 +- .../tools/jib/maven/BuildDockerMojo.java | 7 +++- .../cloud/tools/jib/maven/BuildImageMojo.java | 7 +++- .../cloud/tools/jib/maven/BuildTarMojo.java | 7 +++- .../tools/jib/maven/DockerContextMojo.java | 2 +- .../common/AppRootInvalidException.java | 4 +- .../common/PluginConfigurationProcessor.java | 31 ++++++++++----- .../WorkingDirectoryInvalidException.java | 35 +++++++++++++++++ .../PluginConfigurationProcessorTest.java | 38 +++++++++++++------ 12 files changed, 123 insertions(+), 31 deletions(-) create mode 100644 jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java index 2bb66186b4..db8dc0defd 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java @@ -30,6 +30,7 @@ import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; +import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.base.Preconditions; import java.io.IOException; import java.nio.file.Path; @@ -146,7 +147,11 @@ public void buildDocker() } catch (AppRootInvalidException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); + } catch (WorkingDirectoryInvalidException ex) { + throw new GradleException( + "container.workingDirectory is not an absolute Unix-style path: " + + ex.getInvalidPathValue()); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java index f6c964f555..1a043df7c9 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java @@ -29,6 +29,7 @@ import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; +import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import java.io.IOException; @@ -126,7 +127,11 @@ public void buildImage() } catch (AppRootInvalidException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); + } catch (WorkingDirectoryInvalidException ex) { + throw new GradleException( + "container.workingDirectory is not an absolute Unix-style path: " + + ex.getInvalidPathValue()); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java index f65bfefe03..ada00563ce 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java @@ -28,6 +28,7 @@ import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; +import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.base.Preconditions; import java.io.IOException; import java.nio.file.Path; @@ -143,7 +144,11 @@ public void buildTar() } catch (AppRootInvalidException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); + } catch (WorkingDirectoryInvalidException ex) { + throw new GradleException( + "container.workingDirectory is not an absolute Unix-style path: " + + ex.getInvalidPathValue()); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/DockerContextTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/DockerContextTask.java index fa10f044de..82cf7e2229 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/DockerContextTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/DockerContextTask.java @@ -168,7 +168,7 @@ public void generateDockerContext() throws MainClassInferenceException { } catch (AppRootInvalidException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); } } diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java index 926ceb3d5e..f826cd2f25 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java @@ -31,6 +31,7 @@ import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; +import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; import java.nio.file.Path; @@ -112,7 +113,11 @@ public void execute() throws MojoExecutionException { } catch (AppRootInvalidException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); + } catch (WorkingDirectoryInvalidException ex) { + throw new MojoExecutionException( + " is not an absolute Unix-style path: " + + ex.getInvalidPathValue()); } catch (InvalidImageReferenceException | IOException diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java index d9759c3d24..c2030472ca 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java @@ -31,6 +31,7 @@ import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; +import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import java.io.IOException; @@ -128,7 +129,11 @@ public void execute() throws MojoExecutionException, MojoFailureException { } catch (AppRootInvalidException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); + } catch (WorkingDirectoryInvalidException ex) { + throw new MojoExecutionException( + " is not an absolute Unix-style path: " + + ex.getInvalidPathValue()); } catch (InvalidImageReferenceException | IOException diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java index 3548cb648f..a1e3425d4d 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java @@ -29,6 +29,7 @@ import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; +import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; import java.nio.file.Path; @@ -106,7 +107,11 @@ public void execute() throws MojoExecutionException { } catch (AppRootInvalidException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); + } catch (WorkingDirectoryInvalidException ex) { + throw new MojoExecutionException( + " is not an absolute Unix-style path: " + + ex.getInvalidPathValue()); } catch (InvalidImageReferenceException | IOException diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/DockerContextMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/DockerContextMojo.java index 6d9c783726..ffba60d6ad 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/DockerContextMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/DockerContextMojo.java @@ -120,7 +120,7 @@ public void execute() throws MojoExecutionException { } catch (AppRootInvalidException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidAppRoot()); + " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); } catch (MainClassInferenceException ex) { throw new MojoExecutionException(ex.getMessage(), ex); diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java index fce57f6bb0..d953f22d95 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java @@ -17,7 +17,7 @@ package com.google.cloud.tools.jib.plugins.common; /** - * Indicates that the container.appRoot config value is invalid (i.e., the path is not in the + * Indicates that the {@code container.appRoot} config value is invalid. (The path is not in the * absolute unix-path style. */ public class AppRootInvalidException extends Exception { @@ -29,7 +29,7 @@ public AppRootInvalidException(String message, String invalidAppRoot, Throwable this.invalidAppRoot = invalidAppRoot; } - public String getInvalidAppRoot() { + public String getInvalidPathValue() { return invalidAppRoot; } } diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java index ca54ef9f0c..2240025402 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java @@ -126,7 +126,7 @@ public static PluginConfigurationProcessor processCommonConfigurationForDockerDa @Nullable Map dockerEnvironment, HelpfulSuggestions helpfulSuggestions) throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException { + InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { ImageReference targetImageReference = getGeneratedTargetDockerTag(rawConfiguration, projectProperties, helpfulSuggestions); DockerDaemonImage targetImage = DockerDaemonImage.named(targetImageReference); @@ -148,7 +148,7 @@ public static PluginConfigurationProcessor processCommonConfigurationForTarImage Path tarImagePath, HelpfulSuggestions helpfulSuggestions) throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException { + InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { ImageReference targetImageReference = getGeneratedTargetDockerTag(rawConfiguration, projectProperties, helpfulSuggestions); TarImage targetImage = TarImage.named(targetImageReference).saveTo(tarImagePath); @@ -161,7 +161,8 @@ public static PluginConfigurationProcessor processCommonConfigurationForTarImage public static PluginConfigurationProcessor processCommonConfigurationForRegistryImage( RawConfiguration rawConfiguration, ProjectProperties projectProperties) throws InferredAuthRetrievalException, InvalidImageReferenceException, - MainClassInferenceException, AppRootInvalidException, IOException { + MainClassInferenceException, AppRootInvalidException, IOException, + WorkingDirectoryInvalidException { Preconditions.checkArgument(rawConfiguration.getToImage().isPresent()); ImageReference targetImageReference = ImageReference.parse(rawConfiguration.getToImage().get()); @@ -203,7 +204,7 @@ static PluginConfigurationProcessor processCommonConfiguration( ImageReference targetImageReference, boolean isTargetImageCredentialPresent) throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException { + InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { JibSystemProperties.checkHttpTimeoutProperty(); ImageReference baseImageReference = @@ -243,11 +244,8 @@ static PluginConfigurationProcessor processCommonConfiguration( .setExposedPorts(ExposedPortsParser.parse(rawConfiguration.getPorts())) .setLabels(rawConfiguration.getLabels()) .setUser(rawConfiguration.getUser().orElse(null)); - rawConfiguration - .getWorkingDirectory() - .ifPresent( - workingDirectory -> - jibContainerBuilder.setWorkingDirectory(AbsoluteUnixPath.get(workingDirectory))); + getWorkingDirectoryChecked(rawConfiguration) + .ifPresent(workingDirectory -> jibContainerBuilder.setWorkingDirectory(workingDirectory)); if (rawConfiguration.getUseCurrentTimestamp()) { eventDispatcher.dispatch( LogEvent.warn( @@ -295,6 +293,21 @@ static AbsoluteUnixPath getAppRootChecked( } } + @VisibleForTesting + static Optional getWorkingDirectoryChecked(RawConfiguration rawConfiguration) + throws WorkingDirectoryInvalidException { + if (!rawConfiguration.getWorkingDirectory().isPresent()) { + return Optional.empty(); + } + + String path = rawConfiguration.getWorkingDirectory().get(); + try { + return Optional.of(AbsoluteUnixPath.get(path)); + } catch (IllegalArgumentException ex) { + throw new WorkingDirectoryInvalidException(path, path, ex); + } + } + // TODO: find a way to reduce the number of arguments. private static boolean configureCredentialRetrievers( EventDispatcher eventDispatcher, diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java new file mode 100644 index 0000000000..deba3fed87 --- /dev/null +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java @@ -0,0 +1,35 @@ +/* + * Copyright 2018 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. + */ + +package com.google.cloud.tools.jib.plugins.common; + +/** + * Indicates that the {@code container.workingDirectory} config value is invalid. (The path is not + * in the absolute unix-path style). + */ +public class WorkingDirectoryInvalidException extends Exception { + + private final String invalidPath; + + public WorkingDirectoryInvalidException(String message, String invalidPath, Throwable ex) { + super(message, ex); + this.invalidPath = invalidPath; + } + + public String getInvalidPathValue() { + return invalidPath; + } +} diff --git a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java index 5ad55ff080..42fd6b21d5 100644 --- a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java +++ b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java @@ -87,11 +87,16 @@ public void setUp() { .thenReturn(containerizer); } - /** Test with our default mocks, which try to mimic the bare Gradle configuration. */ + /** + * Test with our default mocks, which try to mimic the bare Gradle configuration. + * + * @throws WorkingDirectoryInvalidException + */ @Test public void testPluginConfigurationProcessor_defaults() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { PluginConfigurationProcessor processor = PluginConfigurationProcessor.processCommonConfiguration( rawConfiguration, projectProperties, containerizer, targetImageReference, false); @@ -109,7 +114,7 @@ public void testPluginConfigurationProcessor_defaults() @Test public void testPluginConfigurationProcessor_warProjectBaseImage() throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException { + InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { Mockito.when(projectProperties.isWarProject()).thenReturn(true); PluginConfigurationProcessor processor = @@ -125,7 +130,8 @@ public void testPluginConfigurationProcessor_warProjectBaseImage() @Test public void testEntrypoint() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("custom", "entrypoint"))); @@ -145,7 +151,8 @@ public void testEntrypoint() @Test public void testEntrypoint_defaultWarPackaging() throws IOException, InvalidImageReferenceException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getEntrypoint()).thenReturn(Optional.empty()); Mockito.when(projectProperties.isWarProject()).thenReturn(true); @@ -164,7 +171,8 @@ public void testEntrypoint_defaultWarPackaging() @Test public void testEntrypoint_defaulNonWarPackaging() throws IOException, InvalidImageReferenceException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getEntrypoint()).thenReturn(Optional.empty()); Mockito.when(projectProperties.isWarProject()).thenReturn(false); @@ -185,7 +193,8 @@ public void testEntrypoint_defaulNonWarPackaging() @Test public void testUser() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getUser()).thenReturn(Optional.of("customUser")); PluginConfigurationProcessor processor = @@ -201,7 +210,8 @@ public void testUser() @Test public void testUser_null() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { PluginConfigurationProcessor processor = PluginConfigurationProcessor.processCommonConfiguration( rawConfiguration, projectProperties, containerizer, targetImageReference, false); @@ -215,7 +225,8 @@ public void testUser_null() @Test public void testEntrypoint_warningOnJvmFlags() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("custom", "entrypoint"))); Mockito.when(rawConfiguration.getJvmFlags()).thenReturn(Collections.singletonList("jvmFlag")); @@ -237,7 +248,8 @@ public void testEntrypoint_warningOnJvmFlags() @Test public void testEntrypoint_warningOnMainclass() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("custom", "entrypoint"))); Mockito.when(rawConfiguration.getMainClass()).thenReturn(Optional.of("java.util.Object")); @@ -259,7 +271,8 @@ public void testEntrypoint_warningOnMainclass() @Test public void testEntrypointClasspath_nonDefaultAppRoot() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(rawConfiguration.getAppRoot()).thenReturn("/my/app"); PluginConfigurationProcessor processor = @@ -282,7 +295,8 @@ public void testEntrypointClasspath_nonDefaultAppRoot() @Test public void testWebAppEntrypoint_inheritedFromBaseImage() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException { + MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, + WorkingDirectoryInvalidException { Mockito.when(projectProperties.isWarProject()).thenReturn(true); PluginConfigurationProcessor processor = From 4f578b54e388c986e421cba32f583bf38af95de3 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Mon, 26 Nov 2018 18:51:31 -0500 Subject: [PATCH 6/9] Add tests --- .../PluginConfigurationProcessorTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java index b469ad1088..4d54b89f2c 100644 --- a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java +++ b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java @@ -394,6 +394,37 @@ public void testGetAppRootChecked_defaultWarProject() throws AppRootInvalidExcep PluginConfigurationProcessor.getAppRootChecked(rawConfiguration, projectProperties)); } + @Test + public void testGetWorkingDirectoryChecked() throws WorkingDirectoryInvalidException { + Mockito.when(rawConfiguration.getWorkingDirectory()).thenReturn(Optional.of("/valid/path")); + + Optional checkedPath = + PluginConfigurationProcessor.getWorkingDirectoryChecked(rawConfiguration); + Assert.assertTrue(checkedPath.isPresent()); + Assert.assertEquals(AbsoluteUnixPath.get("/valid/path"), checkedPath.get()); + } + + @Test + public void testGetWorkingDirectoryChecked_undefined() throws WorkingDirectoryInvalidException { + Mockito.when(rawConfiguration.getWorkingDirectory()).thenReturn(Optional.empty()); + Assert.assertEquals( + Optional.empty(), + PluginConfigurationProcessor.getWorkingDirectoryChecked(rawConfiguration)); + } + + @Test + public void testGetWorkingDirectoryChecked_notAbsolute() { + Mockito.when(rawConfiguration.getWorkingDirectory()).thenReturn(Optional.of("relative/path")); + + try { + PluginConfigurationProcessor.getWorkingDirectoryChecked(rawConfiguration); + Assert.fail(); + } catch (WorkingDirectoryInvalidException ex) { + Assert.assertEquals("relative/path", ex.getMessage()); + Assert.assertEquals("relative/path", ex.getInvalidPathValue()); + } + } + @Test public void testGetBaseImage_defaultNonWarPackaging() { Mockito.when(projectProperties.isWarProject()).thenReturn(false); From d87756235beaa510c3d4b668f7c220817b3784bd Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 27 Nov 2018 11:18:20 -0500 Subject: [PATCH 7/9] Include cause ex / rename to Invalid...Exception --- .../tools/jib/gradle/BuildDockerTask.java | 13 ++-- .../tools/jib/gradle/BuildImageTask.java | 13 ++-- .../cloud/tools/jib/gradle/BuildTarTask.java | 13 ++-- .../cloud/tools/jib/gradle/TaskCommon.java | 8 +-- .../tools/jib/maven/BuildDockerMojo.java | 14 ++-- .../cloud/tools/jib/maven/BuildImageMojo.java | 14 ++-- .../cloud/tools/jib/maven/BuildTarMojo.java | 14 ++-- .../cloud/tools/jib/maven/MojoCommon.java | 8 +-- ...tion.java => InvalidAppRootException.java} | 4 +- ... => InvalidWorkingDirectoryException.java} | 4 +- .../common/PluginConfigurationProcessor.java | 30 ++++---- .../PluginConfigurationProcessorTest.java | 68 +++++++++---------- 12 files changed, 106 insertions(+), 97 deletions(-) rename jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/{AppRootInvalidException.java => InvalidAppRootException.java} (89%) rename jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/{WorkingDirectoryInvalidException.java => InvalidWorkingDirectoryException.java} (88%) diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java index db8dc0defd..fc999030b1 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java @@ -22,15 +22,15 @@ import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.ImageReference; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException; import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner; import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions; import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; +import com.google.cloud.tools.jib.plugins.common.InvalidWorkingDirectoryException; import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; -import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.base.Preconditions; import java.io.IOException; import java.nio.file.Path; @@ -145,13 +145,14 @@ public void buildDocker() projectProperties.getJavaLayerConfigurations().getLayerConfigurations(), helpfulSuggestions); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); - } catch (WorkingDirectoryInvalidException ex) { + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue(), ex); + } catch (InvalidWorkingDirectoryException ex) { throw new GradleException( "container.workingDirectory is not an absolute Unix-style path: " - + ex.getInvalidPathValue()); + + ex.getInvalidPathValue(), + ex); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java index 1a043df7c9..6c13528a69 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java @@ -21,15 +21,15 @@ import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.ImageReference; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException; import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner; import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions; import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; +import com.google.cloud.tools.jib.plugins.common.InvalidWorkingDirectoryException; import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; -import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import java.io.IOException; @@ -125,13 +125,14 @@ public void buildImage() projectProperties.getJavaLayerConfigurations().getLayerConfigurations(), helpfulSuggestions); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); - } catch (WorkingDirectoryInvalidException ex) { + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue(), ex); + } catch (InvalidWorkingDirectoryException ex) { throw new GradleException( "container.workingDirectory is not an absolute Unix-style path: " - + ex.getInvalidPathValue()); + + ex.getInvalidPathValue(), + ex); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java index ada00563ce..0a7ae154e9 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java @@ -20,15 +20,15 @@ import com.google.cloud.tools.jib.event.DefaultEventDispatcher; import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException; import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner; import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions; import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; +import com.google.cloud.tools.jib.plugins.common.InvalidWorkingDirectoryException; import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; -import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.base.Preconditions; import java.io.IOException; import java.nio.file.Path; @@ -142,13 +142,14 @@ public void buildTar() projectProperties.getJavaLayerConfigurations().getLayerConfigurations(), helpfulSuggestions); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { throw new GradleException( - "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue()); - } catch (WorkingDirectoryInvalidException ex) { + "container.appRoot is not an absolute Unix-style path: " + ex.getInvalidPathValue(), ex); + } catch (InvalidWorkingDirectoryException ex) { throw new GradleException( "container.workingDirectory is not an absolute Unix-style path: " - + ex.getInvalidPathValue()); + + ex.getInvalidPathValue(), + ex); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/TaskCommon.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/TaskCommon.java index 44b7fa996e..0e58ec1a38 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/TaskCommon.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/TaskCommon.java @@ -19,7 +19,7 @@ import com.google.api.client.http.HttpTransport; import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.frontend.JavaLayerConfigurations; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; import java.util.logging.Level; import org.gradle.api.GradleException; import org.gradle.api.Project; @@ -37,11 +37,11 @@ class TaskCommon { * * @param jibExtension the {@link JibExtension} providing the configuration data * @return the app root value - * @throws AppRootInvalidException if the app root is not an absolute path in Unix-style + * @throws InvalidAppRootException if the app root is not an absolute path in Unix-style */ // TODO: find a way to use PluginConfigurationProcessor.getAppRootChecked() instead static AbsoluteUnixPath getAppRootChecked(JibExtension jibExtension, Project project) - throws AppRootInvalidException { + throws InvalidAppRootException { String appRoot = jibExtension.getContainer().getAppRoot(); if (appRoot.isEmpty()) { appRoot = @@ -52,7 +52,7 @@ static AbsoluteUnixPath getAppRootChecked(JibExtension jibExtension, Project pro try { return AbsoluteUnixPath.get(appRoot); } catch (IllegalArgumentException ex) { - throw new AppRootInvalidException(appRoot, appRoot, ex); + throw new InvalidAppRootException(appRoot, appRoot, ex); } } diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java index f826cd2f25..4a382e3274 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildDockerMojo.java @@ -23,15 +23,15 @@ import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.ImageReference; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException; import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner; import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions; import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; +import com.google.cloud.tools.jib.plugins.common.InvalidWorkingDirectoryException; import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; -import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; import java.nio.file.Path; @@ -111,13 +111,15 @@ public void execute() throws MojoExecutionException { helpfulSuggestions); getLog().info(""); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); - } catch (WorkingDirectoryInvalidException ex) { + " is not an absolute Unix-style path: " + ex.getInvalidPathValue(), + ex); + } catch (InvalidWorkingDirectoryException ex) { throw new MojoExecutionException( " is not an absolute Unix-style path: " - + ex.getInvalidPathValue()); + + ex.getInvalidPathValue(), + ex); } catch (InvalidImageReferenceException | IOException diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java index c2030472ca..469fd22845 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildImageMojo.java @@ -23,15 +23,15 @@ import com.google.cloud.tools.jib.image.ImageFormat; import com.google.cloud.tools.jib.image.ImageReference; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException; import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner; import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions; import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; +import com.google.cloud.tools.jib.plugins.common.InvalidWorkingDirectoryException; import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; -import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import java.io.IOException; @@ -127,13 +127,15 @@ public void execute() throws MojoExecutionException, MojoFailureException { helpfulSuggestions); getLog().info(""); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); - } catch (WorkingDirectoryInvalidException ex) { + " is not an absolute Unix-style path: " + ex.getInvalidPathValue(), + ex); + } catch (InvalidWorkingDirectoryException ex) { throw new MojoExecutionException( " is not an absolute Unix-style path: " - + ex.getInvalidPathValue()); + + ex.getInvalidPathValue(), + ex); } catch (InvalidImageReferenceException | IOException diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java index a1e3425d4d..5a81261776 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/BuildTarMojo.java @@ -21,15 +21,15 @@ import com.google.cloud.tools.jib.event.EventDispatcher; import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.image.InvalidImageReferenceException; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException; import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner; import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions; import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; +import com.google.cloud.tools.jib.plugins.common.InvalidWorkingDirectoryException; import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException; import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; -import com.google.cloud.tools.jib.plugins.common.WorkingDirectoryInvalidException; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; import java.nio.file.Path; @@ -105,13 +105,15 @@ public void execute() throws MojoExecutionException { helpfulSuggestions); getLog().info(""); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { throw new MojoExecutionException( - " is not an absolute Unix-style path: " + ex.getInvalidPathValue()); - } catch (WorkingDirectoryInvalidException ex) { + " is not an absolute Unix-style path: " + ex.getInvalidPathValue(), + ex); + } catch (InvalidWorkingDirectoryException ex) { throw new MojoExecutionException( " is not an absolute Unix-style path: " - + ex.getInvalidPathValue()); + + ex.getInvalidPathValue(), + ex); } catch (InvalidImageReferenceException | IOException diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MojoCommon.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MojoCommon.java index 7b15a45a59..4d332c1c86 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MojoCommon.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MojoCommon.java @@ -20,7 +20,7 @@ import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath; import com.google.cloud.tools.jib.frontend.JavaLayerConfigurations; import com.google.cloud.tools.jib.maven.JibPluginConfiguration.PermissionConfiguration; -import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException; +import com.google.cloud.tools.jib.plugins.common.InvalidAppRootException; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import java.nio.file.Path; @@ -38,11 +38,11 @@ class MojoCommon { * * @param jibPluginConfiguration the Jib plugin configuration * @return the app root value - * @throws AppRootInvalidException if the app root is not an absolute path in Unix-style + * @throws InvalidAppRootException if the app root is not an absolute path in Unix-style */ // TODO: find a way to use PluginConfigurationProcessor.getAppRootChecked() instead static AbsoluteUnixPath getAppRootChecked(JibPluginConfiguration jibPluginConfiguration) - throws AppRootInvalidException { + throws InvalidAppRootException { String appRoot = jibPluginConfiguration.getAppRoot(); if (appRoot.isEmpty()) { boolean isWarProject = "war".equals(jibPluginConfiguration.getProject().getPackaging()); @@ -54,7 +54,7 @@ static AbsoluteUnixPath getAppRootChecked(JibPluginConfiguration jibPluginConfig try { return AbsoluteUnixPath.get(appRoot); } catch (IllegalArgumentException ex) { - throw new AppRootInvalidException(appRoot, appRoot, ex); + throw new InvalidAppRootException(appRoot, appRoot, ex); } } diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/InvalidAppRootException.java similarity index 89% rename from jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java rename to jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/InvalidAppRootException.java index d953f22d95..ae16473dae 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/AppRootInvalidException.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/InvalidAppRootException.java @@ -20,11 +20,11 @@ * Indicates that the {@code container.appRoot} config value is invalid. (The path is not in the * absolute unix-path style. */ -public class AppRootInvalidException extends Exception { +public class InvalidAppRootException extends Exception { private final String invalidAppRoot; - public AppRootInvalidException(String message, String invalidAppRoot, Throwable ex) { + public InvalidAppRootException(String message, String invalidAppRoot, Throwable ex) { super(message, ex); this.invalidAppRoot = invalidAppRoot; } diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/InvalidWorkingDirectoryException.java similarity index 88% rename from jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java rename to jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/InvalidWorkingDirectoryException.java index deba3fed87..9706c33511 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/WorkingDirectoryInvalidException.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/InvalidWorkingDirectoryException.java @@ -20,11 +20,11 @@ * Indicates that the {@code container.workingDirectory} config value is invalid. (The path is not * in the absolute unix-path style). */ -public class WorkingDirectoryInvalidException extends Exception { +public class InvalidWorkingDirectoryException extends Exception { private final String invalidPath; - public WorkingDirectoryInvalidException(String message, String invalidPath, Throwable ex) { + public InvalidWorkingDirectoryException(String message, String invalidPath, Throwable ex) { super(message, ex); this.invalidPath = invalidPath; } diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java index 48cd8dc59b..3152f61868 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessor.java @@ -72,12 +72,12 @@ private interface InferredAuthProvider { * @param projectProperties used for providing additional information * @return the entrypoint * @throws MainClassInferenceException if no valid main class is configured or discovered - * @throws AppRootInvalidException if {@code appRoot} value is not an absolute Unix path + * @throws InvalidAppRootException if {@code appRoot} value is not an absolute Unix path */ @Nullable public static List computeEntrypoint( RawConfiguration rawConfiguration, ProjectProperties projectProperties) - throws MainClassInferenceException, AppRootInvalidException { + throws MainClassInferenceException, InvalidAppRootException { Optional> rawEntrypoint = rawConfiguration.getEntrypoint(); if (rawEntrypoint.isPresent() && !rawEntrypoint.get().isEmpty()) { if (rawConfiguration.getMainClass().isPresent() @@ -130,8 +130,8 @@ public static PluginConfigurationProcessor processCommonConfigurationForDockerDa @Nullable Path dockerExecutable, @Nullable Map dockerEnvironment, HelpfulSuggestions helpfulSuggestions) - throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { + throws InvalidImageReferenceException, MainClassInferenceException, InvalidAppRootException, + InferredAuthRetrievalException, IOException, InvalidWorkingDirectoryException { ImageReference targetImageReference = getGeneratedTargetDockerTag(rawConfiguration, projectProperties, helpfulSuggestions); DockerDaemonImage targetImage = DockerDaemonImage.named(targetImageReference); @@ -152,8 +152,8 @@ public static PluginConfigurationProcessor processCommonConfigurationForTarImage ProjectProperties projectProperties, Path tarImagePath, HelpfulSuggestions helpfulSuggestions) - throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { + throws InvalidImageReferenceException, MainClassInferenceException, InvalidAppRootException, + InferredAuthRetrievalException, IOException, InvalidWorkingDirectoryException { ImageReference targetImageReference = getGeneratedTargetDockerTag(rawConfiguration, projectProperties, helpfulSuggestions); TarImage targetImage = TarImage.named(targetImageReference).saveTo(tarImagePath); @@ -166,8 +166,8 @@ public static PluginConfigurationProcessor processCommonConfigurationForTarImage public static PluginConfigurationProcessor processCommonConfigurationForRegistryImage( RawConfiguration rawConfiguration, ProjectProperties projectProperties) throws InferredAuthRetrievalException, InvalidImageReferenceException, - MainClassInferenceException, AppRootInvalidException, IOException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, IOException, + InvalidWorkingDirectoryException { Preconditions.checkArgument(rawConfiguration.getToImage().isPresent()); ImageReference targetImageReference = ImageReference.parse(rawConfiguration.getToImage().get()); @@ -208,8 +208,8 @@ static PluginConfigurationProcessor processCommonConfiguration( Containerizer containerizer, ImageReference targetImageReference, boolean isTargetImageCredentialPresent) - throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { + throws InvalidImageReferenceException, MainClassInferenceException, InvalidAppRootException, + InferredAuthRetrievalException, IOException, InvalidWorkingDirectoryException { JibSystemProperties.checkHttpTimeoutProperty(); ImageReference baseImageReference = @@ -278,12 +278,12 @@ static PluginConfigurationProcessor processCommonConfiguration( * @param rawConfiguration raw configuration data * @param projectProperties used for providing additional information * @return the app root value - * @throws AppRootInvalidException if {@code appRoot} value is not an absolute Unix path + * @throws InvalidAppRootException if {@code appRoot} value is not an absolute Unix path */ @VisibleForTesting static AbsoluteUnixPath getAppRootChecked( RawConfiguration rawConfiguration, ProjectProperties projectProperties) - throws AppRootInvalidException { + throws InvalidAppRootException { String appRoot = rawConfiguration.getAppRoot(); if (appRoot.isEmpty()) { appRoot = @@ -294,13 +294,13 @@ static AbsoluteUnixPath getAppRootChecked( try { return AbsoluteUnixPath.get(appRoot); } catch (IllegalArgumentException ex) { - throw new AppRootInvalidException(appRoot, appRoot, ex); + throw new InvalidAppRootException(appRoot, appRoot, ex); } } @VisibleForTesting static Optional getWorkingDirectoryChecked(RawConfiguration rawConfiguration) - throws WorkingDirectoryInvalidException { + throws InvalidWorkingDirectoryException { if (!rawConfiguration.getWorkingDirectory().isPresent()) { return Optional.empty(); } @@ -309,7 +309,7 @@ static Optional getWorkingDirectoryChecked(RawConfiguration ra try { return Optional.of(AbsoluteUnixPath.get(path)); } catch (IllegalArgumentException ex) { - throw new WorkingDirectoryInvalidException(path, path, ex); + throw new InvalidWorkingDirectoryException(path, path, ex); } } diff --git a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java index 4d54b89f2c..65b412e1e9 100644 --- a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java +++ b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/PluginConfigurationProcessorTest.java @@ -90,13 +90,13 @@ public void setUp() { /** * Test with our default mocks, which try to mimic the bare Gradle configuration. * - * @throws WorkingDirectoryInvalidException + * @throws InvalidWorkingDirectoryException */ @Test public void testPluginConfigurationProcessor_defaults() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { PluginConfigurationProcessor processor = PluginConfigurationProcessor.processCommonConfiguration( rawConfiguration, projectProperties, containerizer, targetImageReference, false); @@ -113,8 +113,8 @@ public void testPluginConfigurationProcessor_defaults() @Test public void testPluginConfigurationProcessor_warProjectBaseImage() - throws InvalidImageReferenceException, MainClassInferenceException, AppRootInvalidException, - InferredAuthRetrievalException, IOException, WorkingDirectoryInvalidException { + throws InvalidImageReferenceException, MainClassInferenceException, InvalidAppRootException, + InferredAuthRetrievalException, IOException, InvalidWorkingDirectoryException { Mockito.when(projectProperties.isWarProject()).thenReturn(true); PluginConfigurationProcessor processor = @@ -130,8 +130,8 @@ public void testPluginConfigurationProcessor_warProjectBaseImage() @Test public void testEntrypoint() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("custom", "entrypoint"))); @@ -150,7 +150,7 @@ public void testEntrypoint() @Test public void testComputeEntrypoint_inheritKeyword() - throws MainClassInferenceException, AppRootInvalidException { + throws MainClassInferenceException, InvalidAppRootException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Collections.singletonList("INHERIT"))); @@ -160,7 +160,7 @@ public void testComputeEntrypoint_inheritKeyword() @Test public void testComputeEntrypoint_inheritKeywordInNonSingletonList() - throws MainClassInferenceException, AppRootInvalidException { + throws MainClassInferenceException, InvalidAppRootException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("INHERIT", ""))); @@ -171,8 +171,8 @@ public void testComputeEntrypoint_inheritKeywordInNonSingletonList() @Test public void testEntrypoint_defaultWarPackaging() throws IOException, InvalidImageReferenceException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getEntrypoint()).thenReturn(Optional.empty()); Mockito.when(projectProperties.isWarProject()).thenReturn(true); @@ -191,8 +191,8 @@ public void testEntrypoint_defaultWarPackaging() @Test public void testEntrypoint_defaulNonWarPackaging() throws IOException, InvalidImageReferenceException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getEntrypoint()).thenReturn(Optional.empty()); Mockito.when(projectProperties.isWarProject()).thenReturn(false); @@ -213,8 +213,8 @@ public void testEntrypoint_defaulNonWarPackaging() @Test public void testUser() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getUser()).thenReturn(Optional.of("customUser")); PluginConfigurationProcessor processor = @@ -230,8 +230,8 @@ public void testUser() @Test public void testUser_null() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { PluginConfigurationProcessor processor = PluginConfigurationProcessor.processCommonConfiguration( rawConfiguration, projectProperties, containerizer, targetImageReference, false); @@ -245,8 +245,8 @@ public void testUser_null() @Test public void testEntrypoint_warningOnJvmFlags() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("custom", "entrypoint"))); Mockito.when(rawConfiguration.getJvmFlags()).thenReturn(Collections.singletonList("jvmFlag")); @@ -268,8 +268,8 @@ public void testEntrypoint_warningOnJvmFlags() @Test public void testEntrypoint_warningOnMainclass() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getEntrypoint()) .thenReturn(Optional.of(Arrays.asList("custom", "entrypoint"))); Mockito.when(rawConfiguration.getMainClass()).thenReturn(Optional.of("java.util.Object")); @@ -291,8 +291,8 @@ public void testEntrypoint_warningOnMainclass() @Test public void testEntrypointClasspath_nonDefaultAppRoot() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getAppRoot()).thenReturn("/my/app"); PluginConfigurationProcessor processor = @@ -315,8 +315,8 @@ public void testEntrypointClasspath_nonDefaultAppRoot() @Test public void testWebAppEntrypoint_inheritedFromBaseImage() throws InvalidImageReferenceException, IOException, CacheDirectoryCreationException, - MainClassInferenceException, AppRootInvalidException, InferredAuthRetrievalException, - WorkingDirectoryInvalidException { + MainClassInferenceException, InvalidAppRootException, InferredAuthRetrievalException, + InvalidWorkingDirectoryException { Mockito.when(projectProperties.isWarProject()).thenReturn(true); PluginConfigurationProcessor processor = @@ -330,7 +330,7 @@ public void testWebAppEntrypoint_inheritedFromBaseImage() } @Test - public void testGetAppRootChecked() throws AppRootInvalidException { + public void testGetAppRootChecked() throws InvalidAppRootException { Mockito.when(rawConfiguration.getAppRoot()).thenReturn("/some/root"); Assert.assertEquals( @@ -345,7 +345,7 @@ public void testGetAppRootChecked_errorOnNonAbsolutePath() { try { PluginConfigurationProcessor.getAppRootChecked(rawConfiguration, projectProperties); Assert.fail(); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { Assert.assertEquals("relative/path", ex.getMessage()); } } @@ -357,7 +357,7 @@ public void testGetAppRootChecked_errorOnWindowsPath() { try { PluginConfigurationProcessor.getAppRootChecked(rawConfiguration, projectProperties); Assert.fail(); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { Assert.assertEquals("\\windows\\path", ex.getMessage()); } } @@ -369,13 +369,13 @@ public void testGetAppRootChecked_errorOnWindowsPathWithDriveLetter() { try { PluginConfigurationProcessor.getAppRootChecked(rawConfiguration, projectProperties); Assert.fail(); - } catch (AppRootInvalidException ex) { + } catch (InvalidAppRootException ex) { Assert.assertEquals("C:\\windows\\path", ex.getMessage()); } } @Test - public void testGetAppRootChecked_defaultNonWarProject() throws AppRootInvalidException { + public void testGetAppRootChecked_defaultNonWarProject() throws InvalidAppRootException { Mockito.when(rawConfiguration.getAppRoot()).thenReturn(""); Mockito.when(projectProperties.isWarProject()).thenReturn(false); @@ -385,7 +385,7 @@ public void testGetAppRootChecked_defaultNonWarProject() throws AppRootInvalidEx } @Test - public void testGetAppRootChecked_defaultWarProject() throws AppRootInvalidException { + public void testGetAppRootChecked_defaultWarProject() throws InvalidAppRootException { Mockito.when(rawConfiguration.getAppRoot()).thenReturn(""); Mockito.when(projectProperties.isWarProject()).thenReturn(true); @@ -395,7 +395,7 @@ public void testGetAppRootChecked_defaultWarProject() throws AppRootInvalidExcep } @Test - public void testGetWorkingDirectoryChecked() throws WorkingDirectoryInvalidException { + public void testGetWorkingDirectoryChecked() throws InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getWorkingDirectory()).thenReturn(Optional.of("/valid/path")); Optional checkedPath = @@ -405,7 +405,7 @@ public void testGetWorkingDirectoryChecked() throws WorkingDirectoryInvalidExcep } @Test - public void testGetWorkingDirectoryChecked_undefined() throws WorkingDirectoryInvalidException { + public void testGetWorkingDirectoryChecked_undefined() throws InvalidWorkingDirectoryException { Mockito.when(rawConfiguration.getWorkingDirectory()).thenReturn(Optional.empty()); Assert.assertEquals( Optional.empty(), @@ -419,7 +419,7 @@ public void testGetWorkingDirectoryChecked_notAbsolute() { try { PluginConfigurationProcessor.getWorkingDirectoryChecked(rawConfiguration); Assert.fail(); - } catch (WorkingDirectoryInvalidException ex) { + } catch (InvalidWorkingDirectoryException ex) { Assert.assertEquals("relative/path", ex.getMessage()); Assert.assertEquals("relative/path", ex.getInvalidPathValue()); } From e7d9cacafe6517a626a66b4de75aa3fdff8b175b Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 27 Nov 2018 17:16:58 -0500 Subject: [PATCH 8/9] Add integration tests for WorkingDir --- .../jib/gradle/SingleProjectIntegrationTest.java | 14 ++++++++++++++ .../resources/projects/simple/build.gradle | 1 + 2 files changed, 15 insertions(+) diff --git a/jib-gradle-plugin/src/integration-test/java/com/google/cloud/tools/jib/gradle/SingleProjectIntegrationTest.java b/jib-gradle-plugin/src/integration-test/java/com/google/cloud/tools/jib/gradle/SingleProjectIntegrationTest.java index f1b8e191bc..b9a5ca56b1 100644 --- a/jib-gradle-plugin/src/integration-test/java/com/google/cloud/tools/jib/gradle/SingleProjectIntegrationTest.java +++ b/jib-gradle-plugin/src/integration-test/java/com/google/cloud/tools/jib/gradle/SingleProjectIntegrationTest.java @@ -61,6 +61,15 @@ private static void assertSimpleCreationTimeIsAfter(Instant before, String image Assert.assertTrue(parsed.isAfter(before) || parsed.equals(before)); } + private static void assertWorkingDirectory(String expected, String imageReference) + throws IOException, InterruptedException { + Assert.assertEquals( + expected, + new Command("docker", "inspect", "-f", "{{.Config.WorkingDir}}", imageReference) + .run() + .trim()); + } + /** * Asserts that the test project has the required exposed ports and labels. * @@ -144,6 +153,7 @@ public void testBuild_simple() throws IOException, InterruptedException, DigestE JibRunHelper.buildAndRun(simpleTestProject, targetImage)); assertDockerInspect(targetImage); assertSimpleCreationTimeIsAfter(beforeBuild, targetImage); + assertWorkingDirectory("/home", targetImage); } @Test @@ -154,6 +164,7 @@ public void testBuild_complex() throws IOException, InterruptedException { "Hello, world. An argument.\nrwxr-xr-x\nrwxrwxrwx\nfoo\ncat\n-Xms512m\n-Xdebug\nenvvalue1\nenvvalue2\n", buildAndRunComplex(targetImage, "testuser2", "testpassword2", localRegistry2)); assertSimpleCreationTimeIsAfter(beforeBuild, targetImage); + assertWorkingDirectory("", targetImage); } @Test @@ -164,6 +175,7 @@ public void testBuild_complex_sameFromAndToRegistry() throws IOException, Interr "Hello, world. An argument.\nrwxr-xr-x\nrwxrwxrwx\nfoo\ncat\n-Xms512m\n-Xdebug\nenvvalue1\nenvvalue2\n", buildAndRunComplex(targetImage, "testuser", "testpassword", localRegistry1)); assertSimpleCreationTimeIsAfter(beforeBuild, targetImage); + assertWorkingDirectory("", targetImage); } @Test @@ -175,6 +187,7 @@ public void testDockerDaemon_simple() throws IOException, InterruptedException, JibRunHelper.buildToDockerDaemonAndRun(simpleTestProject, targetImage)); assertSimpleCreationTimeIsAfter(beforeBuild, targetImage); assertDockerInspect(targetImage); + assertWorkingDirectory("/home", targetImage); } @Test @@ -196,5 +209,6 @@ public void testBuildTar_simple() throws IOException, InterruptedException { new Command("docker", "run", "--rm", targetImage).run()); assertDockerInspect(targetImage); assertSimpleCreationTimeIsAfter(beforeBuild, targetImage); + assertWorkingDirectory("/home", targetImage); } } diff --git a/jib-gradle-plugin/src/integration-test/resources/projects/simple/build.gradle b/jib-gradle-plugin/src/integration-test/resources/projects/simple/build.gradle index 2cf938a3c2..ea5d74319e 100644 --- a/jib-gradle-plugin/src/integration-test/resources/projects/simple/build.gradle +++ b/jib-gradle-plugin/src/integration-test/resources/projects/simple/build.gradle @@ -24,6 +24,7 @@ jib { args = ['An argument.'] ports = ['1000/tcp', '2000-2003/udp'] labels = [key1:'value1', key2:'value2'] + workingDirectory = '/home' } extraDirectory = file('src/main/custom-extra-dir') From 2ac386c79d9b298b6f648c7b1910ec6e8bd80479 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 27 Nov 2018 17:22:06 -0500 Subject: [PATCH 9/9] Add more tests --- .../jib/maven/BuildImageMojoIntegrationTest.java | 13 +++++++++++++ .../src/test/resources/projects/simple/pom.xml | 1 + 2 files changed, 14 insertions(+) diff --git a/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/BuildImageMojoIntegrationTest.java b/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/BuildImageMojoIntegrationTest.java index 1037e558bd..379c40ac3e 100644 --- a/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/BuildImageMojoIntegrationTest.java +++ b/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/BuildImageMojoIntegrationTest.java @@ -258,6 +258,15 @@ private static void assertCreationTimeEpoch(String imageReference) new Command("docker", "inspect", "-f", "{{.Created}}", imageReference).run().trim()); } + private static void assertWorkingDirectory(String expected, String imageReference) + throws IOException, InterruptedException { + Assert.assertEquals( + expected, + new Command("docker", "inspect", "-f", "{{.Config.WorkingDir}}", imageReference) + .run() + .trim()); + } + @Nullable private String detachedContainerName; @Before @@ -318,6 +327,7 @@ public void testExecute_simple() Instant.parse( new Command("docker", "inspect", "-f", "{{.Created}}", targetImage).run().trim()); Assert.assertTrue(buildTime.isAfter(before) || buildTime.equals(before)); + assertWorkingDirectory("/home", targetImage); } @Test @@ -326,6 +336,7 @@ public void testExecute_empty() String targetImage = getGcrImageReference("emptyimage:maven"); Assert.assertEquals("", buildAndRun(emptyTestProject.getProjectRoot(), targetImage, false)); assertCreationTimeEpoch(targetImage); + assertWorkingDirectory("", targetImage); } @Test @@ -365,6 +376,7 @@ public void testExecute_complex() Assert.assertEquals( "Hello, world. An argument.\nrwxr-xr-x\nrwxrwxrwx\nfoo\ncat\n-Xms512m\n-Xdebug\nenvvalue1\nenvvalue2\n", buildAndRunComplex(targetImage, "testuser2", "testpassword2", localRegistry2)); + assertWorkingDirectory("", targetImage); } @Test @@ -374,6 +386,7 @@ public void testExecute_complex_sameFromAndToRegistry() Assert.assertEquals( "Hello, world. An argument.\nrwxr-xr-x\nrwxrwxrwx\nfoo\ncat\n-Xms512m\n-Xdebug\nenvvalue1\nenvvalue2\n", buildAndRunComplex(targetImage, "testuser", "testpassword", localRegistry1)); + assertWorkingDirectory("", targetImage); } @Test diff --git a/jib-maven-plugin/src/test/resources/projects/simple/pom.xml b/jib-maven-plugin/src/test/resources/projects/simple/pom.xml index e5c4e478c1..66b17c2392 100644 --- a/jib-maven-plugin/src/test/resources/projects/simple/pom.xml +++ b/jib-maven-plugin/src/test/resources/projects/simple/pom.xml @@ -52,6 +52,7 @@ value1 value2 + /home ${project.basedir}/src/main/jib-custom