From f975bd5346a071801ded9086454f05a00049270f Mon Sep 17 00:00:00 2001 From: Ethan Huang Date: Tue, 1 Sep 2020 12:46:59 -0700 Subject: [PATCH] Support local deployment's param version matching (#404) --- .../packagemanager/KernelConfigResolver.java | 10 ++++++-- .../KernelConfigResolverTest.java | 25 +++++++++---------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolver.java b/src/main/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolver.java index c80d648d0c..a1207f97b9 100644 --- a/src/main/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolver.java +++ b/src/main/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolver.java @@ -19,6 +19,8 @@ import com.aws.iot.evergreen.util.CrashableFunction; import com.aws.iot.evergreen.util.Pair; import com.aws.iot.evergreen.util.Utils; +import com.vdurmont.semver4j.Requirement; +import com.vdurmont.semver4j.Semver; import java.util.ArrayList; import java.util.Collections; @@ -295,8 +297,12 @@ private Optional getMatchingPackageConfigFromDep String packageName, String packageVersion) { return document.getDeploymentPackageConfigurationList().stream() - .filter(packageConfig -> packageName.equals(packageConfig.getPackageName()) && packageVersion - .equals(packageConfig.getResolvedVersion())).findAny(); + .filter(packageConfig -> + packageName.equals(packageConfig.getPackageName()) + // TODO packageConfig.getResolvedVersion() should be strongly typed when created + && Requirement.buildNPM(packageConfig.getResolvedVersion()) + .isSatisfiedBy(new Semver(packageVersion, Semver.SemverType.NPM))) + .findAny(); } private Set resolveParameterValuesToUseWithCache( diff --git a/src/test/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolverTest.java b/src/test/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolverTest.java index d120e6caf3..712b708ebc 100644 --- a/src/test/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolverTest.java +++ b/src/test/java/com/aws/iot/evergreen/packagemanager/KernelConfigResolverTest.java @@ -10,7 +10,6 @@ import com.aws.iot.evergreen.deployment.model.DeploymentPackageConfiguration; import com.aws.iot.evergreen.kernel.EvergreenService; import com.aws.iot.evergreen.kernel.Kernel; -import com.aws.iot.evergreen.packagemanager.exceptions.PackageLoadingException; import com.aws.iot.evergreen.packagemanager.models.PackageIdentifier; import com.aws.iot.evergreen.packagemanager.models.PackageParameter; import com.aws.iot.evergreen.packagemanager.models.PackageRecipe; @@ -111,9 +110,9 @@ void GIVEN_deployment_for_package_WHEN_config_resolution_requested_THEN_add_serv TEST_INPUT_PACKAGE_B); DeploymentPackageConfiguration rootPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "1.2", Collections.emptyMap()); + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "=1.2", Collections.emptyMap()); DeploymentPackageConfiguration dependencyPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_B, false, "2.3", Collections.emptyMap()); + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_B, false, "=2.3", Collections.emptyMap()); DeploymentDocument document = DeploymentDocument.builder() .rootPackages(Arrays.asList(TEST_INPUT_PACKAGE_A)) .deploymentPackageConfigurationList( @@ -149,7 +148,6 @@ void GIVEN_deployment_for_package_WHEN_config_resolution_requested_THEN_add_serv dependencyListContains("main", TEST_INPUT_PACKAGE_A, servicesConfig)); assertThat("Main service must depend on existing service", dependencyListContains("main", "IpcService" + ":" + DependencyType.HARD, servicesConfig)); - System.out.println(servicesConfig); assertThat("New service must depend on dependency service", dependencyListContains(TEST_INPUT_PACKAGE_A, TEST_INPUT_PACKAGE_B, servicesConfig)); @@ -167,7 +165,7 @@ void GIVEN_deployment_for_existing_package_WHEN_config_resolution_requested_THEN TEST_INPUT_PACKAGE_A); DeploymentPackageConfiguration rootPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "1.2", Collections.emptyMap()); + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "=1.2", Collections.emptyMap()); DeploymentDocument document = DeploymentDocument.builder() .rootPackages(Arrays.asList(TEST_INPUT_PACKAGE_A)) .deploymentPackageConfigurationList( @@ -213,7 +211,7 @@ void GIVEN_deployment_with_parameters_set_WHEN_config_resolution_requested_THEN_ getSimpleParameterMap(TEST_INPUT_PACKAGE_A), TEST_INPUT_PACKAGE_A); DeploymentPackageConfiguration rootPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "1.2", new HashMap() {{ + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, ">=1.2", new HashMap() {{ put("PackageA_Param_1", "PackageA_Param_1_value"); }}); DeploymentDocument document = DeploymentDocument.builder() @@ -273,6 +271,8 @@ void GIVEN_deployment_with_parameters_set_WHEN_config_resolution_requested_THEN_ PackageRecipe rootPackageRecipe = getPackage(TEST_INPUT_PACKAGE_A, "1.2", Collections.emptyMap(), getSimpleParameterMap(TEST_INPUT_PACKAGE_A), TEST_INPUT_PACKAGE_A); + + // B-1.5 -> A-1.2 PackageRecipe package2Recipe = getPackage(TEST_INPUT_PACKAGE_B, "1.5", Utils.immutableMap(TEST_INPUT_PACKAGE_A, new RecipeDependencyProperties("=1.2", DependencyType.HARD.toString())), getSimpleParameterMap(TEST_INPUT_PACKAGE_B), TEST_INPUT_PACKAGE_A); @@ -280,15 +280,15 @@ void GIVEN_deployment_with_parameters_set_WHEN_config_resolution_requested_THEN_ getSimpleParameterMap(TEST_INPUT_PACKAGE_C), TEST_INPUT_PACKAGE_A); DeploymentPackageConfiguration rootPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "1.2", new HashMap() {{ + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "=1.2", new HashMap() {{ put("PackageA_Param_1", "PackageA_Param_1_value"); }}); DeploymentPackageConfiguration package2DeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_B, true, "1.2", new HashMap() {{ + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_B, true, "=1.5", new HashMap() {{ put("PackageB_Param_1", "PackageB_Param_1_value"); }}); DeploymentPackageConfiguration package3DeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_C, true, "1.2", Collections.emptyMap()); + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_C, true, "=1.5", Collections.emptyMap()); DeploymentDocument document = DeploymentDocument.builder() .rootPackages(Arrays.asList(TEST_INPUT_PACKAGE_A, TEST_INPUT_PACKAGE_B, TEST_INPUT_PACKAGE_C)) @@ -342,7 +342,7 @@ void GIVEN_deployment_with_params_not_set_WHEN_previous_deployment_had_params_TH getSimpleParameterMap(TEST_INPUT_PACKAGE_A), TEST_INPUT_PACKAGE_A); DeploymentPackageConfiguration rootPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "1.2", Collections.emptyMap()); + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "=1.2", Collections.emptyMap()); DeploymentDocument document = DeploymentDocument.builder() .rootPackages(Arrays.asList(TEST_INPUT_PACKAGE_A)) .deploymentPackageConfigurationList( @@ -406,7 +406,7 @@ void GIVEN_deployment_with_artifact_WHEN_config_resolution_requested_THEN_artifa }}, Collections.emptyList(), Collections.emptyMap(), null); DeploymentPackageConfiguration rootPackageDeploymentConfig = - new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "1.2", Collections.emptyMap()); + new DeploymentPackageConfiguration(TEST_INPUT_PACKAGE_A, true, "=1.2", Collections.emptyMap()); DeploymentDocument document = DeploymentDocument.builder() .rootPackages(Arrays.asList(TEST_INPUT_PACKAGE_A)) .deploymentPackageConfigurationList( @@ -437,8 +437,7 @@ void GIVEN_deployment_with_artifact_WHEN_config_resolution_requested_THEN_artifa // utilities for mocking input private PackageRecipe getPackage(String packageName, String packageVersion, Map dependencies, - Map packageParamsWithDefaultsRaw, String crossComponentName) - throws PackageLoadingException { + Map packageParamsWithDefaultsRaw, String crossComponentName) { Set parameters = packageParamsWithDefaultsRaw.entrySet() .stream()