public ExecutionResponse Execute(ExecutionRequest request) { var logger = new LocalLambdaLogger(); var response = new ExecutionResponse(); if (!string.IsNullOrEmpty(request.Function.ErrorMessage)) { response.Error = request.Function.ErrorMessage; return(response); } try { if (!string.IsNullOrEmpty(request.AWSRegion)) { Environment.SetEnvironmentVariable("AWS_REGION", request.AWSRegion); } if (!string.IsNullOrEmpty(request.AWSProfile)) { Environment.SetEnvironmentVariable("AWS_PROFILE", request.AWSProfile); } var context = new LocalLambdaContext() { Logger = logger }; object instance = null; if (!request.Function.LambdaMethod.IsStatic) { instance = Activator.CreateInstance(request.Function.LambdaType); } var parameters = BuildParameters(request, context); // Because a Lambda compute environment never executes more then one event at a time // create a lock around the execution to match that environment. lock (EXECUTE_LOCK) { using (var wrapper = new ConsoleOutWrapper(logger)) { var lambdaReturnObject = request.Function.LambdaMethod.Invoke(instance, parameters); response.Response = ProcessReturn(request, lambdaReturnObject); } } } catch (TargetInvocationException e) { response.Error = GenerateErrorMessage(e.InnerException); } catch (Exception e) { response.Error = GenerateErrorMessage(e); } response.Logs = logger.Buffer; return(response); }
public void CaptureStandardError() { var logger = new LocalLambdaLogger(); using (var captiure = new ConsoleOutWrapper(logger)) { Console.Error.WriteLine("CAPTURED"); } Console.Error.WriteLine("NOT_CAPTURED"); Assert.Contains("CAPTURED", logger.Buffer); Assert.DoesNotContain("NOT_CAPTURED", logger.Buffer); }