From cd344648fbf14c32b8f556ccb405e5469152821c Mon Sep 17 00:00:00 2001 From: martincostello Date: Wed, 24 Jan 2024 16:23:14 +0000 Subject: [PATCH] Add OpenTelemetry Add OpenTelemetry to the skill. --- .github/dependabot.yml | 3 + ...mentation.AWSLambda.1.2.0-beta.1.168.nupkg | Bin 0 -> 27010 bytes ...entation.AWSLambda.1.2.0-beta.1.168.snupkg | Bin 0 -> 21280 bytes Directory.Packages.props | 5 ++ NuGet.config | 4 ++ src/LondonTravel.Skill/AlexaFunction.cs | 56 +++++++++++++----- .../LondonTravel.Skill.csproj | 5 ++ src/LondonTravel.Skill/Models/Context.cs | 2 + .../AlexaFunctionTests.cs | 12 ++-- test/LondonTravel.Skill.Tests/CancelTests.cs | 4 +- test/LondonTravel.Skill.Tests/CommuteTests.cs | 19 ++++-- .../DisruptionTests.cs | 13 ++-- test/LondonTravel.Skill.Tests/HelpTests.cs | 4 +- test/LondonTravel.Skill.Tests/LaunchTests.cs | 4 +- .../LondonTravel.Skill.Tests.csproj | 2 +- .../SessionEndedTests.cs | 4 +- test/LondonTravel.Skill.Tests/StatusTests.cs | 13 ++-- test/LondonTravel.Skill.Tests/StopTests.cs | 4 +- .../UnknownIntentTests.cs | 4 +- .../UnknownRequestTests.cs | 4 +- 20 files changed, 120 insertions(+), 42 deletions(-) create mode 100644 .packages/OpenTelemetry.Instrumentation.AWSLambda.1.2.0-beta.1.168.nupkg create mode 100644 .packages/OpenTelemetry.Instrumentation.AWSLambda.1.2.0-beta.1.168.snupkg diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2ae65313..cc57e029 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,6 +11,9 @@ updates: - package-ecosystem: nuget directory: "/" groups: + opentelemetry: + patterns: + - OpenTelemetry* polly: patterns: - Polly* diff --git a/.packages/OpenTelemetry.Instrumentation.AWSLambda.1.2.0-beta.1.168.nupkg b/.packages/OpenTelemetry.Instrumentation.AWSLambda.1.2.0-beta.1.168.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..dabade69a8c1a6a27ed5d1f890156e7e3bcf65e0 GIT binary patch literal 27010 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�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 BOws@V literal 0 HcmV?d00001 diff --git a/.packages/OpenTelemetry.Instrumentation.AWSLambda.1.2.0-beta.1.168.snupkg b/.packages/OpenTelemetry.Instrumentation.AWSLambda.1.2.0-beta.1.168.snupkg new file mode 100644 index 0000000000000000000000000000000000000000..ae40ea17a9677570cf9abe29fd087480ed8fd62d GIT binary patch literal 21280 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 x?oS(k7K^`aaGCtKrQ=Tpe%Q|4eSYe*kJik-`7~ literal 0 HcmV?d00001 diff --git a/Directory.Packages.props b/Directory.Packages.props index 0171bf0d..f6f19eed 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,6 +26,11 @@ + + + + + diff --git a/NuGet.config b/NuGet.config index 38ac8e75..727c92dd 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,9 +2,13 @@ + + + + diff --git a/src/LondonTravel.Skill/AlexaFunction.cs b/src/LondonTravel.Skill/AlexaFunction.cs index 62a473b1..d099b9d5 100644 --- a/src/LondonTravel.Skill/AlexaFunction.cs +++ b/src/LondonTravel.Skill/AlexaFunction.cs @@ -2,6 +2,7 @@ // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. using System.Diagnostics.CodeAnalysis; +using Amazon.Lambda.Core; using MartinCostello.LondonTravel.Skill.Extensions; using MartinCostello.LondonTravel.Skill.Intents; using MartinCostello.LondonTravel.Skill.Models; @@ -9,6 +10,10 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using OpenTelemetry.Instrumentation.AWSLambda; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; +using OpenTelemetry.Trace; namespace MartinCostello.LondonTravel.Skill; @@ -55,21 +60,15 @@ public async virtual ValueTask DisposeAsync() /// Handles a request to the skill as an asynchronous operation. /// /// The skill request. + /// The Lamda request context. /// /// A representing the asynchronous operation to get the skill's response. /// - public async Task HandlerAsync(SkillRequest request) + public async Task HandlerAsync(SkillRequest request, ILambdaContext context) { EnsureInitialized(); - - var handler = _serviceProvider.GetRequiredService(); - var logger = _serviceProvider.GetRequiredService>(); - - using var activity = SkillTelemetry.ActivitySource.StartActivity("Skill Request"); - - Log.InvokingSkillRequest(logger, request.Request.Type); - - return await handler.HandleAsync(request); + var tracerProvider = _serviceProvider.GetRequiredService(); + return await AWSLambdaWrapper.TraceAsync(tracerProvider, HandlerCoreAsync, request, context); } /// @@ -132,6 +131,21 @@ protected virtual void ConfigureServices(IServiceCollection services) services.AddTransient(); services.AddTransient(); services.AddTransient(); + + services.AddSingleton((_) => SkillTelemetry.ActivitySource); + services.AddOpenTelemetry() + .ConfigureResource((builder) => builder.AddService(SkillTelemetry.ServiceName, serviceVersion: SkillTelemetry.ServiceVersion)) + .WithTracing((builder) => + { + builder.AddHttpClientInstrumentation() + .AddSource(SkillTelemetry.ServiceName); + + if (IsRunningInAwsLambda()) + { + builder.AddAWSLambdaConfigurations() + .AddOtlpExporter(); + } + }); } protected virtual void Dispose(bool disposing) @@ -147,12 +161,22 @@ protected virtual void Dispose(bool disposing) } } - /// - /// Creates the to use. - /// - /// - /// The to use. - /// + private static bool IsRunningInAwsLambda() + => Environment.GetEnvironmentVariable("AWS_LAMBDA_FUNCTION_NAME") is { Length: > 0 } && + Environment.GetEnvironmentVariable("AWS_REGION") is { Length: > 0 }; + + private async Task HandlerCoreAsync(SkillRequest request, ILambdaContext context) + { + var handler = _serviceProvider!.GetRequiredService(); + var logger = _serviceProvider!.GetRequiredService>(); + + using var activity = SkillTelemetry.ActivitySource.StartActivity("Skill Request"); + + Log.InvokingSkillRequest(logger, request.Request.Type); + + return await handler.HandleAsync(request); + } + private ServiceProvider CreateServiceProvider() { var services = new ServiceCollection(); diff --git a/src/LondonTravel.Skill/LondonTravel.Skill.csproj b/src/LondonTravel.Skill/LondonTravel.Skill.csproj index 6256fcfb..da876316 100644 --- a/src/LondonTravel.Skill/LondonTravel.Skill.csproj +++ b/src/LondonTravel.Skill/LondonTravel.Skill.csproj @@ -28,6 +28,11 @@ + + + + + diff --git a/src/LondonTravel.Skill/Models/Context.cs b/src/LondonTravel.Skill/Models/Context.cs index 9c31ddfe..6e8b010f 100644 --- a/src/LondonTravel.Skill/Models/Context.cs +++ b/src/LondonTravel.Skill/Models/Context.cs @@ -5,7 +5,9 @@ namespace MartinCostello.LondonTravel.Skill.Models; +#pragma warning disable CA1724 public sealed class Context +#pragma warning restore CA1724 { [JsonPropertyName("System")] public AlexaSystem System { get; set; } = default!; diff --git a/test/LondonTravel.Skill.Tests/AlexaFunctionTests.cs b/test/LondonTravel.Skill.Tests/AlexaFunctionTests.cs index 4e40a3ad..11a48a9f 100644 --- a/test/LondonTravel.Skill.Tests/AlexaFunctionTests.cs +++ b/test/LondonTravel.Skill.Tests/AlexaFunctionTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -12,13 +13,14 @@ public async Task Cannot_Invoke_Function_If_Application_Id_Incorrect() { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); SkillRequest request = CreateIntentRequest("AMAZON.HelpIntent"); request.Session.Application.ApplicationId = "not-my-skill-id"; // Act - InvalidOperationException exception = await Assert.ThrowsAsync( - () => function.HandlerAsync(request)); + var exception = await Assert.ThrowsAsync( + () => function.HandlerAsync(request, context)); // Assert exception.Message.ShouldBe("Request application Id 'not-my-skill-id' and configured skill Id 'my-skill-id' mismatch."); @@ -34,12 +36,13 @@ public async Task Can_Invoke_Function_If_Locale_Is_Invalid(string? locale) { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); SkillRequest request = CreateIntentRequest("AMAZON.HelpIntent"); request.Request.Locale = locale!; // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual, shouldEndSession: false); @@ -53,6 +56,7 @@ public async Task Cannot_Invoke_Function_With_System_Failure() { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); var error = new Request() { @@ -70,7 +74,7 @@ public async Task Cannot_Invoke_Function_With_System_Failure() var request = CreateRequest("System.ExceptionEncountered", error); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); diff --git a/test/LondonTravel.Skill.Tests/CancelTests.cs b/test/LondonTravel.Skill.Tests/CancelTests.cs index 27a3f85b..5da55c51 100644 --- a/test/LondonTravel.Skill.Tests/CancelTests.cs +++ b/test/LondonTravel.Skill.Tests/CancelTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -12,11 +13,12 @@ public async Task Can_Invoke_Function() { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); SkillRequest request = CreateIntentRequest("AMAZON.CancelIntent"); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); diff --git a/test/LondonTravel.Skill.Tests/CommuteTests.cs b/test/LondonTravel.Skill.Tests/CommuteTests.cs index c390cb33..a5209757 100644 --- a/test/LondonTravel.Skill.Tests/CommuteTests.cs +++ b/test/LondonTravel.Skill.Tests/CommuteTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using JustEat.HttpClientInterception; using MartinCostello.LondonTravel.Skill.Models; @@ -14,9 +15,10 @@ public async Task Can_Invoke_Function_When_The_Skill_Is_Not_Linked() // Arrange AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequestWithToken(accessToken: null); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); @@ -41,9 +43,10 @@ public async Task Can_Invoke_Function_When_The_Skill_Token_Is_Invalid() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequestWithToken(accessToken: "invalid-access-token"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); @@ -66,9 +69,10 @@ public async Task Can_Invoke_Function_When_The_Skill_Api_Fails() // Arrange AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequestWithToken(accessToken: "random-access-token"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); @@ -92,9 +96,10 @@ public async Task Can_Invoke_Function_When_The_Skill_Is_Linked_And_Has_No_Favori AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequestWithToken(accessToken: "token-for-no-favorites"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse( @@ -112,9 +117,10 @@ public async Task Can_Invoke_Function_When_The_Skill_Is_Linked_And_Has_One_Favor AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequestWithToken(accessToken: "token-for-one-favorite"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse( @@ -132,9 +138,10 @@ public async Task Can_Invoke_Function_When_The_Skill_Is_Linked_And_Has_Two_Favor AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequestWithToken(accessToken: "token-for-two-favorites"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse( diff --git a/test/LondonTravel.Skill.Tests/DisruptionTests.cs b/test/LondonTravel.Skill.Tests/DisruptionTests.cs index 98c9d62d..c99139b1 100644 --- a/test/LondonTravel.Skill.Tests/DisruptionTests.cs +++ b/test/LondonTravel.Skill.Tests/DisruptionTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using JustEat.HttpClientInterception; using MartinCostello.LondonTravel.Skill.Models; @@ -16,9 +17,10 @@ public async Task Can_Invoke_Function_When_There_Are_No_Disruptions() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequest(); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse( @@ -35,9 +37,10 @@ public async Task Can_Invoke_Function_When_There_Is_One_Disruption() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequest(); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse( @@ -54,9 +57,10 @@ public async Task Can_Invoke_Function_When_There_Are_Multiple_Disruptions() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequest(); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse( @@ -71,9 +75,10 @@ public async Task Can_Invoke_Function_When_The_Api_Fails() // Arrange AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequest(); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); diff --git a/test/LondonTravel.Skill.Tests/HelpTests.cs b/test/LondonTravel.Skill.Tests/HelpTests.cs index 316b353b..bbd54a14 100644 --- a/test/LondonTravel.Skill.Tests/HelpTests.cs +++ b/test/LondonTravel.Skill.Tests/HelpTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -14,9 +15,10 @@ public async Task Can_Invoke_Function() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentRequest("AMAZON.HelpIntent"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual, shouldEndSession: false); diff --git a/test/LondonTravel.Skill.Tests/LaunchTests.cs b/test/LondonTravel.Skill.Tests/LaunchTests.cs index 3df41c5b..e97ec444 100644 --- a/test/LondonTravel.Skill.Tests/LaunchTests.cs +++ b/test/LondonTravel.Skill.Tests/LaunchTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -14,9 +15,10 @@ public async Task Can_Invoke_Function() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateRequest("LaunchRequest"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual, shouldEndSession: false); diff --git a/test/LondonTravel.Skill.Tests/LondonTravel.Skill.Tests.csproj b/test/LondonTravel.Skill.Tests/LondonTravel.Skill.Tests.csproj index afed1420..d00238eb 100644 --- a/test/LondonTravel.Skill.Tests/LondonTravel.Skill.Tests.csproj +++ b/test/LondonTravel.Skill.Tests/LondonTravel.Skill.Tests.csproj @@ -29,6 +29,6 @@ cobertura,json [Alexa.NET*]*,[Amazon.Lambda*]*,[LondonTravel.Skill.EndToEndTests]*,[Refit*]*,[xunit.*]* GeneratedCodeAttribute - 89 + 88 diff --git a/test/LondonTravel.Skill.Tests/SessionEndedTests.cs b/test/LondonTravel.Skill.Tests/SessionEndedTests.cs index eaf52993..342856a0 100644 --- a/test/LondonTravel.Skill.Tests/SessionEndedTests.cs +++ b/test/LondonTravel.Skill.Tests/SessionEndedTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -14,9 +15,10 @@ public async Task Can_Invoke_Function() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateRequest("SessionEndedRequest"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); diff --git a/test/LondonTravel.Skill.Tests/StatusTests.cs b/test/LondonTravel.Skill.Tests/StatusTests.cs index 470c589e..4f50062b 100644 --- a/test/LondonTravel.Skill.Tests/StatusTests.cs +++ b/test/LondonTravel.Skill.Tests/StatusTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using JustEat.HttpClientInterception; using MartinCostello.LondonTravel.Skill.Models; @@ -48,9 +49,10 @@ public async Task Can_Invoke_Function_For_Valid_Lines(string id) AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentForLine(id); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertLineResponse(actual); @@ -66,9 +68,10 @@ public async Task Can_Invoke_Function_For_Invalid_Line(string? id) // Arrange AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentForLine(id); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); @@ -98,9 +101,10 @@ public async Task Can_Invoke_Function_When_The_Api_Fails() // Arrange AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentForLine("district"); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); @@ -140,9 +144,10 @@ public async Task Can_Invoke_Function_When_The_Api_Fails() AlexaFunction function = await CreateFunctionAsync(); SkillRequest request = CreateIntentForLine(id); + TestLambdaContext context = new(); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertLineResponse(actual, expectedSsml: "" + expected + ""); diff --git a/test/LondonTravel.Skill.Tests/StopTests.cs b/test/LondonTravel.Skill.Tests/StopTests.cs index dadd2b4c..04d251f3 100644 --- a/test/LondonTravel.Skill.Tests/StopTests.cs +++ b/test/LondonTravel.Skill.Tests/StopTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -12,11 +13,12 @@ public async Task Can_Invoke_Function() { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); SkillRequest request = CreateIntentRequest("AMAZON.StopIntent"); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); diff --git a/test/LondonTravel.Skill.Tests/UnknownIntentTests.cs b/test/LondonTravel.Skill.Tests/UnknownIntentTests.cs index 696ee317..86d4c085 100644 --- a/test/LondonTravel.Skill.Tests/UnknownIntentTests.cs +++ b/test/LondonTravel.Skill.Tests/UnknownIntentTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -12,11 +13,12 @@ public async Task Can_Invoke_Function() { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); SkillRequest request = CreateIntentRequest("FooIntent"); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert ResponseBody response = AssertResponse(actual); diff --git a/test/LondonTravel.Skill.Tests/UnknownRequestTests.cs b/test/LondonTravel.Skill.Tests/UnknownRequestTests.cs index 4bab1edd..8b9b712f 100644 --- a/test/LondonTravel.Skill.Tests/UnknownRequestTests.cs +++ b/test/LondonTravel.Skill.Tests/UnknownRequestTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Martin Costello, 2017. All rights reserved. // Licensed under the Apache 2.0 license. See the LICENSE file in the project root for full license information. +using Amazon.Lambda.TestUtilities; using MartinCostello.LondonTravel.Skill.Models; namespace MartinCostello.LondonTravel.Skill; @@ -12,11 +13,12 @@ public async Task Can_Invoke_Function() { // Arrange AlexaFunction function = await CreateFunctionAsync(); + TestLambdaContext context = new(); SkillRequest request = CreateRequest("Unknown"); // Act - SkillResponse actual = await function.HandlerAsync(request); + SkillResponse actual = await function.HandlerAsync(request, context); // Assert AssertResponse(actual);