Skip to content

Commit af14147

Browse files
committed
e2e test cw data. force coldstart before tests
1 parent 029aafb commit af14147

File tree

2 files changed

+62
-13
lines changed

2 files changed

+62
-13
lines changed

libraries/tests/e2e/functions/core/metrics/Function/src/Function/TestHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public static void TestMethod(APIGatewayProxyRequest apigwProxyEvent, ILambdaCon
1717
Metrics.SetDefaultDimensions(DefaultDimensions);
1818
Metrics.AddMetric("Invocation", 1, MetricUnit.Count);
1919

20+
Metrics.AddDimension("FunctionName", context.FunctionName);
2021
Metrics.AddDimension("Memory","MemoryLimitInMB");
2122
Metrics.AddMetric("Memory with Environment dimension", context.MemoryLimitInMB, MetricUnit.Megabytes);
2223

libraries/tests/e2e/functions/core/metrics/Function/test/Function.Tests/FunctionTests.cs

Lines changed: 61 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text.Json;
2+
using Amazon.CDK.AWS.CodeDeploy;
23
using Amazon.CloudWatch;
34
using Amazon.CloudWatch.Model;
45
using Amazon.Lambda;
@@ -7,6 +8,7 @@
78
using Amazon.Lambda.Model;
89
using TestUtils;
910
using Xunit.Abstractions;
11+
using Environment = Amazon.Lambda.Model.Environment;
1012

1113
namespace Function.Tests;
1214

@@ -15,7 +17,7 @@ public class FunctionTests
1517
{
1618
private readonly ITestOutputHelper _testOutputHelper;
1719
private readonly AmazonLambdaClient _lambdaClient;
18-
private string _functionName;
20+
private string? _functionName;
1921

2022
public FunctionTests(ITestOutputHelper testOutputHelper)
2123
{
@@ -29,7 +31,9 @@ public FunctionTests(ITestOutputHelper testOutputHelper)
2931
[InlineData("E2ETestLambda_ARM_AOT_NET8_metrics")]
3032
public async Task AotFunctionTest(string functionName)
3133
{
32-
await TestFunction(functionName);
34+
_functionName = functionName;
35+
await ForceColdStart();
36+
await TestFunction();
3337
}
3438

3539
[Theory]
@@ -39,15 +43,16 @@ public async Task AotFunctionTest(string functionName)
3943
[InlineData("E2ETestLambda_ARM_NET8_metrics")]
4044
public async Task FunctionTest(string functionName)
4145
{
42-
await TestFunction(functionName);
46+
_functionName = functionName;
47+
await ForceColdStart();
48+
await TestFunction();
4349
}
4450

45-
internal async Task TestFunction(string functionName)
51+
internal async Task TestFunction()
4652
{
47-
_functionName = functionName;
4853
var request = new InvokeRequest
4954
{
50-
FunctionName = functionName,
55+
FunctionName = _functionName,
5156
InvocationType = InvocationType.RequestResponse,
5257
Payload = await File.ReadAllTextAsync("../../../../../../../../payload.json"),
5358
LogType = LogType.Tail
@@ -86,7 +91,7 @@ private void ValidateResponse(InvokeResponse response, bool isColdStart)
8691
// Assert Output log from Lambda execution
8792
AssertOutputLog(response, isColdStart);
8893
}
89-
94+
9095
private void AssertOutputLog(InvokeResponse response, bool expectedColdStart)
9196
{
9297
var logResult = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(response.LogResult));
@@ -108,7 +113,7 @@ private void AssertOutputLog(InvokeResponse response, bool expectedColdStart)
108113
AssertMetricsDimensionsMetadata(output[1]);
109114
}
110115
}
111-
116+
112117
private async Task AssertCloudWatch()
113118
{
114119
using var cloudWatchClient = new AmazonCloudWatchClient();
@@ -130,15 +135,35 @@ private async Task AssertCloudWatch()
130135
}
131136
]
132137
};
133-
138+
134139
var response = await cloudWatchClient.ListMetricsAsync(request);
135140

141+
Assert.Equal(7, response.Metrics.Count);
142+
136143
foreach (var metric in response.Metrics)
137144
{
138-
_testOutputHelper.WriteLine($"Namespace: {metric.Namespace}, MetricName: {metric.MetricName}");
139-
foreach (var dimension in metric.Dimensions)
145+
Assert.Equal("Test", metric.Namespace);
146+
147+
switch (metric.MetricName)
140148
{
141-
_testOutputHelper.WriteLine($" Dimension: {dimension.Name} = {dimension.Value}");
149+
case "ColdStart":
150+
case "SingleMetric":
151+
Assert.Equal(2, metric.Dimensions.Count);
152+
Assert.Contains(metric.Dimensions, d => d.Name == "Service" && d.Value == "Test");
153+
Assert.Contains(metric.Dimensions, d => d.Name == "FunctionName" && d.Value == _functionName);
154+
break;
155+
case "Invocation":
156+
case "Memory with Environment dimension":
157+
case "Standard resolution":
158+
case "High resolution":
159+
case "Default resolution":
160+
Assert.Equal(5, metric.Dimensions.Count);
161+
Assert.Contains(metric.Dimensions, d => d.Name == "Service" && d.Value == "Test");
162+
Assert.Contains(metric.Dimensions, d => d.Name == "FunctionName" && d.Value == _functionName);
163+
Assert.Contains(metric.Dimensions, d => d.Name == "Memory" && d.Value == "MemoryLimitInMB");
164+
Assert.Contains(metric.Dimensions, d => d.Name == "Environment" && d.Value == "Prod");
165+
Assert.Contains(metric.Dimensions, d => d.Name == "Another" && d.Value == "One");
166+
break;
142167
}
143168
}
144169
}
@@ -189,7 +214,8 @@ private void AssertMetricsDimensionsMetadata(string output)
189214
Assert.Equal("Service", dimensionsElement[0][0].GetString());
190215
Assert.Equal("Environment", dimensionsElement[0][1].GetString());
191216
Assert.Equal("Another", dimensionsElement[0][2].GetString());
192-
Assert.Equal("Memory", dimensionsElement[0][3].GetString());
217+
Assert.Equal("FunctionName", dimensionsElement[0][3].GetString());
218+
Assert.Equal("Memory", dimensionsElement[0][4].GetString());
193219

194220
Assert.True(root.TryGetProperty("Service", out JsonElement serviceElement));
195221
Assert.Equal("Test", serviceElement.GetString());
@@ -200,6 +226,9 @@ private void AssertMetricsDimensionsMetadata(string output)
200226
Assert.True(root.TryGetProperty("Another", out JsonElement anotherElement));
201227
Assert.Equal("One", anotherElement.GetString());
202228

229+
Assert.True(root.TryGetProperty("FunctionName", out JsonElement functionNameElement));
230+
Assert.Equal(_functionName, functionNameElement.GetString());
231+
203232
Assert.True(root.TryGetProperty("Memory", out JsonElement memoryElement));
204233
Assert.Equal("MemoryLimitInMB", memoryElement.GetString());
205234

@@ -271,4 +300,23 @@ private void AssertColdStart(string output)
271300
Assert.True(root.TryGetProperty("ColdStart", out JsonElement coldStartElement));
272301
Assert.Equal(1, coldStartElement.GetInt32());
273302
}
303+
304+
private async Task ForceColdStart()
305+
{
306+
var updateRequest = new UpdateFunctionConfigurationRequest
307+
{
308+
FunctionName = _functionName,
309+
Environment = new Environment
310+
{
311+
Variables = new Dictionary<string, string>
312+
{
313+
{ "ForceColdStart", Guid.NewGuid().ToString() }
314+
}
315+
}
316+
};
317+
318+
_ = await _lambdaClient.UpdateFunctionConfigurationAsync(updateRequest);
319+
320+
await Task.Delay(2000);
321+
}
274322
}

0 commit comments

Comments
 (0)