Skip to content

Commit

Permalink
Merge pull request #611 from martincostello/Fix-LambdaContext-Remaini…
Browse files Browse the repository at this point in the history
…ngTime

Fix RemainingTime returning negative values
  • Loading branch information
normj authored Apr 2, 2020
2 parents 6a8deca + 1f1f574 commit a5f2e64
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace Amazon.Lambda.RuntimeSupport
{
internal class LambdaContext : ILambdaContext
{
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

private LambdaEnvironment _lambdaEnvironment;
private RuntimeApiHeaders _runtimeApiHeaders;
Expand Down Expand Up @@ -69,6 +69,6 @@ public LambdaContext(RuntimeApiHeaders runtimeApiHeaders, LambdaEnvironment lamb

public int MemoryLimitInMB => _memoryLimitInMB;

public TimeSpan RemainingTime => TimeSpan.FromMilliseconds(_deadlineMs - (DateTime.Now - UnixEpoch).TotalMilliseconds);
public TimeSpan RemainingTime => TimeSpan.FromMilliseconds(_deadlineMs - (DateTime.UtcNow - UnixEpoch).TotalMilliseconds);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Xunit;

namespace Amazon.Lambda.RuntimeSupport.UnitTests
{
public class LambdaContextTests
{
private readonly TestEnvironmentVariables _environmentVariables;

public LambdaContextTests()
{
_environmentVariables = new TestEnvironmentVariables();
}

[Fact]
public void RemainingTimeIsPositive()
{
var deadline = DateTimeOffset.UtcNow.AddHours(1);
var deadlineMs = deadline.ToUnixTimeMilliseconds().ToString(CultureInfo.InvariantCulture);

var headers = new Dictionary<string, IEnumerable<string>>
{
["Lambda-Runtime-Aws-Request-Id"] = new[] { Guid.NewGuid().ToString() },
["Lambda-Runtime-Deadline-Ms"] = new[] { deadlineMs },
["Lambda-Runtime-Invoked-Function-Arn"] = new[] { "my-function-arn" }
};

var runtimeApiHeaders = new RuntimeApiHeaders(headers);
var lambdaEnvironment = new LambdaEnvironment(_environmentVariables);

var context = new LambdaContext(runtimeApiHeaders, lambdaEnvironment);

Assert.True(context.RemainingTime >= TimeSpan.Zero, $"Remaining time is not a positive value: {context.RemainingTime}");
}
}
}

0 comments on commit a5f2e64

Please sign in to comment.