From 2fd05b9caa2bc2cf49e61fd89ec4016b72756efd Mon Sep 17 00:00:00 2001 From: Gayal Dassanayake Date: Tue, 30 Jan 2024 13:59:52 +0530 Subject: [PATCH] Execute tools at the end of each test case --- .../org/ballerina/projectapi/BalToolTest.java | 226 ++++++++++++++---- .../tool-execute-specific-help-1.0.0.txt | 8 + ...t => tool-execute-specific-help-1.1.0.txt} | 0 .../tool-execute-unknown-cmd-non-existing.txt | 2 + .../cmd-outputs/tool-execute-unknown-cmd.txt | 2 + 5 files changed, 194 insertions(+), 44 deletions(-) create mode 100644 project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help-1.0.0.txt rename project-api-tests/src/test/resources/bal-tool/cmd-outputs/{tool-execute-specific-help.txt => tool-execute-specific-help-1.1.0.txt} (100%) create mode 100644 project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd-non-existing.txt create mode 100644 project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd.txt diff --git a/project-api-tests/src/test/java/org/ballerina/projectapi/BalToolTest.java b/project-api-tests/src/test/java/org/ballerina/projectapi/BalToolTest.java index bbb4fdf8d2..ea8afa1330 100644 --- a/project-api-tests/src/test/java/org/ballerina/projectapi/BalToolTest.java +++ b/project-api-tests/src/test/java/org/ballerina/projectapi/BalToolTest.java @@ -22,6 +22,7 @@ import io.ballerina.projects.BalToolsToml; import io.ballerina.projects.internal.BalToolsManifestBuilder; import io.ballerina.projects.util.ProjectUtils; +import org.apache.commons.lang3.tuple.Pair; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeGroups; @@ -109,7 +110,7 @@ public void testPullToolWithoutVersion() throws IOException, InterruptedExceptio Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in local env + // Check for tool availability in local env BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.PULL).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -127,6 +128,12 @@ public void testPullToolWithoutVersion() throws IOException, InterruptedExceptio if (!Files.exists(toolVersionCachePath)) { Assert.fail("Tool " + toolId + ":" + latestVersion + " is not available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.PULL).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } @Test(description = "Pull tool again without specifying a version", @@ -146,7 +153,7 @@ public void testPullToolAgainWithoutVersion() throws IOException, InterruptedExc Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in local env + // Check for tool availability in local env BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.PULL).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -164,6 +171,12 @@ public void testPullToolAgainWithoutVersion() throws IOException, InterruptedExc if (!Files.exists(toolVersionCachePath)) { Assert.fail("Tool " + toolId + ":" + latestVersion + " is not available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.PULL).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } @Test(description = "Pull tool with a specific version", @@ -185,7 +198,7 @@ public void testPullToolWithASpecificVersion() throws IOException, InterruptedEx Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in local env + // Check for tool availability in local env BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.PULL).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -203,6 +216,12 @@ public void testPullToolWithASpecificVersion() throws IOException, InterruptedEx if (!Files.exists(toolVersionCachePath)) { Assert.fail("Tool " + toolId + ":" + specificVersion + " is not available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.PULL).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } @Test(description = "Pull tool again with a specific version", @@ -224,7 +243,7 @@ public void testPullToolAgainWithASpecificVersion() throws IOException, Interrup Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in local env + // Check for tool availability in local env BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.PULL).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -242,9 +261,16 @@ public void testPullToolAgainWithASpecificVersion() throws IOException, Interrup if (!Files.exists(toolVersionCachePath)) { Assert.fail("Tool " + toolId + ":" + specificVersion + " is not available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.PULL).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } - @Test(description = "Pull tool with a non existing version", groups = {"pull"}) + @Test(description = "Pull tool with a non existing version", + dependsOnMethods = "testPullToolWithASpecificVersion", groups = {"pull"}) public void testPullToolWithANonExistingVersion() throws IOException, InterruptedException { String toolIdAndVersion = toolId + ":" + nonExistingVersion; Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, @@ -256,7 +282,7 @@ public void testPullToolWithANonExistingVersion() throws IOException, Interrupte Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } - // check for tool availability in local env + // Check for tool availability in local env BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.PULL).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getTool(toolId, nonExistingVersion); @@ -269,9 +295,16 @@ public void testPullToolWithANonExistingVersion() throws IOException, Interrupte if (Files.exists(toolVersionCachePath)) { Assert.fail("Tool " + toolId + ":" + nonExistingVersion + " should not be available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.PULL).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } - @Test(description = "Pull a tool version with incompatible distribution", groups = {"pull"}) + @Test(description = "Pull a tool version with incompatible distribution", + dependsOnMethods = "testPullToolWithASpecificVersion", groups = {"pull"}) public void testPullAToolVersionWithIncompatibleDistribution() throws IOException, InterruptedException { String toolIdAndVersion = toolId + ":" + incompatibleDistVersion; Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, @@ -282,19 +315,25 @@ public void testPullAToolVersionWithIncompatibleDistribution() throws IOExceptio if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.PULL).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } - @BeforeGroups(value = "remove", dependsOnGroups = {"pull"}) + @BeforeGroups(value = "remove") public void setupRemoveTests() throws IOException, InterruptedException { - // Pull the latest tool version + // Pull a specific version of a tool + String specificToolVersion = toolId + ":" + specificVersion; executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, - new ArrayList<>(Arrays.asList("pull", toolId)), + new ArrayList<>(Arrays.asList("pull", specificToolVersion)), toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); - // Pull tool version with specific tool version - String specificToolVersion = toolId + ":" + specificVersion; + // Pull the latest tool version executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, - new ArrayList<>(Arrays.asList("pull", specificToolVersion)), + new ArrayList<>(Arrays.asList("pull", toolId)), toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); // Pull tool version with incompatible distribution @@ -303,7 +342,7 @@ public void setupRemoveTests() throws IOException, InterruptedException { new ArrayList<>(Arrays.asList("pull", incompToolVersion)), toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); - // add the dist incompatible version to the toml file + // Add the dist incompatible version to the toml file BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.REMOVE).balToolsTomlPath); BalToolsManifest balToolsManifest = BalToolsManifestBuilder.from(balToolsToml).build(); balToolsManifest.addTool(toolId, orgName, packageName, incompatibleDistVersion, false); @@ -321,6 +360,13 @@ public void testRemoveANonExistingTool() throws IOException, InterruptedExceptio if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + nonExistingTool, toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); + Assert.assertEquals( + outputs.getLeft(), readExpectedCmdOutsAsString("tool-execute-unknown-cmd-non-existing.txt")); + Assert.assertEquals("", outputs.getRight()); } @Test(description = "Remove a non existing version of a tool", groups = {"remove"}) @@ -335,6 +381,12 @@ public void testRemoveANonExistingVersionOfATool() throws IOException, Interrupt if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } @Test(description = "Remove a tool version with incompatible distribution", groups = {"remove"}) @@ -348,11 +400,17 @@ public void testRemoveToolVersionWithIncompatibleDistribution() throws IOExcepti if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } @Test(description = "Remove a tool version with incompatible distribution", groups = {"remove"}) public void testRemoveToolActiveVersion() throws IOException, InterruptedException { - // make the latest version active + // Make the latest version active BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.REMOVE).balToolsTomlPath); BalToolsManifest balToolsManifest = BalToolsManifestBuilder.from(balToolsToml).build(); balToolsManifest.setActiveToolVersion(toolId, latestVersion); @@ -367,11 +425,20 @@ public void testRemoveToolActiveVersion() throws IOException, InterruptedExcepti if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } - @Test(description = "Remove a specific tool version", groups = {"remove"}) + @Test(description = "Remove a specific tool version", + dependsOnMethods = {"testRemoveANonExistingVersionOfATool", + "testRemoveToolVersionWithIncompatibleDistribution", "testRemoveToolActiveVersion"}, + groups = {"remove"}) public void testRemoveASpecificToolVersion() throws IOException, InterruptedException { - // make the latest version active + // Make the latest version active BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.REMOVE).balToolsTomlPath); BalToolsManifest balToolsManifest = BalToolsManifestBuilder.from(balToolsToml).build(); balToolsManifest.setActiveToolVersion(toolId, latestVersion); @@ -379,7 +446,7 @@ public void testRemoveASpecificToolVersion() throws IOException, InterruptedExce String toolIdAndVersion = toolId + ":" + specificVersion; - // check for tool availability in local env + // Check for tool availability in local env Optional toolOpt = balToolsManifest.getTool(toolId, specificVersion); if (toolOpt.isEmpty()) { Assert.fail("Tool '" + toolIdAndVersion + "' is not available to be removed"); @@ -400,7 +467,7 @@ public void testRemoveASpecificToolVersion() throws IOException, InterruptedExce Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in local env + // Check for tool availability in local env balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.REMOVE).balToolsTomlPath); toolOpt = BalToolsManifestBuilder.from(balToolsToml).build().getTool(toolId, specificVersion); if (toolOpt.isPresent()) { @@ -412,13 +479,18 @@ public void testRemoveASpecificToolVersion() throws IOException, InterruptedExce if (Files.exists(toolVersionCachePath)) { Assert.fail("Tool '" + toolIdAndVersion + "' is available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } - @Test(description = "Remove all tool versions", - dependsOnMethods = {"testRemoveASpecificToolVersion", "testRemoveToolVersionWithIncompatibleDistribution"}, + @Test(description = "Remove all tool versions", dependsOnMethods = {"testRemoveASpecificToolVersion"}, groups = {"remove"}) public void testRemoveAllToolVersions() throws IOException, InterruptedException { - // check for tool availability in local env + // Check for tool availability in local env BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.REMOVE).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -441,7 +513,7 @@ public void testRemoveAllToolVersions() throws IOException, InterruptedException Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in local env + // Check for tool availability in local env balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.REMOVE).balToolsTomlPath); toolOpt = BalToolsManifestBuilder.from(balToolsToml).build().getActiveTool(toolId); if (toolOpt.isPresent()) { @@ -453,17 +525,23 @@ public void testRemoveAllToolVersions() throws IOException, InterruptedException if (Files.exists(toolVersionCachePath)) { Assert.fail("Tool '" + toolId + "' is available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.REMOVE).envVariables); + Assert.assertEquals(outputs.getLeft(), readExpectedCmdOutsAsString("tool-execute-unknown-cmd.txt")); + Assert.assertEquals("", outputs.getRight()); } - @BeforeGroups(value = "update", dependsOnGroups = {"remove"}) + @BeforeGroups(value = "update") public void setupUpdateTests() throws IOException, InterruptedException { - // remove all versions of the tool + // Remove all versions of the tool Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("remove", toolId)), toolEnvironments.get(ToolSubCommand.UPDATE).envVariables); getString(cmdExec.getErrorStream()); - // pull an older version of the tool + // Pull an older version of the tool String toolIdAndVersion = toolId + ":" + specificVersion; executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("pull", toolIdAndVersion)), @@ -481,18 +559,25 @@ public void testUpdateNonExistingTool() throws IOException, InterruptedException Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } - // check for tool availability in bal-tools.toml + // Check for tool availability in bal-tools.toml BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.UPDATE).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(nonExistingTool); if (toolOpt.isPresent()) { Assert.fail("Tool " + nonExistingTool + " should not be available in bal-tools.toml"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + nonExistingTool, toolEnvironments.get(ToolSubCommand.UPDATE).envVariables); + Assert.assertEquals( + outputs.getLeft(), readExpectedCmdOutsAsString("tool-execute-unknown-cmd-non-existing.txt")); + Assert.assertEquals("", outputs.getRight()); } @Test(description = "Update a tool with new patch and minor versions", groups = {"update"}) public void testUpdateToolWithNewPatchAndMinor() throws IOException, InterruptedException { - // check for tool availability in bal-tools.toml + // Check for tool availability in bal-tools.toml BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.UPDATE).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -518,7 +603,7 @@ public void testUpdateToolWithNewPatchAndMinor() throws IOException, Interrupted Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in bal-tools.toml + // Check for tool availability in bal-tools.toml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.UPDATE).balToolsTomlPath); toolOpt = BalToolsManifestBuilder.from(balToolsToml).build().getActiveTool(toolId); toolIdAndVersion = toolId + ":" + latestVersion; @@ -526,18 +611,24 @@ public void testUpdateToolWithNewPatchAndMinor() throws IOException, Interrupted Assert.fail("Tool '" + toolIdAndVersion + "' is not available in bal-tools.toml"); } - // check for tool availability in local env + // Check for tool availability in local env Path toolVersionCachePath = toolEnvironments.get(ToolSubCommand.UPDATE).centralCachePath .resolve(Path.of(orgName, packageName, latestVersion)); if (!Files.exists(toolVersionCachePath)) { Assert.fail("Tool '" + toolIdAndVersion + "' is not available in local cache"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.UPDATE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } @Test(description = "Update a tool with no new versions", dependsOnMethods = {"testUpdateToolWithNewPatchAndMinor"}, groups = {"update"}) public void testUpdateToolWithNoNewVersions() throws IOException, InterruptedException { - // check for tool availability in bal-tools.toml + // Check for tool availability in bal-tools.toml BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.UPDATE).balToolsTomlPath); Optional toolOpt = BalToolsManifestBuilder.from(balToolsToml).build() .getActiveTool(toolId); @@ -562,22 +653,28 @@ public void testUpdateToolWithNoNewVersions() throws IOException, InterruptedExc Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } - // check for tool availability in bal-tools.toml + // Check for tool availability in bal-tools.toml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.UPDATE).balToolsTomlPath); toolOpt = BalToolsManifestBuilder.from(balToolsToml).build().getActiveTool(toolId); toolIdAndVersion = toolId + ":" + latestVersion; if (toolOpt.isEmpty()) { Assert.fail("Tool '" + toolIdAndVersion + "' is not available in bal-tools.toml"); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.UPDATE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } - @BeforeGroups(value = "use", dependsOnGroups = {"update"}) + @BeforeGroups(value = "use") public void setupUseTests() throws IOException, InterruptedException { // Pull the latest tool version executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("pull", toolId)), toolEnvironments.get(ToolSubCommand.USE).envVariables); - // Pull tool version with specific tool version + // Pull a specific version of a tool String specificToolVersion = toolId + ":" + specificVersion; executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("pull", specificToolVersion)), @@ -589,7 +686,7 @@ public void setupUseTests() throws IOException, InterruptedException { new ArrayList<>(Arrays.asList("pull", incompToolVersion)), toolEnvironments.get(ToolSubCommand.USE).envVariables); - // add the dist incompatible version to the toml file + // Add the dist incompatible version to the toml file BalToolsToml balToolsToml = BalToolsToml.from(toolEnvironments.get(ToolSubCommand.USE).balToolsTomlPath); BalToolsManifest balToolsManifest = BalToolsManifestBuilder.from(balToolsToml).build(); balToolsManifest.addTool(toolId, orgName, packageName, incompatibleDistVersion, false); @@ -613,6 +710,12 @@ public void testUseNewToolVersion() throws IOException, InterruptedException { if (!cmdOutput.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.USE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt")); } @Test(description = "Use a newer tool version", dependsOnMethods = {"testUseNewToolVersion"}, groups = {"use"}) @@ -632,6 +735,12 @@ public void testUseOldToolVersion() throws IOException, InterruptedException { if (!cmdOutput.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.USE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } @Test(description = "Use the currently active tool version", @@ -653,9 +762,16 @@ public void testUseCurrentlyActiveToolVersion() throws IOException, InterruptedE if (!cmdOutput.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.USE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } - @Test(description = "Use a non existent tool version", groups = {"use"}) + @Test(description = "Use a non existent tool version", dependsOnMethods = {"testUseCurrentlyActiveToolVersion"}, + groups = {"use"}) public void testUseNonExistentToolVersion() throws IOException, InterruptedException { String toolIdAndVersion = toolId + ":" + nonExistingVersion; Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, @@ -667,9 +783,16 @@ public void testUseNonExistentToolVersion() throws IOException, InterruptedExcep if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.USE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } - @Test(description = "Use a tool version built with incompatible distribution", groups = {"use"}) + @Test(description = "Use a tool version built with incompatible distribution", + dependsOnMethods = "testUseNonExistentToolVersion", groups = {"use"}) public void testUseToolVersionWithIncompatibleDistribution() throws IOException, InterruptedException { String toolIdAndVersion = toolId + ":" + incompatibleDistVersion; Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, @@ -681,16 +804,22 @@ public void testUseToolVersionWithIncompatibleDistribution() throws IOException, if (!cmdErrors.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdErrors); } + + // Execute the tool + Pair outputs = executeHelpFlagOfTool( + toolId, toolEnvironments.get(ToolSubCommand.USE).envVariables); + Assert.assertEquals("", outputs.getLeft()); + Assert.assertEquals(outputs.getRight(), readExpectedCmdOutsAsString("tool-execute-specific-help-1.0.0.txt")); } @Test(description = "List all tools when there are no tools", groups = {"list"}) public void testListToolsWhenNoToolsInstalled() throws IOException, InterruptedException { - // remove the tool entirely + // Remove the tool entirely executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("remove", toolId)), toolEnvironments.get(ToolSubCommand.LIST).envVariables); - // list all tools + // List all tools Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(List.of("list")), toolEnvironments.get(ToolSubCommand.LIST).envVariables); String cmdErrors = getString(cmdExec.getErrorStream()); @@ -712,13 +841,13 @@ public void testListToolsWithMultipleToolVersions() throws IOException, Interrup executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("pull", toolId)), toolEnvironments.get(ToolSubCommand.LIST).envVariables); - // Pull tool version with specific tool version + // Pull a specific version of a tool String specificToolVersion = toolId + ":" + specificVersion; executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("pull", specificToolVersion)), toolEnvironments.get(ToolSubCommand.LIST).envVariables); - // list all tools + // List all tools Process cmdExec = executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(List.of("list")), toolEnvironments.get(ToolSubCommand.LIST).envVariables); String cmdErrors = getString(cmdExec.getErrorStream()); @@ -752,9 +881,9 @@ public void testSearchAToolWithId() throws IOException, InterruptedException { } } - @BeforeGroups(value = "execute_tool", dependsOnGroups = {"use"}) + @BeforeGroups(value = "execute_tool") public void setupExecuteToolTests() throws IOException, InterruptedException { - // Pull tool version with specific tool version + // Pull a specific version of a tool String specificToolVersion = toolId + ":" + specificVersion; executeToolCommand(DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, new ArrayList<>(Arrays.asList("pull", specificToolVersion)), @@ -794,7 +923,7 @@ public void testExecuteToolSpecificHelpWithToolInstalled() throws IOException, I // Validate the command output String cmdOutput = getString(cmdExec.getInputStream()); - String expectedOutput = readExpectedCmdOutsAsString("tool-execute-specific-help.txt"); + String expectedOutput = readExpectedCmdOutsAsString("tool-execute-specific-help-1.1.0.txt"); if (!cmdOutput.contains(expectedOutput)) { Assert.fail(OUTPUT_NOT_CONTAINS_EXP_MSG + expectedOutput + "\nactual output:" + cmdOutput); } @@ -839,6 +968,15 @@ private void setToolEnvironmentsForSubCommands() { toolEnvironment -> toolEnvironment.subCommand, toolEnvironment -> toolEnvironment)); } + private Pair executeHelpFlagOfTool(String toolId, Map envVariables) + throws IOException, InterruptedException { + Process cmdExec = executeCommand(toolId, DISTRIBUTION_FILE_NAME, tempWorkspaceDirectory, + new ArrayList<>(List.of("--help")), envVariables); + String cmdErrors = getString(cmdExec.getErrorStream()); + String cmdOutput = getString(cmdExec.getInputStream()); + return Pair.of(cmdErrors, cmdOutput); + } + private ToolEnvironment getToolEnvironment(ToolSubCommand subCommand) throws IOException { Path tempHomeDirectory = Files.createTempDirectory("bal-test-integration-packaging-home-"); Map envVariables = TestUtils.addEnvVariables(getEnvVariables(), diff --git a/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help-1.0.0.txt b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help-1.0.0.txt new file mode 100644 index 0000000000..2e74f9da4d --- /dev/null +++ b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help-1.0.0.txt @@ -0,0 +1,8 @@ +Sample tool used for testing the bal tools in ballerina distribution tests. +bal disttest + +--args-- + + The argument to be printed. + +version: 1.0.0 \ No newline at end of file diff --git a/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help.txt b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help-1.1.0.txt similarity index 100% rename from project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help.txt rename to project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-specific-help-1.1.0.txt diff --git a/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd-non-existing.txt b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd-non-existing.txt new file mode 100644 index 0000000000..6947fc71ba --- /dev/null +++ b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd-non-existing.txt @@ -0,0 +1,2 @@ +ballerina: unknown command 'disttest2' +Run 'bal help' for usage. \ No newline at end of file diff --git a/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd.txt b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd.txt new file mode 100644 index 0000000000..683c287ca2 --- /dev/null +++ b/project-api-tests/src/test/resources/bal-tool/cmd-outputs/tool-execute-unknown-cmd.txt @@ -0,0 +1,2 @@ +ballerina: unknown command 'disttest' +Run 'bal help' for usage. \ No newline at end of file