Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ private async Task<Exception> TestHandlerFailAsync(string handler, string expect
var userCodeLoader = new UserCodeLoader(new SystemEnvironmentVariables(), handler, _internalLogger);
var initializer = new UserCodeInitializer(userCodeLoader, _internalLogger);
var handlerWrapper = HandlerWrapper.GetHandlerWrapper(userCodeLoader.Invoke);
var bootstrap = new LambdaBootstrap(handlerWrapper, initializer.InitializeAsync)
var bootstrap = new LambdaBootstrap(handlerWrapper.Handler, initializer.InitializeAsync, null, _environmentVariables)
{
Client = testRuntimeApiClient
};
Expand Down Expand Up @@ -388,7 +388,7 @@ private async Task<ExecutionInfo> ExecHandlerAsync(string handler, string dataIn
var userCodeLoader = new UserCodeLoader(new SystemEnvironmentVariables(), handler, _internalLogger);
var handlerWrapper = HandlerWrapper.GetHandlerWrapper(userCodeLoader.Invoke);
var initializer = new UserCodeInitializer(userCodeLoader, _internalLogger);
var bootstrap = new LambdaBootstrap(handlerWrapper, initializer.InitializeAsync)
var bootstrap = new LambdaBootstrap(handlerWrapper.Handler, initializer.InitializeAsync, null, _environmentVariables)
{
Client = testRuntimeApiClient
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ public async Task TraceIdEnvironmentVariableIsSet()
[Fact]
public async Task HandlerThrowsException()
{
using (var bootstrap = new LambdaBootstrap(_testFunction.BaseHandlerThrowsAsync, null))
using (var bootstrap = new LambdaBootstrap(_testFunction.BaseHandlerThrowsAsync, null, null, _environmentVariables))
{
bootstrap.Client = _testRuntimeApiClient;
Assert.Null(_environmentVariables.GetEnvironmentVariable(LambdaEnvironment.EnvVarTraceId));
Expand All @@ -183,7 +183,7 @@ public async Task HandlerInputAndOutputWork()
{
const string testInput = "a MiXeD cAsE sTrInG";

using (var bootstrap = new LambdaBootstrap(_testFunction.BaseHandlerToUpperAsync, null))
using (var bootstrap = new LambdaBootstrap(_testFunction.BaseHandlerToUpperAsync, null, null, _environmentVariables))
{
_testRuntimeApiClient.FunctionInput = Encoding.UTF8.GetBytes(testInput);
bootstrap.Client = _testRuntimeApiClient;
Expand All @@ -201,7 +201,7 @@ public async Task HandlerInputAndOutputWork()
[Fact]
public async Task HandlerReturnsNull()
{
using (var bootstrap = new LambdaBootstrap(_testFunction.BaseHandlerReturnsNullAsync, null))
using (var bootstrap = new LambdaBootstrap(_testFunction.BaseHandlerReturnsNullAsync, null, null, _environmentVariables))
{
_testRuntimeApiClient.FunctionInput = new byte[0];
bootstrap.Client = _testRuntimeApiClient;
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AWS Lambda for .NET
# AWS Lambda for .NET (Draft)

Repository for the AWS NuGet packages and Blueprints to support writing AWS Lambda functions using .NET Core.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ protected async Task CleanupAsync()
CancellationTokenSource.Dispose();
CancellationTokenSource = new CancellationTokenSource();
}
Environment.SetEnvironmentVariable("APIGATEWAY_EMULATOR_ROUTE_CONFIG", null);
}

protected async Task StartTestToolProcessAsync(ApiGatewayEmulatorMode apiGatewayMode, string routeName, int lambdaPort, int apiGatewayPort, CancellationTokenSource cancellationTokenSource, string httpMethod = "POST")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ public async Task ProcessMessagesFromMultipleEventSources()
await sqsClient.SendMessageAsync(queueUrl2, "MessageFromQueue2");

var startTime = DateTime.UtcNow;
while (listOfProcessedMessages.Count == 0 && DateTime.UtcNow < startTime.AddMinutes(2))
while (listOfProcessedMessages.Count < 2 && DateTime.UtcNow < startTime.AddMinutes(2))
{
Assert.False(lambdaTask.IsFaulted, "Lambda function failed: " + lambdaTask.Exception?.ToString());
await Task.Delay(500);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

using System.Net;
using System.Net.Sockets;

namespace Amazon.Lambda.TestTool.Tests.Common.Helpers;

public static class TestHelpers
Expand Down Expand Up @@ -39,16 +42,22 @@ public static async Task<HttpResponseMessage> SendRequest(string url)
}
}

private static int _maxLambdaRuntimePort = 6000;
private static int _maxApiGatewayPort = 9000;
private static int GetFreePort()
{
var listener = new TcpListener(IPAddress.Loopback, 0);
listener.Start();
var port = ((IPEndPoint)listener.LocalEndpoint).Port;
listener.Stop();
return port;
}

public static int GetNextLambdaRuntimePort()
{
return Interlocked.Increment(ref _maxLambdaRuntimePort);
return GetFreePort();
}

public static int GetNextApiGatewayPort()
{
return Interlocked.Increment(ref _maxApiGatewayPort);
return GetFreePort();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public async Task AddEventToDataStore()
var testToolProcess = TestToolProcess.Startup(options, cancellationTokenSource.Token);
try
{
Assert.True(await TestHelpers.WaitForApiToStartAsync($"{testToolProcess.ServiceUrl}/lambda-runtime-api/healthcheck"));

var lambdaClient = ConstructLambdaServiceClient(testToolProcess.ServiceUrl);
var invokeFunction = new InvokeRequest
{
Expand Down Expand Up @@ -92,6 +94,8 @@ public async Task InvokeRequestResponse()
var testToolProcess = TestToolProcess.Startup(options, cancellationTokenSource.Token);
try
{
Assert.True(await TestHelpers.WaitForApiToStartAsync($"{testToolProcess.ServiceUrl}/lambda-runtime-api/healthcheck"));

var handler = (string input, ILambdaContext context) =>
{
Thread.Sleep(1000); // Add a sleep to prove the LambdaRuntimeApi waited for the completion.
Expand Down
Loading