Skip to content

Commit fd03fd9

Browse files
committed
add e2e tests for metrics
1 parent c1fd00d commit fd03fd9

File tree

4 files changed

+223
-0
lines changed

4 files changed

+223
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>software.amazon.lambda</groupId>
6+
<artifactId>E2EMetricsFunction</artifactId>
7+
<version>1.12.3</version>
8+
<packaging>jar</packaging>
9+
<name>A sample Hello World using powertools metrics</name>
10+
11+
<properties>
12+
<log4j.version>2.19.0</log4j.version>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
<lambda.powertools.version>1.12.3</lambda.powertools.version>
15+
</properties>
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>software.amazon.lambda</groupId>
20+
<artifactId>powertools-metrics</artifactId>
21+
<version>${lambda.powertools.version}</version>
22+
</dependency>
23+
<dependency>
24+
<groupId>com.amazonaws</groupId>
25+
<artifactId>aws-lambda-java-core</artifactId>
26+
<version>1.2.1</version>
27+
</dependency>
28+
<dependency>
29+
<groupId>com.amazonaws</groupId>
30+
<artifactId>aws-lambda-java-events</artifactId>
31+
<version>3.11.0</version>
32+
</dependency>
33+
34+
</dependencies>
35+
36+
<build>
37+
<plugins>
38+
<plugin>
39+
<groupId>org.codehaus.mojo</groupId>
40+
<artifactId>aspectj-maven-plugin</artifactId>
41+
<version>1.14.0</version>
42+
<configuration>
43+
<source>${maven.compiler.source}</source>
44+
<target>${maven.compiler.target}</target>
45+
<complianceLevel>${maven.compiler.target}</complianceLevel>
46+
<aspectLibraries>
47+
<aspectLibrary>
48+
<groupId>software.amazon.lambda</groupId>
49+
<artifactId>powertools-metrics</artifactId>
50+
</aspectLibrary>
51+
</aspectLibraries>
52+
</configuration>
53+
<executions>
54+
<execution>
55+
<goals>
56+
<goal>compile</goal>
57+
</goals>
58+
</execution>
59+
</executions>
60+
</plugin>
61+
<plugin>
62+
<groupId>org.apache.maven.plugins</groupId>
63+
<artifactId>maven-shade-plugin</artifactId>
64+
<version>3.2.4</version>
65+
<configuration>
66+
<createDependencyReducedPom>false</createDependencyReducedPom>
67+
<finalName>function</finalName>
68+
</configuration>
69+
<executions>
70+
<execution>
71+
<phase>package</phase>
72+
<goals>
73+
<goal>shade</goal>
74+
</goals>
75+
<configuration>
76+
<transformers>
77+
<transformer
78+
implementation="io.github.edwgiz.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer">
79+
</transformer>
80+
</transformers>
81+
</configuration>
82+
</execution>
83+
</executions>
84+
<dependencies>
85+
<dependency>
86+
<groupId>io.github.edwgiz</groupId>
87+
<artifactId>log4j-maven-shade-plugin-extensions</artifactId>
88+
<version>2.17.2</version>
89+
</dependency>
90+
</dependencies>
91+
</plugin>
92+
<plugin>
93+
<groupId>org.apache.maven.plugins</groupId>
94+
<artifactId>maven-compiler-plugin</artifactId>
95+
<version>3.10.1</version>
96+
<configuration>
97+
<source>${maven.compiler.source}</source>
98+
<target>${maven.compiler.target}</target>
99+
</configuration>
100+
</plugin>
101+
</plugins>
102+
</build>
103+
</project>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package software.amazon.lambda.powertools.e2e;
2+
3+
import com.amazonaws.services.lambda.runtime.Context;
4+
import com.amazonaws.services.lambda.runtime.RequestHandler;
5+
import software.amazon.cloudwatchlogs.emf.logger.MetricsLogger;
6+
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
7+
import software.amazon.cloudwatchlogs.emf.model.Unit;
8+
import software.amazon.lambda.powertools.metrics.Metrics;
9+
import software.amazon.lambda.powertools.metrics.MetricsUtils;
10+
11+
public class Function implements RequestHandler<Input, String> {
12+
13+
MetricsLogger metricsLogger = MetricsUtils.metricsLogger();
14+
15+
@Metrics(captureColdStart = true)
16+
public String handleRequest(Input input, Context context) {
17+
18+
DimensionSet dimensionSet = new DimensionSet();
19+
input.getDimensions().forEach((key, value) -> dimensionSet.addDimension(key, value));
20+
metricsLogger.putDimensions(dimensionSet);
21+
22+
input.getMetrics().forEach((key, value) -> metricsLogger.putMetric(key, value, Unit.COUNT));
23+
24+
return "OK";
25+
}
26+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package software.amazon.lambda.powertools.e2e;
2+
3+
import java.util.Map;
4+
5+
public class Input {
6+
private Map<String, Double> metrics;
7+
8+
private Map<String, String> dimensions;
9+
10+
public Map<String, Double> getMetrics() {
11+
return metrics;
12+
}
13+
14+
public void setMetrics(Map<String, Double> metrics) {
15+
this.metrics = metrics;
16+
}
17+
18+
public Input() {
19+
}
20+
21+
22+
public Map<String, String> getDimensions() {
23+
return dimensions;
24+
}
25+
26+
public void setDimensions(Map<String, String> dimensions) {
27+
this.dimensions = dimensions;
28+
}
29+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package software.amazon.lambda.powertools;
2+
3+
import org.junit.jupiter.api.AfterAll;
4+
import org.junit.jupiter.api.BeforeAll;
5+
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.api.Timeout;
7+
import software.amazon.lambda.powertools.testutils.Infrastructure;
8+
import software.amazon.lambda.powertools.testutils.InvocationResult;
9+
10+
import java.util.Collections;
11+
import java.util.HashMap;
12+
import java.util.List;
13+
import java.util.UUID;
14+
import java.util.concurrent.TimeUnit;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
18+
public class MetricsE2ETest {
19+
private static Infrastructure infrastructure;
20+
21+
private static final String namespace = "MetricsE2ENamespace_"+UUID.randomUUID();
22+
private static final String service = "MetricsE2EService_"+UUID.randomUUID();
23+
24+
@BeforeAll
25+
@Timeout(value = 5, unit = TimeUnit.MINUTES)
26+
public static void setup() {
27+
infrastructure = Infrastructure.builder()
28+
.testName(MetricsE2ETest.class.getSimpleName())
29+
.pathToFunction("metrics")
30+
.environmentVariables(new HashMap<>() {{
31+
put("POWERTOOLS_METRICS_NAMESPACE", namespace);
32+
put("POWERTOOLS_SERVICE_NAME", service);
33+
}}
34+
)
35+
.build();
36+
infrastructure.deploy();
37+
}
38+
39+
@AfterAll
40+
public static void tearDown() {
41+
if (infrastructure != null)
42+
infrastructure.destroy();
43+
}
44+
45+
@Test
46+
public void test_recordMetrics() {
47+
// GIVEN
48+
String event1 = "{ \"metrics\": {\"orders\": 1, \"products\": 4}, \"dimensions\": { \"Environment\": \"test\"} }";
49+
50+
// WHEN
51+
InvocationResult invocationResult = infrastructure.invokeFunction(event1);
52+
53+
// THEN
54+
List<Double> coldStart = infrastructure.getMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, namespace, "ColdStart", new HashMap<>() {{ put("FunctionName", infrastructure.getFunctionName()); put("Service", service); }});
55+
assertThat(coldStart.get(0)).isEqualTo(1);
56+
List<Double> orderMetrics = infrastructure.getMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, namespace, "orders", Collections.singletonMap("Environment", "test"));
57+
assertThat(orderMetrics.get(0)).isEqualTo(1);
58+
List<Double> productMetrics = infrastructure.getMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, namespace, "products", Collections.singletonMap("Environment", "test"));
59+
assertThat(productMetrics.get(0)).isEqualTo(4);
60+
orderMetrics = infrastructure.getMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, namespace, "orders", Collections.singletonMap("Service", service));
61+
assertThat(orderMetrics.get(0)).isEqualTo(1);
62+
productMetrics = infrastructure.getMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, namespace, "products", Collections.singletonMap("Service", service));
63+
assertThat(productMetrics.get(0)).isEqualTo(4);
64+
}
65+
}

0 commit comments

Comments
 (0)