Search in sources :

Example 1 with ConfigurationUpdateOperation

use of com.aws.greengrass.deployment.model.ConfigurationUpdateOperation in project aws-greengrass-nucleus by aws-greengrass.

the class DeploymentDocumentConverterTest method GIVEN_Full_Local_Override_Request_config_update_And_Current_Root_WHEN_convert_THEN_Return_expected_Deployment_Document.

// Existing: ROOT_COMPONENT_TO_REMOVE_1-1.0.0, ROOT_COMPONENT_TO_REMOVE_2-2.0.0, EXISTING_ROOT_COMPONENT-2.0.0
// To Remove: ROOT_COMPONENT_TO_REMOVE_1, ROOT_COMPONENT_TO_REMOVE_2
// To Add: NEW_ROOT_COMPONENT-2.0.0
// To Update: EXISTING_ROOT_COMPONENT-1.0.0 -> 2.0.0
// Result roots: NEW_ROOT_COMPONENT-2.0.0, EXISTING_ROOT_COMPONENT-2.0.0
@Test
void GIVEN_Full_Local_Override_Request_config_update_And_Current_Root_WHEN_convert_THEN_Return_expected_Deployment_Document() throws Exception {
    String dependencyUpdateConfigString = "{ \"MERGE\": { \"Company\": { \"Office\": { \"temperature\": 22 } }, \"path1\": { \"Object2\": { \"key2\": \"val2\" } } }, \"RESET\": [ \"/secret/first\" ] }";
    Map<String, ConfigurationUpdateOperation> updateConfig = new HashMap<>();
    updateConfig.put(DEPENDENCY_COMPONENT, mapper.readValue(dependencyUpdateConfigString, ConfigurationUpdateOperation.class));
    String existingUpdateConfigString = "{ \"MERGE\": {\"foo\": \"bar\"}}";
    updateConfig.put(EXISTING_ROOT_COMPONENT, mapper.readValue(existingUpdateConfigString, ConfigurationUpdateOperation.class));
    Map<String, RunWithInfo> componentToRunWithInfo = new HashMap<>();
    RunWithInfo runWithInfo = new RunWithInfo();
    runWithInfo.setPosixUser("foo:bar");
    runWithInfo.setWindowsUser("testWindowsUser");
    SystemResourceLimits limits = new SystemResourceLimits();
    limits.setMemory(102400L);
    limits.setCpus(1.5);
    runWithInfo.setSystemResourceLimits(limits);
    componentToRunWithInfo.put(NEW_ROOT_COMPONENT, runWithInfo);
    runWithInfo = new RunWithInfo();
    runWithInfo.setPosixUser("1234");
    runWithInfo.setWindowsUser("testWindowsUser2");
    componentToRunWithInfo.put(DEPENDENCY_COMPONENT, runWithInfo);
    // Existing: ROOT_COMPONENT_TO_REMOVE_1-1.0.0, ROOT_COMPONENT_TO_REMOVE_2-2.0.0, EXISTING_ROOT_COMPONENT-2.0.0
    // To Remove: ROOT_COMPONENT_TO_REMOVE_1, ROOT_COMPONENT_TO_REMOVE_2
    // To Add: NEW_ROOT_COMPONENT-2.0.0
    // To Update: EXISTING_ROOT_COMPONENT-1.0.0 -> 2.0.0
    // Result roots: NEW_ROOT_COMPONENT-2.0.0, EXISTING_ROOT_COMPONENT-2.0.0
    LocalOverrideRequest testRequest = LocalOverrideRequest.builder().requestId(REQUEST_ID).requestTimestamp(REQUEST_TIMESTAMP).componentsToMerge(ROOT_COMPONENTS_TO_MERGE).componentsToRemove(Arrays.asList(ROOT_COMPONENT_TO_REMOVE_1, ROOT_COMPONENT_TO_REMOVE_2)).configurationUpdate(updateConfig).componentToRunWithInfo(componentToRunWithInfo).build();
    DeploymentDocument deploymentDocument = DeploymentDocumentConverter.convertFromLocalOverrideRequestAndRoot(testRequest, CURRENT_ROOT_COMPONENTS);
    assertThat(deploymentDocument.getFailureHandlingPolicy(), is(FailureHandlingPolicy.DO_NOTHING));
    assertThat(deploymentDocument.getDeploymentId(), is(REQUEST_ID));
    assertThat(deploymentDocument.getTimestamp(), is(REQUEST_TIMESTAMP));
    assertThat(deploymentDocument.getRootPackages(), is(Arrays.asList(EXISTING_ROOT_COMPONENT, NEW_ROOT_COMPONENT)));
    List<DeploymentPackageConfiguration> deploymentPackageConfigurations = deploymentDocument.getDeploymentPackageConfigurationList();
    assertThat(deploymentPackageConfigurations.size(), is(3));
    // verify deploymentConfigs
    DeploymentPackageConfiguration existingRootComponentConfig = deploymentPackageConfigurations.stream().filter(e -> e.getPackageName().equals(EXISTING_ROOT_COMPONENT)).findAny().get();
    assertThat(existingRootComponentConfig.getResolvedVersion(), is("2.0.0"));
    assertThat(existingRootComponentConfig.getConfigurationUpdateOperation(), is(mapper.readValue(existingUpdateConfigString, ConfigurationUpdateOperation.class)));
    DeploymentPackageConfiguration newRootComponentConfig = deploymentPackageConfigurations.stream().filter(e -> e.getPackageName().equals(NEW_ROOT_COMPONENT)).findAny().get();
    assertThat(newRootComponentConfig.getResolvedVersion(), is("2.0.0"));
    assertNull(newRootComponentConfig.getConfigurationUpdateOperation());
    assertEquals("foo:bar", newRootComponentConfig.getRunWith().getPosixUser());
    assertEquals("testWindowsUser", newRootComponentConfig.getRunWith().getWindowsUser());
    assertEquals(1.5, newRootComponentConfig.getRunWith().getSystemResourceLimits().getCpus());
    assertEquals(102400L, newRootComponentConfig.getRunWith().getSystemResourceLimits().getMemory());
    DeploymentPackageConfiguration DependencyComponentConfig = deploymentPackageConfigurations.stream().filter(e -> e.getPackageName().equals(DEPENDENCY_COMPONENT)).findAny().get();
    assertEquals(DependencyComponentConfig.getConfigurationUpdateOperation(), mapper.readValue(dependencyUpdateConfigString, ConfigurationUpdateOperation.class));
    assertThat(DependencyComponentConfig.getResolvedVersion(), is("*"));
}
Also used : ConfigurationUpdateOperation(com.aws.greengrass.deployment.model.ConfigurationUpdateOperation) DeploymentPackageConfiguration(com.aws.greengrass.deployment.model.DeploymentPackageConfiguration) RunWithInfo(software.amazon.awssdk.aws.greengrass.model.RunWithInfo) LocalOverrideRequest(com.aws.greengrass.deployment.model.LocalOverrideRequest) HashMap(java.util.HashMap) DeploymentDocument(com.aws.greengrass.deployment.model.DeploymentDocument) SystemResourceLimits(software.amazon.awssdk.aws.greengrass.model.SystemResourceLimits) Test(org.junit.jupiter.api.Test)

Example 2 with ConfigurationUpdateOperation

use of com.aws.greengrass.deployment.model.ConfigurationUpdateOperation in project aws-greengrass-nucleus by aws-greengrass.

the class KernelConfigResolverTest method GIVEN_deployment_with_configuration_update_WHEN_config_resolution_requested_THEN_correct_value_applied.

@ParameterizedTest
@MethodSource("multiTimestampDeploymentSource")
void GIVEN_deployment_with_configuration_update_WHEN_config_resolution_requested_THEN_correct_value_applied(long previousDeploymentTimestamp, String expectedValue) throws Exception {
    // GIVEN
    ComponentIdentifier rootComponentIdentifier = new ComponentIdentifier(TEST_INPUT_PACKAGE_A, new Semver("1.2.0"));
    ObjectNode node = OBJECT_MAPPER.createObjectNode();
    node.with("startup").put("paramA", "valueA");
    ComponentRecipe rootComponentRecipe = getComponent(TEST_INPUT_PACKAGE_A, "1.2.0", Collections.emptyMap(), node, "/startup/paramA", null, null);
    ConfigurationUpdateOperation updateOperation = new ConfigurationUpdateOperation();
    updateOperation.setValueToMerge(Collections.singletonMap("startup", Collections.singletonMap("paramA", "valueC")));
    DeploymentPackageConfiguration rootPackageDeploymentConfig = DeploymentPackageConfiguration.builder().packageName(TEST_INPUT_PACKAGE_A).rootComponent(true).resolvedVersion(">=1.2").configurationUpdateOperation(previousDeploymentTimestamp == -1 ? null : updateOperation).build();
    DeploymentDocument document = DeploymentDocument.builder().deploymentPackageConfigurationList(Collections.singletonList(rootPackageDeploymentConfig)).timestamp(10_000L).build();
    when(kernel.findServiceTopic(TEST_INPUT_PACKAGE_A)).thenReturn(config.lookupTopics(SERVICES_NAMESPACE_TOPIC, TEST_INPUT_PACKAGE_A));
    config.lookupTopics(SERVICES_NAMESPACE_TOPIC, TEST_INPUT_PACKAGE_A, CONFIGURATION_CONFIG_KEY).updateFromMap(Collections.singletonMap("startup", Collections.singletonMap("paramA", "valueB")), new UpdateBehaviorTree(UpdateBehaviorTree.UpdateBehavior.REPLACE, previousDeploymentTimestamp));
    Map<String, Object> servicesConfig = serviceConfigurationProperlyResolved(document, Collections.singletonMap(rootComponentIdentifier, rootComponentRecipe));
    // parameter interpolation
    Map<String, String> serviceInstallCommand = (Map<String, String>) getServiceInstallCommand(TEST_INPUT_PACKAGE_A, servicesConfig);
    assertThat("has running and has update configuration, the updated value should be used", serviceInstallCommand.get(LIFECYCLE_SCRIPT_KEY), equalTo("echo installing service in Component PackageA with param " + expectedValue + "," + " kernel rootPath as " + DUMMY_ROOT_PATH.toAbsolutePath().toString() + " and unpack dir as " + DUMMY_DECOMPRESSED_PATH_KEY.toAbsolutePath().toString() + ", thing name is " + THE_THINGNAME));
    assertThat("has running and has update configuration, the updated value should be used", getServiceRunCommand(TEST_INPUT_PACKAGE_A, servicesConfig), equalTo("echo running service in Component PackageA with param " + expectedValue));
}
Also used : ConfigurationUpdateOperation(com.aws.greengrass.deployment.model.ConfigurationUpdateOperation) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) DeploymentDocument(com.aws.greengrass.deployment.model.DeploymentDocument) ComponentIdentifier(com.aws.greengrass.componentmanager.models.ComponentIdentifier) Semver(com.vdurmont.semver4j.Semver) DeploymentPackageConfiguration(com.aws.greengrass.deployment.model.DeploymentPackageConfiguration) UpdateBehaviorTree(com.aws.greengrass.config.UpdateBehaviorTree) ComponentRecipe(com.aws.greengrass.componentmanager.models.ComponentRecipe) Map(java.util.Map) HashMap(java.util.HashMap) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 3 with ConfigurationUpdateOperation

use of com.aws.greengrass.deployment.model.ConfigurationUpdateOperation in project aws-greengrass-nucleus by aws-greengrass.

the class KernelConfigResolverTest method GIVEN_interpolate_config_set_WHEN_config_resolution_requested_THEN_self_referential_config_resolved_one_level.

@Test
void GIVEN_interpolate_config_set_WHEN_config_resolution_requested_THEN_self_referential_config_resolved_one_level() throws Exception {
    // GIVEN
    ComponentIdentifier rootComponentIdentifier = new ComponentIdentifier(TEST_INPUT_PACKAGE_A, new Semver("1.2", Semver.SemverType.NPM));
    List<ComponentIdentifier> packagesToDeploy = Arrays.asList(rootComponentIdentifier);
    ComponentRecipe rootComponentRecipe = new ComponentRecipe(RecipeFormatVersion.JAN_25_2020, TEST_INPUT_PACKAGE_A, rootComponentIdentifier.getVersion(), "", "", null, new HashMap<String, Object>() {

        {
            put(LIFECYCLE_RUN_KEY, "java -jar {configuration:/jarPath}/test.jar -x arg");
        }
    }, Collections.emptyList(), Collections.emptyMap(), null);
    DeploymentPackageConfiguration rootPackageDeploymentConfig = DeploymentPackageConfiguration.builder().packageName(TEST_INPUT_PACKAGE_A).rootComponent(true).resolvedVersion("=1.2").configurationUpdateOperation(new ConfigurationUpdateOperation(new HashMap<String, Object>() {

        {
            put("a", "{configuration:/b}");
            put("b", "{configuration:/c}");
            put("c", "{configuration:/a}");
            put("d", "{configuration:/d}");
        }
    }, new ArrayList<String>())).build();
    DeploymentDocument document = DeploymentDocument.builder().deploymentPackageConfigurationList(Arrays.asList(rootPackageDeploymentConfig)).timestamp(10_000L).build();
    when(componentStore.getPackageRecipe(rootComponentIdentifier)).thenReturn(rootComponentRecipe);
    when(kernel.getMain()).thenReturn(mainService);
    when(mainService.getName()).thenReturn("main");
    when(mainService.getDependencies()).thenReturn(Collections.emptyMap());
    when(deviceConfiguration.getInterpolateComponentConfiguration()).thenReturn(config.lookup("interpolateComponentConfiguration").withValue(true));
    // WHEN
    KernelConfigResolver kernelConfigResolver = new KernelConfigResolver(componentStore, kernel, nucleusPaths, deviceConfiguration);
    Map<String, Object> resolvedConfig = kernelConfigResolver.resolve(packagesToDeploy, document, Arrays.asList(TEST_INPUT_PACKAGE_A));
    // THEN
    Map<String, Object> servicesConfig = (Map<String, Object>) resolvedConfig.get(SERVICES_NAMESPACE_TOPIC);
    assertThat("{configuration:/a} should be replaced with {configuration:/b}", getServiceConfiguration(TEST_INPUT_PACKAGE_A, servicesConfig).get("c"), equalTo("{configuration:/b}"));
    assertThat("{configuration:/b} should be replaced with {configuration:/c}", getServiceConfiguration(TEST_INPUT_PACKAGE_A, servicesConfig).get("a"), equalTo("{configuration:/c}"));
    assertThat("{configuration:/c} should be replaced with {configuration:/a}", getServiceConfiguration(TEST_INPUT_PACKAGE_A, servicesConfig).get("b"), equalTo("{configuration:/a}"));
    assertThat("{configuration:/d} should be unchanged", getServiceConfiguration(TEST_INPUT_PACKAGE_A, servicesConfig).get("d"), equalTo("{configuration:/d}"));
}
Also used : ConfigurationUpdateOperation(com.aws.greengrass.deployment.model.ConfigurationUpdateOperation) DeploymentDocument(com.aws.greengrass.deployment.model.DeploymentDocument) ComponentIdentifier(com.aws.greengrass.componentmanager.models.ComponentIdentifier) Semver(com.vdurmont.semver4j.Semver) DeploymentPackageConfiguration(com.aws.greengrass.deployment.model.DeploymentPackageConfiguration) ComponentRecipe(com.aws.greengrass.componentmanager.models.ComponentRecipe) Map(java.util.Map) HashMap(java.util.HashMap) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 4 with ConfigurationUpdateOperation

use of com.aws.greengrass.deployment.model.ConfigurationUpdateOperation in project aws-greengrass-nucleus by aws-greengrass.

the class KernelConfigResolverTest method GIVEN_deployment_with_artifact_and_interpolate_config_set_WHEN_config_resolution_requested_THEN_inner_level_is_resolved_for_nested_namespace.

@Test
void GIVEN_deployment_with_artifact_and_interpolate_config_set_WHEN_config_resolution_requested_THEN_inner_level_is_resolved_for_nested_namespace() throws Exception {
    // GIVEN
    ComponentIdentifier rootComponentIdentifier = new ComponentIdentifier(TEST_INPUT_PACKAGE_A, new Semver("1.2", Semver.SemverType.NPM));
    List<ComponentIdentifier> packagesToDeploy = Arrays.asList(rootComponentIdentifier);
    ComponentRecipe rootComponentRecipe = new ComponentRecipe(RecipeFormatVersion.JAN_25_2020, TEST_INPUT_PACKAGE_A, rootComponentIdentifier.getVersion(), "", "", null, new HashMap<String, Object>() {

        {
            put(LIFECYCLE_RUN_KEY, "java -jar {configuration:/jarPath}/test.jar -x arg");
        }
    }, Collections.emptyList(), Collections.emptyMap(), null);
    DeploymentPackageConfiguration rootPackageDeploymentConfig = DeploymentPackageConfiguration.builder().packageName(TEST_INPUT_PACKAGE_A).rootComponent(true).resolvedVersion("=1.2").configurationUpdateOperation(new ConfigurationUpdateOperation(new HashMap<String, Object>() {

        {
            put("jarPath", "{artifacts:{randomNameSpace:{artifacts:path}}}");
        }
    }, new ArrayList<>())).build();
    DeploymentDocument document = DeploymentDocument.builder().deploymentPackageConfigurationList(Arrays.asList(rootPackageDeploymentConfig)).timestamp(10_000L).build();
    when(componentStore.getPackageRecipe(rootComponentIdentifier)).thenReturn(rootComponentRecipe);
    when(nucleusPaths.artifactPath(rootComponentIdentifier)).thenReturn(Paths.get("/packages/artifacts"));
    when(kernel.getMain()).thenReturn(mainService);
    when(mainService.getName()).thenReturn("main");
    when(mainService.getDependencies()).thenReturn(Collections.emptyMap());
    when(deviceConfiguration.getInterpolateComponentConfiguration()).thenReturn(config.lookup("interpolateComponentConfiguration").withValue(true));
    // WHEN
    KernelConfigResolver kernelConfigResolver = new KernelConfigResolver(componentStore, kernel, nucleusPaths, deviceConfiguration);
    Map<String, Object> resolvedConfig = kernelConfigResolver.resolve(packagesToDeploy, document, Arrays.asList(TEST_INPUT_PACKAGE_A));
    // THEN
    Map<String, Object> servicesConfig = (Map<String, Object>) resolvedConfig.get(SERVICES_NAMESPACE_TOPIC);
    Path artifactsPath = Paths.get("/packages/artifacts").toAbsolutePath();
    assertThat("{configuration:/jarPath} should be replace by {artifacts:{randomNameSpace:/packages/artifacts}}", getServiceRunCommand(TEST_INPUT_PACKAGE_A, servicesConfig), equalTo("java -jar " + "{artifacts:{randomNameSpace:" + artifactsPath + "}}" + "/test.jar -x arg"));
}
Also used : ConfigurationUpdateOperation(com.aws.greengrass.deployment.model.ConfigurationUpdateOperation) Path(java.nio.file.Path) DeploymentDocument(com.aws.greengrass.deployment.model.DeploymentDocument) ComponentIdentifier(com.aws.greengrass.componentmanager.models.ComponentIdentifier) Semver(com.vdurmont.semver4j.Semver) DeploymentPackageConfiguration(com.aws.greengrass.deployment.model.DeploymentPackageConfiguration) ComponentRecipe(com.aws.greengrass.componentmanager.models.ComponentRecipe) Map(java.util.Map) HashMap(java.util.HashMap) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 5 with ConfigurationUpdateOperation

use of com.aws.greengrass.deployment.model.ConfigurationUpdateOperation in project aws-greengrass-nucleus by aws-greengrass.

the class KernelConfigResolverTest method GIVEN_deployment_with_artifact_and_interpolate_config_set_WHEN_config_resolution_requested_THEN_artifact_path_should_be_interpolated_in_deployment_configuration.

@Test
void GIVEN_deployment_with_artifact_and_interpolate_config_set_WHEN_config_resolution_requested_THEN_artifact_path_should_be_interpolated_in_deployment_configuration() throws Exception {
    // GIVEN
    ComponentIdentifier rootComponentIdentifier = new ComponentIdentifier(TEST_INPUT_PACKAGE_A, new Semver("1.2", Semver.SemverType.NPM));
    List<ComponentIdentifier> packagesToDeploy = Arrays.asList(rootComponentIdentifier);
    ComponentRecipe rootComponentRecipe = new ComponentRecipe(RecipeFormatVersion.JAN_25_2020, TEST_INPUT_PACKAGE_A, rootComponentIdentifier.getVersion(), "", "", null, new HashMap<String, Object>() {

        {
            put(LIFECYCLE_RUN_KEY, "java -jar {configuration:/jarPath}/test.jar -x arg");
        }
    }, Collections.emptyList(), Collections.emptyMap(), null);
    DeploymentPackageConfiguration rootPackageDeploymentConfig = DeploymentPackageConfiguration.builder().packageName(TEST_INPUT_PACKAGE_A).rootComponent(true).resolvedVersion("=1.2").configurationUpdateOperation(new ConfigurationUpdateOperation(new HashMap<String, Object>() {

        {
            put("jarPath", "{artifacts:path}");
        }
    }, new ArrayList<String>())).build();
    DeploymentDocument document = DeploymentDocument.builder().deploymentPackageConfigurationList(Arrays.asList(rootPackageDeploymentConfig)).timestamp(10_000L).build();
    when(componentStore.getPackageRecipe(rootComponentIdentifier)).thenReturn(rootComponentRecipe);
    when(nucleusPaths.artifactPath(rootComponentIdentifier)).thenReturn(Paths.get("/packages/artifacts"));
    when(kernel.getMain()).thenReturn(mainService);
    when(mainService.getName()).thenReturn("main");
    when(mainService.getDependencies()).thenReturn(Collections.emptyMap());
    when(deviceConfiguration.getInterpolateComponentConfiguration()).thenReturn(config.lookup("interpolateComponentConfiguration").withValue(true));
    // WHEN
    KernelConfigResolver kernelConfigResolver = new KernelConfigResolver(componentStore, kernel, nucleusPaths, deviceConfiguration);
    Map<String, Object> resolvedConfig = kernelConfigResolver.resolve(packagesToDeploy, document, Arrays.asList(TEST_INPUT_PACKAGE_A));
    // THEN
    Map<String, Object> servicesConfig = (Map<String, Object>) resolvedConfig.get(SERVICES_NAMESPACE_TOPIC);
    Path jarPath = Paths.get("/packages/artifacts").toAbsolutePath();
    assertThat("{configuration:/jarPath} should be replace by the package's artifact path", getServiceRunCommand(TEST_INPUT_PACKAGE_A, servicesConfig), equalTo("java -jar " + jarPath + "/test.jar -x arg"));
}
Also used : ConfigurationUpdateOperation(com.aws.greengrass.deployment.model.ConfigurationUpdateOperation) Path(java.nio.file.Path) DeploymentDocument(com.aws.greengrass.deployment.model.DeploymentDocument) ComponentIdentifier(com.aws.greengrass.componentmanager.models.ComponentIdentifier) Semver(com.vdurmont.semver4j.Semver) DeploymentPackageConfiguration(com.aws.greengrass.deployment.model.DeploymentPackageConfiguration) ComponentRecipe(com.aws.greengrass.componentmanager.models.ComponentRecipe) Map(java.util.Map) HashMap(java.util.HashMap) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

ConfigurationUpdateOperation (com.aws.greengrass.deployment.model.ConfigurationUpdateOperation)11 DeploymentPackageConfiguration (com.aws.greengrass.deployment.model.DeploymentPackageConfiguration)11 HashMap (java.util.HashMap)11 ComponentRecipe (com.aws.greengrass.componentmanager.models.ComponentRecipe)10 DeploymentDocument (com.aws.greengrass.deployment.model.DeploymentDocument)10 ComponentIdentifier (com.aws.greengrass.componentmanager.models.ComponentIdentifier)9 Semver (com.vdurmont.semver4j.Semver)9 Test (org.junit.jupiter.api.Test)9 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)9 Map (java.util.Map)7 Path (java.nio.file.Path)4 UpdateBehaviorTree (com.aws.greengrass.config.UpdateBehaviorTree)3 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)3 DependencyProperties (com.amazon.aws.iot.greengrass.component.common.DependencyProperties)1 LocalOverrideRequest (com.aws.greengrass.deployment.model.LocalOverrideRequest)1 ArrayList (java.util.ArrayList)1 MethodSource (org.junit.jupiter.params.provider.MethodSource)1 RunWithInfo (software.amazon.awssdk.aws.greengrass.model.RunWithInfo)1 SystemResourceLimits (software.amazon.awssdk.aws.greengrass.model.SystemResourceLimits)1