From 211a00e0cc40bd3b2c5db63a6845f42c80dde050 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Fri, 28 Feb 2025 14:58:58 +0100 Subject: [PATCH 1/7] #298: refactoring setting environment variables --- .../com/devonfw/tools/ide/tool/aws/Aws.java | 20 ++++++++++--------- .../com/devonfw/tools/ide/tool/az/Azure.java | 16 ++++++++------- .../tools/ide/tool/graalvm/GraalVm.java | 16 ++++++++------- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/aws/Aws.java b/cli/src/main/java/com/devonfw/tools/ide/tool/aws/Aws.java index 8094ca241..3c88c0bd7 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/aws/Aws.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/aws/Aws.java @@ -6,12 +6,12 @@ import com.devonfw.tools.ide.common.Tag; import com.devonfw.tools.ide.context.IdeContext; -import com.devonfw.tools.ide.environment.EnvironmentVariables; -import com.devonfw.tools.ide.environment.EnvironmentVariablesType; import com.devonfw.tools.ide.io.FileAccess; import com.devonfw.tools.ide.nls.NlsBundle; +import com.devonfw.tools.ide.process.EnvironmentContext; import com.devonfw.tools.ide.process.ProcessContext; import com.devonfw.tools.ide.tool.LocalToolCommandlet; +import com.devonfw.tools.ide.tool.ToolInstallation; /** * {@link LocalToolCommandlet} for AWS CLI (Amazon Web Services Command Line Interface). @@ -32,15 +32,8 @@ public Aws(IdeContext context) { public void postInstall() { super.postInstall(); - EnvironmentVariables variables = this.context.getVariables(); - EnvironmentVariables typeVariables = variables.getByType(EnvironmentVariablesType.CONF); Path awsConfigDir = this.context.getConfPath().resolve("aws"); this.context.getFileAccess().mkdirs(awsConfigDir); - Path awsConfigFile = awsConfigDir.resolve("config"); - Path awsCredentialsFile = awsConfigDir.resolve("credentials"); - typeVariables.set("AWS_CONFIG_FILE", awsConfigFile.toString(), true); - typeVariables.set("AWS_SHARED_CREDENTIALS_FILE", awsCredentialsFile.toString(), true); - typeVariables.save(); } @Override @@ -78,4 +71,13 @@ public void printHelp(NlsBundle bundle) { this.context.info("To get detailed help about the usage of the AWS CLI, use \"aws help\""); } + @Override + public void setEnvironment(EnvironmentContext environmentContext, ToolInstallation toolInstallation, boolean extraInstallation) { + + super.setEnvironment(environmentContext, toolInstallation, extraInstallation); + Path awsConfigDir = this.context.getConfPath().resolve("aws"); + environmentContext.withEnvVar("AWS_CONFIG_FILE", awsConfigDir.resolve("config").toString()); + environmentContext.withEnvVar("AWS_SHARED_CREDENTIALS_FILE", awsConfigDir.resolve("credentials").toString()); + } + } diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/az/Azure.java b/cli/src/main/java/com/devonfw/tools/ide/tool/az/Azure.java index 71ee8e453..574c4303f 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/az/Azure.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/az/Azure.java @@ -5,10 +5,10 @@ import com.devonfw.tools.ide.common.Tag; import com.devonfw.tools.ide.context.IdeContext; -import com.devonfw.tools.ide.environment.EnvironmentVariables; -import com.devonfw.tools.ide.environment.EnvironmentVariablesType; +import com.devonfw.tools.ide.process.EnvironmentContext; import com.devonfw.tools.ide.tool.LocalToolCommandlet; import com.devonfw.tools.ide.tool.ToolCommandlet; +import com.devonfw.tools.ide.tool.ToolInstallation; /** * {@link ToolCommandlet} for azure CLI (azure). @@ -30,11 +30,6 @@ public Azure(IdeContext context) { public void postInstall() { super.postInstall(); - - EnvironmentVariables variables = this.context.getVariables(); - EnvironmentVariables typeVariables = variables.getByType(EnvironmentVariablesType.CONF); - typeVariables.set("AZURE_CONFIG_DIR", this.context.getConfPath().resolve(".azure").toString(), true); - typeVariables.save(); this.context.getFileAccess().symlink(Path.of("wbin"), getToolPath().resolve("bin")); } @@ -43,4 +38,11 @@ public String getToolHelpArguments() { return "-h"; } + + @Override + public void setEnvironment(EnvironmentContext environmentContext, ToolInstallation toolInstallation, boolean extraInstallation) { + + super.setEnvironment(environmentContext, toolInstallation, extraInstallation); + environmentContext.withEnvVar("AZURE_CONFIG_DIR", this.context.getConfPath().resolve(".azure").toString()); + } } diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java b/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java index 79161677f..ec7e6f466 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java @@ -5,11 +5,9 @@ import com.devonfw.tools.ide.common.Tag; import com.devonfw.tools.ide.context.IdeContext; -import com.devonfw.tools.ide.environment.EnvironmentVariables; -import com.devonfw.tools.ide.environment.EnvironmentVariablesType; +import com.devonfw.tools.ide.process.EnvironmentContext; import com.devonfw.tools.ide.tool.LocalToolCommandlet; -import com.devonfw.tools.ide.tool.ToolCommandlet; -import com.devonfw.tools.ide.tool.plugin.PluginBasedCommandlet; +import com.devonfw.tools.ide.tool.ToolInstallation; import com.devonfw.tools.ide.version.VersionIdentifier; /** @@ -48,10 +46,14 @@ protected String getBinaryName() { @Override public void postInstall() { - EnvironmentVariables envVars = this.context.getVariables().getByType(EnvironmentVariablesType.CONF); - envVars.set("GRAALVM_HOME", getToolPath().toString(), true); - envVars.save(); super.postInstall(); } + @Override + public void setEnvironment(EnvironmentContext environmentContext, ToolInstallation toolInstallation, boolean extraInstallation) { + + super.setEnvironment(environmentContext, toolInstallation, extraInstallation); + environmentContext.withEnvVar("GRAALVM_HOME", getToolPath().toString()); + } + } From c20a4472a2dc3125822d07aabce5e95569ffcb17 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Mon, 3 Mar 2025 11:13:32 +0100 Subject: [PATCH 2/7] #298: remove unnecessary setting of environment variable for graalvm --- .../java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java b/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java index ec7e6f466..1986a21f2 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java @@ -5,9 +5,7 @@ import com.devonfw.tools.ide.common.Tag; import com.devonfw.tools.ide.context.IdeContext; -import com.devonfw.tools.ide.process.EnvironmentContext; import com.devonfw.tools.ide.tool.LocalToolCommandlet; -import com.devonfw.tools.ide.tool.ToolInstallation; import com.devonfw.tools.ide.version.VersionIdentifier; /** @@ -49,11 +47,4 @@ public void postInstall() { super.postInstall(); } - @Override - public void setEnvironment(EnvironmentContext environmentContext, ToolInstallation toolInstallation, boolean extraInstallation) { - - super.setEnvironment(environmentContext, toolInstallation, extraInstallation); - environmentContext.withEnvVar("GRAALVM_HOME", getToolPath().toString()); - } - } From 9dc3fbee97330e8bae17c6deeff829681fc6cdc9 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Wed, 5 Mar 2025 09:35:19 +0100 Subject: [PATCH 3/7] #298: remove unnecessary override of method --- .../java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java b/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java index 1986a21f2..266b4cd6b 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/graalvm/GraalVm.java @@ -41,10 +41,4 @@ protected String getBinaryName() { return "java"; } - @Override - public void postInstall() { - - super.postInstall(); - } - } From 98733bf5c64094486b7f39ca226c356df42e7e36 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Thu, 6 Mar 2025 13:36:24 +0100 Subject: [PATCH 4/7] #298: add tests for Aws --- cli/awstest | 1 + .../devonfw/tools/ide/tool/aws/AwsTest.java | 115 ++++++++++++++++++ .../aws/project/settings/ide.properties | 1 + .../aws/project/workspaces/main/.gitkeep | 0 .../repository/aws/aws/default/linux/install | 6 + .../default/mac/Aws.app/Contents/MacOS/aws | 6 + .../aws/aws/default/windows/bin/aws.exe | 4 + .../aws/urls/aws/aws/2.24.15/urls | 1 + 8 files changed, 134 insertions(+) create mode 100644 cli/awstest create mode 100644 cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java create mode 100644 cli/src/test/resources/ide-projects/aws/project/settings/ide.properties create mode 100644 cli/src/test/resources/ide-projects/aws/project/workspaces/main/.gitkeep create mode 100644 cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install create mode 100644 cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/mac/Aws.app/Contents/MacOS/aws create mode 100644 cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/windows/bin/aws.exe create mode 100644 cli/src/test/resources/ide-projects/aws/urls/aws/aws/2.24.15/urls diff --git a/cli/awstest b/cli/awstest new file mode 100644 index 000000000..5630d951d --- /dev/null +++ b/cli/awstest @@ -0,0 +1 @@ +aws linux -i C:\projects\IDEasy\workspaces\main\IDEasy\cli\target\test-projects\aws\_ide\software\default\aws\aws\2.24.15 -b C:\projects\IDEasy\workspaces\main\IDEasy\cli\target\test-projects\aws\_ide\software\default\aws\aws\2.24.15 diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java new file mode 100644 index 000000000..47cffa9be --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java @@ -0,0 +1,115 @@ +package com.devonfw.tools.ide.tool.aws; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import com.devonfw.tools.ide.commandlet.EnvironmentCommandlet; +import com.devonfw.tools.ide.commandlet.HelpCommandlet; +import com.devonfw.tools.ide.common.Tag; +import com.devonfw.tools.ide.context.AbstractIdeContextTest; +import com.devonfw.tools.ide.context.IdeTestContext; +import com.devonfw.tools.ide.log.IdeLogEntry; +import com.devonfw.tools.ide.nls.NlsBundle; +import com.devonfw.tools.ide.os.SystemInfo; +import com.devonfw.tools.ide.os.SystemInfoMock; + +/** + * Integration test of {@link Aws}. + */ +public class AwsTest extends AbstractIdeContextTest { + + private static final String PROJECT_AWS = "aws"; + private final IdeTestContext context = newContext(PROJECT_AWS); + + /** + * Tests if the {@link Aws} can be installed properly. + * + * @param os String of the OS to use. + */ + @ParameterizedTest + @ValueSource(strings = { "windows", "mac" }) + public void testAwsInstall(String os) { + + // arrange + SystemInfo systemInfo = SystemInfoMock.of(os); + context.setSystemInfo(systemInfo); + Aws awsCommandlet = new Aws(context); + + // act + awsCommandlet.install(); + + // assert + checkInstallation(context); + assertThat(awsCommandlet.getName()).isEqualTo(PROJECT_AWS); + assertThat(awsCommandlet.getTags()).containsExactly(Tag.CLOUD); + + //if tool already installed + awsCommandlet.install(); + assertThat(context).logAtDebug().hasMessageContaining("Version 2.24.15 of tool aws is already installed"); + } + + /** + * Tests if the environment variables are correctly set after {@link Aws} is installed. + */ + @Test + public void testAwsSetEnvironment() { + + // arrange + Aws awsCommandlet = new Aws(context); + EnvironmentCommandlet envCommandlet = new EnvironmentCommandlet(context); + + // act + awsCommandlet.install(); + envCommandlet.run(); + + // assert + assertThat(context).log().hasEntries( // + IdeLogEntry.ofProcessable("AWS_CONFIG_FILE=" + context.getConfPath().resolve(PROJECT_AWS).resolve("config")), // + IdeLogEntry.ofProcessable("AWS_SHARED_CREDENTIALS_FILE=" + context.getConfPath().resolve(PROJECT_AWS).resolve("credentials")) + ); + } + + /** + * Tests if the output of {@link Aws#printHelp(NlsBundle)} is correct. + */ + @Test + public void testAwsPrintHelp() { + + // arrange + HelpCommandlet helpCommandlet = new HelpCommandlet(context); + helpCommandlet.commandlet.setValueAsString(PROJECT_AWS, context); + + // act + helpCommandlet.run(); + + // assert + assertThat(context).logAtInfo() + .hasMessage("To get detailed help about the usage of the AWS CLI, use \"aws help\""); + } + + private void checkInstallation(IdeTestContext context) { + + assertThat(context.getSoftwarePath().resolve("aws/.ide.software.version")).exists().hasContent("2.24.15"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed aws in version 2.24.15"); + assertThat(context.getConfPath().resolve(PROJECT_AWS)).exists(); + } + + + @Disabled + @Test + public void testAwsInstallLinux() { + + // arrange + context.setSystemInfo(SystemInfoMock.of("linux")); + Aws awsCommandlet = new Aws(context); + + // act + awsCommandlet.install(); + + // assert + checkInstallation(context); + } + +} diff --git a/cli/src/test/resources/ide-projects/aws/project/settings/ide.properties b/cli/src/test/resources/ide-projects/aws/project/settings/ide.properties new file mode 100644 index 000000000..4ea2163cd --- /dev/null +++ b/cli/src/test/resources/ide-projects/aws/project/settings/ide.properties @@ -0,0 +1 @@ +AWS_VERSION=2.24.15 diff --git a/cli/src/test/resources/ide-projects/aws/project/workspaces/main/.gitkeep b/cli/src/test/resources/ide-projects/aws/project/workspaces/main/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install new file mode 100644 index 000000000..cb203f652 --- /dev/null +++ b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install @@ -0,0 +1,6 @@ +#!/bin/bash +cd "$(dirname "$0")" +echo $PWD +echo "aws linux $*" +echo "aws linux $*" > awstest + diff --git a/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/mac/Aws.app/Contents/MacOS/aws b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/mac/Aws.app/Contents/MacOS/aws new file mode 100644 index 000000000..198df27a8 --- /dev/null +++ b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/mac/Aws.app/Contents/MacOS/aws @@ -0,0 +1,6 @@ +#!/bin/bash +cd "$(dirname "$0")" +echo "aws mac $*" > awstest + + + diff --git a/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/windows/bin/aws.exe b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/windows/bin/aws.exe new file mode 100644 index 000000000..0179264d2 --- /dev/null +++ b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/windows/bin/aws.exe @@ -0,0 +1,4 @@ +#!/bin/bash +cd "$(dirname "$0")" +echo "aws windows $*" > awstest + diff --git a/cli/src/test/resources/ide-projects/aws/urls/aws/aws/2.24.15/urls b/cli/src/test/resources/ide-projects/aws/urls/aws/aws/2.24.15/urls new file mode 100644 index 000000000..aa798a116 --- /dev/null +++ b/cli/src/test/resources/ide-projects/aws/urls/aws/aws/2.24.15/urls @@ -0,0 +1 @@ +${testbaseurl}/download/aws/aws/2.24.15/aws-2.24.15.tgz From 7060bf6b5f95ef195d1a1a45cdd988f219012a35 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Thu, 6 Mar 2025 13:47:53 +0100 Subject: [PATCH 5/7] #298: add execute permissions for linux install script --- .../ide-projects/aws/repository/aws/aws/default/linux/install | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install diff --git a/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install b/cli/src/test/resources/ide-projects/aws/repository/aws/aws/default/linux/install old mode 100644 new mode 100755 From 8b871879ae297491854907f851c94f8ec6a70561 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Thu, 6 Mar 2025 15:04:26 +0100 Subject: [PATCH 6/7] #298: remove disabled test --- .../com/devonfw/tools/ide/tool/aws/AwsTest.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java index 47cffa9be..e5c3e6110 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java @@ -1,6 +1,5 @@ package com.devonfw.tools.ide.tool.aws; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -96,20 +95,4 @@ private void checkInstallation(IdeTestContext context) { assertThat(context.getConfPath().resolve(PROJECT_AWS)).exists(); } - - @Disabled - @Test - public void testAwsInstallLinux() { - - // arrange - context.setSystemInfo(SystemInfoMock.of("linux")); - Aws awsCommandlet = new Aws(context); - - // act - awsCommandlet.install(); - - // assert - checkInstallation(context); - } - } From 0f7ef84b8c6571d83c30e593f73cb2db15c656a9 Mon Sep 17 00:00:00 2001 From: paz-capgemini Date: Thu, 6 Mar 2025 15:31:12 +0100 Subject: [PATCH 7/7] #298: fix test --- .../devonfw/tools/ide/tool/aws/AwsTest.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java index e5c3e6110..333800666 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/aws/AwsTest.java @@ -51,11 +51,16 @@ public void testAwsInstall(String os) { /** * Tests if the environment variables are correctly set after {@link Aws} is installed. + * + * @param os String of the OS to use. */ - @Test - public void testAwsSetEnvironment() { + @ParameterizedTest + @ValueSource(strings = { "windows", "mac" }) + public void testAwsSetEnvironment(String os) { // arrange + SystemInfo systemInfo = SystemInfoMock.of(os); + context.setSystemInfo(systemInfo); Aws awsCommandlet = new Aws(context); EnvironmentCommandlet envCommandlet = new EnvironmentCommandlet(context); @@ -64,10 +69,18 @@ public void testAwsSetEnvironment() { envCommandlet.run(); // assert - assertThat(context).log().hasEntries( // - IdeLogEntry.ofProcessable("AWS_CONFIG_FILE=" + context.getConfPath().resolve(PROJECT_AWS).resolve("config")), // - IdeLogEntry.ofProcessable("AWS_SHARED_CREDENTIALS_FILE=" + context.getConfPath().resolve(PROJECT_AWS).resolve("credentials")) - ); + if (os.equals("mac")) { + assertThat(context).log().hasEntries( + IdeLogEntry.ofProcessable("export AWS_CONFIG_FILE=\"" + context.getConfPath().resolve(PROJECT_AWS).resolve("config") + "\""), // + IdeLogEntry.ofProcessable("export AWS_SHARED_CREDENTIALS_FILE=\"" + context.getConfPath().resolve(PROJECT_AWS).resolve("credentials") + "\"") + ); + } else { + assertThat(context).log().hasEntries( + IdeLogEntry.ofProcessable("AWS_CONFIG_FILE=" + context.getConfPath().resolve(PROJECT_AWS).resolve("config")), // + IdeLogEntry.ofProcessable("AWS_SHARED_CREDENTIALS_FILE=" + context.getConfPath().resolve(PROJECT_AWS).resolve("credentials")) + ); + } + } /**