From e992386d00c8c49f1b4b6bf663892ce17879d5ce Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Tue, 4 Feb 2025 16:36:46 -0800 Subject: [PATCH 1/5] Add version switch to allow tools to easily check what version of the tool is installed. --- .../efa829ed-59af-46eb-a5e5-ef471698c82d.json | 11 +++++++++++ .../Commands/RunCommand.cs | 16 ++++++++++++++++ .../Commands/Settings/RunCommandSettings.cs | 7 +++++++ 3 files changed, 34 insertions(+) create mode 100644 .autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json diff --git a/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json b/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json new file mode 100644 index 000000000..fc85c1bee --- /dev/null +++ b/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json @@ -0,0 +1,11 @@ +{ + "Projects": [ + { + "Name": "Amazon.Lambda.TestTool", + "Type": "Patch", + "ChangelogMessages": [ + "Add --version switch to allow integrators to check what version is installed" + ] + } + ] +} \ No newline at end of file diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs index 2dd4395c7..21477c385 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 using System.Diagnostics; +using System.Text.Json; using Amazon.Lambda.TestTool.Commands.Settings; using Amazon.Lambda.TestTool.Extensions; using Amazon.Lambda.TestTool.Models; @@ -28,6 +29,12 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS { try { + if (settings.PrintVersionInfo) + { + PrintVersionInfo(); + return CommandReturnCodes.Success; + } + EvaluateEnvironmentVariables(settings); if (!settings.LambdaEmulatorPort.HasValue && !settings.ApiGatewayEmulatorPort.HasValue) @@ -101,6 +108,15 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS } } + private void PrintVersionInfo() + { + Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(Console.OpenStandardOutput()); + utf8JsonWriter.WriteStartObject(); + utf8JsonWriter.WriteString("version", Utilities.Utils.DetermineToolVersion()); + utf8JsonWriter.WriteEndObject(); + utf8JsonWriter.Flush(); + } + private void EvaluateEnvironmentVariables(RunCommandSettings settings) { var environmentVariables = environmentManager.GetEnvironmentVariables(); diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs index aac0bccb9..f7c010f38 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs @@ -69,4 +69,11 @@ public sealed class RunCommandSettings : CommandSettings [CommandOption("--api-gateway-emulator-port ")] [Description("The port number used for the test tool's API Gateway emulator.")] public int? ApiGatewayEmulatorPort { get; set; } + + /// + /// When set the tool prints version information as a JSON document and then exits. + /// + [CommandOption("--version")] + [Description("When set the tool prints version information as a JSON document and then exits.")] + public bool PrintVersionInfo { get; set; } } From 0885b62fa6c7d5eaca932ab64eaa6013da2a518c Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Tue, 4 Feb 2025 18:20:30 -0800 Subject: [PATCH 2/5] Add unit test --- .../Commands/RunCommand.cs | 6 +--- .../Amazon.Lambda.TestTool/Utilities/Utils.cs | 18 +++++++++- .../Commands/RunCommandTests.cs | 34 +++++++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs index 21477c385..a9c0ca69a 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs @@ -110,11 +110,7 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS private void PrintVersionInfo() { - Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(Console.OpenStandardOutput()); - utf8JsonWriter.WriteStartObject(); - utf8JsonWriter.WriteString("version", Utilities.Utils.DetermineToolVersion()); - utf8JsonWriter.WriteEndObject(); - utf8JsonWriter.Flush(); + toolInteractiveService.WriteLine(Utilities.Utils.GenerateVersionJson()); } private void EvaluateEnvironmentVariables(RunCommandSettings settings) diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs index ead444dd3..3e124cc2e 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs @@ -21,7 +21,7 @@ public static string DetermineToolVersion() AssemblyInformationalVersionAttribute? attribute = null; try { - var assembly = Assembly.GetEntryAssembly(); + var assembly = typeof(Utils).Assembly; if (assembly == null) return unknownVersion; attribute = assembly.GetCustomAttribute(); @@ -42,6 +42,22 @@ public static string DetermineToolVersion() return version ?? unknownVersion; } + public static string GenerateVersionJson() + { + var stream = new MemoryStream(); + Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(stream, options: new JsonWriterOptions() + { + Indented = false + }); + utf8JsonWriter.WriteStartObject(); + utf8JsonWriter.WriteString("version", Utilities.Utils.DetermineToolVersion()); + utf8JsonWriter.WriteEndObject(); + utf8JsonWriter.Flush(); + + stream.Position = 0; + return new StreamReader(stream).ReadToEnd(); + } + /// /// If true it means the test tool was launched via an Aspire AppHost. /// diff --git a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs index d3e3e9262..5a3db1f21 100644 --- a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs +++ b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs @@ -11,6 +11,7 @@ using Xunit; using Amazon.Lambda.TestTool.Services.IO; using Amazon.Lambda.TestTool.Utilities; +using System.Text.Json.Nodes; namespace Amazon.Lambda.TestTool.UnitTests.Commands; @@ -100,4 +101,37 @@ public async Task ExecuteAsync_EnvPorts_SuccessfulLaunch() Assert.Equal(CommandReturnCodes.Success, result); Assert.True(isApiRunning); } + + [Fact] + public async Task VerifyVersionInfo() + { + var writeCalls = 0; + string? versionInfo = null; + Mock mockInteractiveService = new Mock(); + mockInteractiveService.Setup(i => i.WriteLine(It.IsAny())) + .Callback((string message) => + { + writeCalls++; + versionInfo = message; + }); + + var cancellationSource = new CancellationTokenSource(); + var settings = new RunCommandSettings { PrintVersionInfo = true }; + var command = new RunCommand(mockInteractiveService.Object, _mockEnvironmentManager.Object); + var context = new CommandContext(new List(), _mockRemainingArgs.Object, "run", null); + await command.ExecuteAsync(context, settings, cancellationSource); + + Assert.Equal(1, writeCalls); + Assert.True(!string.IsNullOrEmpty(versionInfo)); + + JsonNode? jsonNode = JsonNode.Parse(versionInfo); + Assert.NotNull(jsonNode); + + var version = jsonNode["version"]?.ToString(); + Assert.NotNull(version); + + // The Version.TryParse does not like the preview suffix + version = version.Replace("-preview", ""); + Assert.True(Version.TryParse(version, out var _)); + } } From 1293a9316f0fda51d52c4b3fcfbdd72feb92c10d Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Wed, 5 Feb 2025 23:40:30 -0800 Subject: [PATCH 3/5] Rename --version to --tool-info --- .../src/Amazon.Lambda.TestTool/Commands/RunCommand.cs | 8 ++++---- .../Commands/Settings/RunCommandSettings.cs | 8 ++++---- .../src/Amazon.Lambda.TestTool/Utilities/Utils.cs | 3 ++- .../Commands/RunCommandTests.cs | 9 +++++++-- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs index a9c0ca69a..a6bec0dbb 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs @@ -29,9 +29,9 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS { try { - if (settings.PrintVersionInfo) + if (settings.PrintToolInfo) { - PrintVersionInfo(); + PrintToolInfo(); return CommandReturnCodes.Success; } @@ -108,9 +108,9 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS } } - private void PrintVersionInfo() + private void PrintToolInfo() { - toolInteractiveService.WriteLine(Utilities.Utils.GenerateVersionJson()); + toolInteractiveService.WriteLine(Utilities.Utils.GenerateToolInfoJson()); } private void EvaluateEnvironmentVariables(RunCommandSettings settings) diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs index f7c010f38..50bfd9af6 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs @@ -71,9 +71,9 @@ public sealed class RunCommandSettings : CommandSettings public int? ApiGatewayEmulatorPort { get; set; } /// - /// When set the tool prints version information as a JSON document and then exits. + /// When set the tool prints metadata for the including the version number as a JSON document and then exits. /// - [CommandOption("--version")] - [Description("When set the tool prints version information as a JSON document and then exits.")] - public bool PrintVersionInfo { get; set; } + [CommandOption("--tool-info")] + [Description("When set the tool prints metadata for the including the version number as a JSON document and then exits.")] + public bool PrintToolInfo { get; set; } } diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs index 3e124cc2e..c9e830009 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs @@ -42,7 +42,7 @@ public static string DetermineToolVersion() return version ?? unknownVersion; } - public static string GenerateVersionJson() + public static string GenerateToolInfoJson() { var stream = new MemoryStream(); Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(stream, options: new JsonWriterOptions() @@ -51,6 +51,7 @@ public static string GenerateVersionJson() }); utf8JsonWriter.WriteStartObject(); utf8JsonWriter.WriteString("version", Utilities.Utils.DetermineToolVersion()); + utf8JsonWriter.WriteString("install-path", Directory.GetParent(typeof(Utils).Assembly.Location)!.FullName); utf8JsonWriter.WriteEndObject(); utf8JsonWriter.Flush(); diff --git a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs index 5a3db1f21..368f35087 100644 --- a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs +++ b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs @@ -103,7 +103,7 @@ public async Task ExecuteAsync_EnvPorts_SuccessfulLaunch() } [Fact] - public async Task VerifyVersionInfo() + public async Task VerifyToolInfo() { var writeCalls = 0; string? versionInfo = null; @@ -116,7 +116,7 @@ public async Task VerifyVersionInfo() }); var cancellationSource = new CancellationTokenSource(); - var settings = new RunCommandSettings { PrintVersionInfo = true }; + var settings = new RunCommandSettings { PrintToolInfo = true }; var command = new RunCommand(mockInteractiveService.Object, _mockEnvironmentManager.Object); var context = new CommandContext(new List(), _mockRemainingArgs.Object, "run", null); await command.ExecuteAsync(context, settings, cancellationSource); @@ -133,5 +133,10 @@ public async Task VerifyVersionInfo() // The Version.TryParse does not like the preview suffix version = version.Replace("-preview", ""); Assert.True(Version.TryParse(version, out var _)); + + var installPath = jsonNode["install-path"]?.ToString(); + Assert.NotNull(installPath); + Assert.True(Directory.Exists(installPath)); + Assert.True(Path.IsPathFullyQualified(installPath)); } } From 5aced83fbf217f5e256fb39de3d9cec7418bf191 Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Thu, 6 Feb 2025 15:35:01 -0800 Subject: [PATCH 4/5] Address PR comments by converting to use commands. --- .../Commands/RunCommand.cs | 11 --- .../Commands/Settings/RunCommandSettings.cs | 25 +----- .../Settings/ToolInfoCommandSettings.cs | 30 +++++++ .../Commands/ToolInfoCommand.cs | 81 +++++++++++++++++++ .../src/Amazon.Lambda.TestTool/Program.cs | 7 +- .../Amazon.Lambda.TestTool/Utilities/Utils.cs | 17 ---- .../Commands/RunCommandTests.cs | 13 ++- .../Settings/RunCommandSettingsTests.cs | 20 ----- 8 files changed, 124 insertions(+), 80 deletions(-) create mode 100644 Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/ToolInfoCommandSettings.cs create mode 100644 Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/ToolInfoCommand.cs diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs index a6bec0dbb..232b48552 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/RunCommand.cs @@ -29,12 +29,6 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS { try { - if (settings.PrintToolInfo) - { - PrintToolInfo(); - return CommandReturnCodes.Success; - } - EvaluateEnvironmentVariables(settings); if (!settings.LambdaEmulatorPort.HasValue && !settings.ApiGatewayEmulatorPort.HasValue) @@ -108,11 +102,6 @@ public override async Task ExecuteAsync(CommandContext context, RunCommandS } } - private void PrintToolInfo() - { - toolInteractiveService.WriteLine(Utilities.Utils.GenerateToolInfoJson()); - } - private void EvaluateEnvironmentVariables(RunCommandSettings settings) { var environmentVariables = environmentManager.GetEnvironmentVariables(); diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs index 50bfd9af6..cdabc377a 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/RunCommandSettings.cs @@ -8,7 +8,7 @@ namespace Amazon.Lambda.TestTool.Commands.Settings; /// -/// Represents the settings for configuring the , which is the default command. +/// Represents the settings for configuring the . /// public sealed class RunCommandSettings : CommandSettings { @@ -36,22 +36,6 @@ public sealed class RunCommandSettings : CommandSettings [Description("Disable auto launching the test tool's web interface in a browser.")] public bool NoLaunchWindow { get; set; } - /// - /// If set to true the test tool will pause waiting for a key input before exiting. - /// The is useful when executing from an IDE so you can avoid having the output window immediately disappear after executing the Lambda code. - /// The default value is true. - /// - [CommandOption("--pause-exit")] - [Description("If set to true the test tool will pause waiting for a key input before exiting. The is useful when executing from an IDE so you can avoid having the output window immediately disappear after executing the Lambda code. The default value is true.")] - public bool PauseExit { get; set; } - - /// - /// Disables logging in the application - /// - [CommandOption("--disable-logs")] - [Description("Disables logging in the application")] - public bool DisableLogs { get; set; } - /// /// The API Gateway Emulator Mode specifies the format of the event that API Gateway sends to a Lambda integration, /// and how API Gateway interprets the response from Lambda. @@ -69,11 +53,4 @@ public sealed class RunCommandSettings : CommandSettings [CommandOption("--api-gateway-emulator-port ")] [Description("The port number used for the test tool's API Gateway emulator.")] public int? ApiGatewayEmulatorPort { get; set; } - - /// - /// When set the tool prints metadata for the including the version number as a JSON document and then exits. - /// - [CommandOption("--tool-info")] - [Description("When set the tool prints metadata for the including the version number as a JSON document and then exits.")] - public bool PrintToolInfo { get; set; } } diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/ToolInfoCommandSettings.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/ToolInfoCommandSettings.cs new file mode 100644 index 000000000..22af3b720 --- /dev/null +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/Settings/ToolInfoCommandSettings.cs @@ -0,0 +1,30 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +using Amazon.Lambda.TestTool.Models; +using Spectre.Console.Cli; +using System.ComponentModel; + +namespace Amazon.Lambda.TestTool.Commands.Settings; + +/// +/// Represents the settings for configuring the . +/// +public sealed class ToolInfoCommandSettings : CommandSettings +{ + public enum InfoFormat + { + Text, + Json + } + + /// + /// The format the info is displayed as. + /// The available formats are: Text, Json. + /// + [CommandOption("--format ")] + [Description( + "The format the info is displayed as. " + + "The available formats are: Text, Json.")] + public InfoFormat? Format { get; set; } +} diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/ToolInfoCommand.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/ToolInfoCommand.cs new file mode 100644 index 000000000..a7a09af1b --- /dev/null +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Commands/ToolInfoCommand.cs @@ -0,0 +1,81 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +using System.Text; +using System.Text.Json; +using Amazon.Lambda.TestTool.Commands.Settings; +using Amazon.Lambda.TestTool.Models; +using Amazon.Lambda.TestTool.Services; +using Amazon.Lambda.TestTool.Utilities; +using Spectre.Console.Cli; + +namespace Amazon.Lambda.TestTool.Commands; + +/// +/// Command to display tool information like the version of the tool. +/// +/// +public class ToolInfoCommand(IToolInteractiveService toolInteractiveService) + : Command +{ + /// + /// The method responsible for executing the . + /// + public override int Execute(CommandContext context, ToolInfoCommandSettings settings) + { + var info = CollectInformation(); + + var formattedInfo = settings.Format switch + { + ToolInfoCommandSettings.InfoFormat.Text => GenerateToolInfoText(info), + ToolInfoCommandSettings.InfoFormat.Json => GenerateToolInfoJson(info), + _ => GenerateToolInfoText(info) + }; + + toolInteractiveService.WriteLine(formattedInfo); + return CommandReturnCodes.Success; + } + + private string GenerateToolInfoText(IDictionary info) + { + var stringBuilder = new StringBuilder(); + foreach(var kvp in info) + { + stringBuilder.AppendLine($"{kvp.Key}: {kvp.Value}"); + } + + return stringBuilder.ToString(); + } + + private string GenerateToolInfoJson(IDictionary info) + { + var stream = new MemoryStream(); + Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(stream, options: new JsonWriterOptions() + { + Indented = false + }); + + utf8JsonWriter.WriteStartObject(); + + foreach (var kvp in info) + { + utf8JsonWriter.WriteString(kvp.Key, kvp.Value); + } + + utf8JsonWriter.WriteEndObject(); + utf8JsonWriter.Flush(); + + stream.Position = 0; + return new StreamReader(stream).ReadToEnd(); + } + + private Dictionary CollectInformation() + { + var info = new Dictionary(); + info["Version"] = Utils.DetermineToolVersion(); + info["InstallPath"] = GetInstallPath(); + return info; + } + + private string GetInstallPath() => Directory.GetParent(typeof(Utils).Assembly.Location)!.FullName; +} diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Program.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Program.cs index 3cbfd6b5e..4dd25fbc9 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Program.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Program.cs @@ -13,9 +13,14 @@ var registrar = new TypeRegistrar(serviceCollection); -var app = new CommandApp(registrar); +var app = new CommandApp(registrar); app.Configure(config => { + config.AddCommand("start") + .WithDescription("Start the Lambda and/or API Gateway emulator."); + config.AddCommand("info") + .WithDescription("Display information about the tool including the version number."); + config.SetApplicationName(Constants.ToolName); }); diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs index c9e830009..183ab47e5 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Utilities/Utils.cs @@ -42,23 +42,6 @@ public static string DetermineToolVersion() return version ?? unknownVersion; } - public static string GenerateToolInfoJson() - { - var stream = new MemoryStream(); - Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(stream, options: new JsonWriterOptions() - { - Indented = false - }); - utf8JsonWriter.WriteStartObject(); - utf8JsonWriter.WriteString("version", Utilities.Utils.DetermineToolVersion()); - utf8JsonWriter.WriteString("install-path", Directory.GetParent(typeof(Utils).Assembly.Location)!.FullName); - utf8JsonWriter.WriteEndObject(); - utf8JsonWriter.Flush(); - - stream.Position = 0; - return new StreamReader(stream).ReadToEnd(); - } - /// /// If true it means the test tool was launched via an Aspire AppHost. /// diff --git a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs index 368f35087..b7e4f9b2f 100644 --- a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs +++ b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/RunCommandTests.cs @@ -103,7 +103,7 @@ public async Task ExecuteAsync_EnvPorts_SuccessfulLaunch() } [Fact] - public async Task VerifyToolInfo() + public void VerifyToolInfo() { var writeCalls = 0; string? versionInfo = null; @@ -115,11 +115,10 @@ public async Task VerifyToolInfo() versionInfo = message; }); - var cancellationSource = new CancellationTokenSource(); - var settings = new RunCommandSettings { PrintToolInfo = true }; - var command = new RunCommand(mockInteractiveService.Object, _mockEnvironmentManager.Object); + var settings = new ToolInfoCommandSettings { Format = ToolInfoCommandSettings.InfoFormat.Json }; + var command = new ToolInfoCommand(mockInteractiveService.Object); var context = new CommandContext(new List(), _mockRemainingArgs.Object, "run", null); - await command.ExecuteAsync(context, settings, cancellationSource); + command.Execute(context, settings); Assert.Equal(1, writeCalls); Assert.True(!string.IsNullOrEmpty(versionInfo)); @@ -127,14 +126,14 @@ public async Task VerifyToolInfo() JsonNode? jsonNode = JsonNode.Parse(versionInfo); Assert.NotNull(jsonNode); - var version = jsonNode["version"]?.ToString(); + var version = jsonNode["Version"]?.ToString(); Assert.NotNull(version); // The Version.TryParse does not like the preview suffix version = version.Replace("-preview", ""); Assert.True(Version.TryParse(version, out var _)); - var installPath = jsonNode["install-path"]?.ToString(); + var installPath = jsonNode["InstallPath"]?.ToString(); Assert.NotNull(installPath); Assert.True(Directory.Exists(installPath)); Assert.True(Path.IsPathFullyQualified(installPath)); diff --git a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/Settings/RunCommandSettingsTests.cs b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/Settings/RunCommandSettingsTests.cs index b10d1caaf..4c89c36ff 100644 --- a/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/Settings/RunCommandSettingsTests.cs +++ b/Tools/LambdaTestTool-v2/tests/Amazon.Lambda.TestTool.UnitTests/Commands/Settings/RunCommandSettingsTests.cs @@ -28,26 +28,6 @@ public void NoLaunchWindow_DefaultsToFalse() Assert.False(settings.NoLaunchWindow); } - [Fact] - public void DisableLogs_DefaultsToFalse() - { - // Arrange - var settings = new RunCommandSettings(); - - // Assert - Assert.False(settings.DisableLogs); - } - - [Fact] - public void PauseExit_DefaultsToFalse() - { - // Arrange - var settings = new RunCommandSettings(); - - // Assert - Assert.False(settings.PauseExit); - } - [Fact] public void ApiGatewayEmulatorMode_DefaultsToNull() { From 1efc6bd71d746d2f633d4a1ac7bdc1154e5b930f Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Thu, 6 Feb 2025 15:53:45 -0800 Subject: [PATCH 5/5] Update change file --- .autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json b/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json index fc85c1bee..c05d67d65 100644 --- a/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json +++ b/.autover/changes/efa829ed-59af-46eb-a5e5-ef471698c82d.json @@ -4,7 +4,8 @@ "Name": "Amazon.Lambda.TestTool", "Type": "Patch", "ChangelogMessages": [ - "Add --version switch to allow integrators to check what version is installed" + "Breaking change: Switch to use commands to invoke the tool. For example to run the Lambda emulator use the command 'dotnet lambda-test-tool start --lambda-emulator-port 5050'", + "Add new info command to get metadata about the tool. For example getting the version number of the tool." ] } ]