From f2bceb8b265f671a716040e7891b71eb005f1c9b Mon Sep 17 00:00:00 2001 From: Florent Benoit Date: Mon, 18 Oct 2021 13:42:38 +0200 Subject: [PATCH] fix: allow to override devfileFilename --- .../server/urlfactory/URLFactoryBuilder.java | 6 ++--- .../urlfactory/URLFactoryBuilderTest.java | 3 ++- .../devfile/OverridePropertiesApplier.java | 9 ++++++- .../OverridePropertiesApplierTest.java | 24 ++++++++++++++++++- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/wsmaster/che-core-api-factory/src/main/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilder.java b/wsmaster/che-core-api-factory/src/main/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilder.java index 301164cfef..b3afeee50e 100644 --- a/wsmaster/che-core-api-factory/src/main/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilder.java +++ b/wsmaster/che-core-api-factory/src/main/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilder.java @@ -60,7 +60,7 @@ public class URLFactoryBuilder { private static final Logger LOG = LoggerFactory.getLogger(URLFactoryBuilder.class); - public static final String DEVFILE_NAME = "devfileName"; + public static final String DEVFILE_FILENAME = "devfileFilename"; private final String defaultCheEditor; private final String defaultChePlugins; @@ -106,8 +106,8 @@ public class URLFactoryBuilder { String devfileYamlContent; // Apply the new devfile name to look for - if (overrideProperties.containsKey(DEVFILE_NAME)) { - remoteFactoryUrl.setDevfileFilename(overrideProperties.get(DEVFILE_NAME)); + if (overrideProperties.containsKey(DEVFILE_FILENAME)) { + remoteFactoryUrl.setDevfileFilename(overrideProperties.get(DEVFILE_FILENAME)); } for (DevfileLocation location : remoteFactoryUrl.devfileFileLocations()) { diff --git a/wsmaster/che-core-api-factory/src/test/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilderTest.java b/wsmaster/che-core-api-factory/src/test/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilderTest.java index b72e1c81a2..6d2f239b53 100644 --- a/wsmaster/che-core-api-factory/src/test/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilderTest.java +++ b/wsmaster/che-core-api-factory/src/test/java/org/eclipse/che/api/factory/server/urlfactory/URLFactoryBuilderTest.java @@ -285,7 +285,8 @@ public class URLFactoryBuilderTest { }; String pathToDevfile = "my-custom-devfile-path.yaml"; - Map propertiesMap = singletonMap(URLFactoryBuilder.DEVFILE_NAME, pathToDevfile); + Map propertiesMap = + singletonMap(URLFactoryBuilder.DEVFILE_FILENAME, pathToDevfile); FactoryMetaDto factory = urlFactoryBuilder .createFactoryFromDevfile(githubLikeRemoteUrl, s -> myLocation + ".list", propertiesMap) diff --git a/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplier.java b/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplier.java index d60f53a4ae..5b832f8073 100644 --- a/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplier.java +++ b/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplier.java @@ -42,12 +42,19 @@ import org.eclipse.che.api.workspace.server.devfile.exception.OverrideParameterE public class OverridePropertiesApplier { private final List allowedFirstSegments = - asList("apiVersion", "metadata", "projects", "attributes"); + asList("apiVersion", "metadata", "projects", "attributes", "devfileFilename"); + + private final List skipJsonSegments = asList("devfileFilename"); public JsonNode applyPropertiesOverride( JsonNode devfileNode, Map overrideProperties) throws OverrideParameterException { for (Map.Entry entry : overrideProperties.entrySet()) { + + // skip some segment + if (skipJsonSegments.contains(entry.getKey())) { + continue; + } String[] pathSegments = parseSegments(entry.getKey()); if (pathSegments.length < 1) { continue; diff --git a/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplierTest.java b/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplierTest.java index 9c6a1bc3d3..db41368ae7 100644 --- a/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplierTest.java +++ b/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/devfile/OverridePropertiesApplierTest.java @@ -12,6 +12,7 @@ package org.eclipse.che.api.workspace.server.devfile; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -44,6 +45,27 @@ public class OverridePropertiesApplierTest { assertEquals(result.get("metadata").get("generateName").textValue(), "go"); } + @Test + public void shouldNotOverrideDevfileFilenameInDevfile() throws Exception { + String json = + "{" + + "\"apiVersion\": \"2.0.0\"," + + "\"metadata\": {" + + " \"generateName\": \"python\"" + + " }" + + "}"; + Map overrides = new HashMap<>(); + overrides.put("devfileFilename", "devfile.v2"); + overrides.put("metadata.generateName", "go"); + // when + JsonNode result = applier.applyPropertiesOverride(jsonMapper.readTree(json), overrides); + + // then + assertEquals(result.get("metadata").get("generateName").textValue(), "go"); + // this parameter is accepted but not added into the JSON + assertNull(result.get("devfileFilename")); + } + @Test public void shouldCreateUnExistingOverridePropertiesInDevfile() throws Exception { String json = "{" + "\"apiVersion\": \"1.0.0\"" + "}"; @@ -197,7 +219,7 @@ public class OverridePropertiesApplierTest { @Test( expectedExceptions = OverrideParameterException.class, expectedExceptionsMessageRegExp = - "Override path 'commands.run.foo.bar' starts with an unsupported field pointer. Supported fields are \\{\"apiVersion\",\"metadata\",\"projects\"\\,\"attributes\"\\}.") + "Override path 'commands.run.foo.bar' starts with an unsupported field pointer. Supported fields are \\{\"apiVersion\",\"metadata\",\"projects\"\\,\"attributes\"\\,\"devfileFilename\"\\}.") public void shouldThrowExceptionIfOverrideReferenceUsesUnsupportedField() throws Exception { String json = "{"