Skip to content

Commit 86cb3ce

Browse files
committed
Make unit tests compatible with GraalVM. It is not supported to mock interface with Mockito.
1 parent 6b81805 commit 86cb3ce

File tree

5 files changed

+109
-24
lines changed

5 files changed

+109
-24
lines changed

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerBuilderTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
import static org.assertj.core.api.Assertions.assertThat;
1818
import static org.assertj.core.api.Assertions.assertThatThrownBy;
19-
import static org.mockito.Mockito.mock;
20-
import static org.mockito.Mockito.when;
2119

2220
import java.io.ByteArrayOutputStream;
2321
import java.io.PrintStream;
@@ -32,6 +30,8 @@
3230

3331
import software.amazon.lambda.powertools.metrics.model.MetricUnit;
3432
import software.amazon.lambda.powertools.metrics.provider.MetricsProvider;
33+
import software.amazon.lambda.powertools.metrics.testutils.TestMetricsLogger;
34+
import software.amazon.lambda.powertools.metrics.testutils.TestMetricsProvider;
3535

3636
class MetricsLoggerBuilderTest {
3737

@@ -149,17 +149,15 @@ void shouldBuildWithMultipleDefaultDimensions() throws Exception {
149149
@Test
150150
void shouldBuildWithCustomMetricsProvider() {
151151
// Given
152-
MetricsProvider mockProvider = mock(MetricsProvider.class);
153-
MetricsLogger mockLogger = mock(MetricsLogger.class);
154-
when(mockProvider.getMetricsLogger()).thenReturn(mockLogger);
152+
MetricsProvider testProvider = new TestMetricsProvider();
155153

156154
// When
157155
MetricsLogger metricsLogger = MetricsLoggerBuilder.builder()
158-
.withMetricsProvider(mockProvider)
156+
.withMetricsProvider(testProvider)
159157
.build();
160158

161159
// Then
162-
assertThat(metricsLogger).isSameAs(mockLogger);
160+
assertThat(metricsLogger).isInstanceOf(TestMetricsLogger.class);
163161
}
164162

165163
@Test

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsLoggerFactoryTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
import static org.assertj.core.api.Assertions.assertThat;
1818
import static org.assertj.core.api.Assertions.assertThatThrownBy;
19-
import static org.mockito.Mockito.mock;
20-
import static org.mockito.Mockito.when;
2119

2220
import java.io.ByteArrayOutputStream;
2321
import java.io.PrintStream;
@@ -34,6 +32,8 @@
3432
import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor;
3533
import software.amazon.lambda.powertools.metrics.model.MetricUnit;
3634
import software.amazon.lambda.powertools.metrics.provider.MetricsProvider;
35+
import software.amazon.lambda.powertools.metrics.testutils.TestMetricsLogger;
36+
import software.amazon.lambda.powertools.metrics.testutils.TestMetricsProvider;
3737

3838
class MetricsLoggerFactoryTest {
3939

@@ -127,16 +127,14 @@ public void shouldUseServiceNameFromEnvironmentVariable() throws Exception {
127127
@Test
128128
public void shouldSetCustomMetricsProvider() {
129129
// Given
130-
MetricsProvider mockProvider = mock(MetricsProvider.class);
131-
MetricsLogger mockLogger = mock(MetricsLogger.class);
132-
when(mockProvider.getMetricsLogger()).thenReturn(mockLogger);
130+
MetricsProvider testProvider = new TestMetricsProvider();
133131

134132
// When
135-
MetricsLoggerFactory.setMetricsProvider(mockProvider);
133+
MetricsLoggerFactory.setMetricsProvider(testProvider);
136134
MetricsLogger metricsLogger = MetricsLoggerFactory.getMetricsLogger();
137135

138136
// Then
139-
assertThat(metricsLogger).isSameAs(mockLogger);
137+
assertThat(metricsLogger).isInstanceOf(TestMetricsLogger.class);
140138
}
141139

142140
@Test
@@ -146,4 +144,5 @@ public void shouldThrowExceptionWhenSettingNullProvider() {
146144
.isInstanceOf(IllegalArgumentException.class)
147145
.hasMessage("Metrics provider cannot be null");
148146
}
147+
149148
}

powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import software.amazon.lambda.powertools.metrics.model.DimensionSet;
4444
import software.amazon.lambda.powertools.metrics.model.MetricResolution;
4545
import software.amazon.lambda.powertools.metrics.model.MetricUnit;
46+
import software.amazon.lambda.powertools.metrics.testutils.TestContext;
4647

4748
class EmfMetricsLoggerTest {
4849

@@ -275,12 +276,10 @@ void shouldClearDefaultDimensions() throws Exception {
275276
@Test
276277
void shouldCaptureColdStartMetric() throws Exception {
277278
// Given
278-
Context context = mock(Context.class);
279-
when(context.getFunctionName()).thenReturn("testFunction");
280-
when(context.getAwsRequestId()).thenReturn("testRequestId");
279+
Context testContext = new TestContext();
281280

282281
// When
283-
metricsLogger.captureColdStartMetric(context);
282+
metricsLogger.captureColdStartMetric(testContext);
284283

285284
// Then
286285
String emfOutput = outputStreamCaptor.toString().trim();
@@ -289,7 +288,7 @@ void shouldCaptureColdStartMetric() throws Exception {
289288
assertThat(rootNode.has("ColdStart")).isTrue();
290289
assertThat(rootNode.get("ColdStart").asDouble()).isEqualTo(1.0);
291290
assertThat(rootNode.has("function_request_id")).isTrue();
292-
assertThat(rootNode.get("function_request_id").asText()).isEqualTo("testRequestId");
291+
assertThat(rootNode.get("function_request_id").asText()).isEqualTo(testContext.getAwsRequestId());
293292
}
294293

295294
@Test
@@ -329,14 +328,12 @@ void shouldReuseNamespaceForColdStartMetric() throws Exception {
329328
String customNamespace = "CustomNamespace";
330329
metricsLogger.setNamespace(customNamespace);
331330

332-
Context context = mock(Context.class);
333-
when(context.getFunctionName()).thenReturn("testFunction");
334-
when(context.getAwsRequestId()).thenReturn("testRequestId");
331+
Context testContext = new TestContext();
335332

336333
DimensionSet dimensions = DimensionSet.of("CustomDim", "CustomValue");
337334

338335
// When
339-
metricsLogger.captureColdStartMetric(context, dimensions);
336+
metricsLogger.captureColdStartMetric(testContext, dimensions);
340337

341338
// Then
342339
String emfOutput = outputStreamCaptor.toString().trim();
@@ -347,7 +344,7 @@ void shouldReuseNamespaceForColdStartMetric() throws Exception {
347344
assertThat(rootNode.has("CustomDim")).isTrue();
348345
assertThat(rootNode.get("CustomDim").asText()).isEqualTo("CustomValue");
349346
assertThat(rootNode.has("function_request_id")).isTrue();
350-
assertThat(rootNode.get("function_request_id").asText()).isEqualTo("testRequestId");
347+
assertThat(rootNode.get("function_request_id").asText()).isEqualTo(testContext.getAwsRequestId());
351348
assertThat(rootNode.get("_aws").get("CloudWatchMetrics").get(0).get("Namespace").asText())
352349
.isEqualTo(customNamespace);
353350
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package software.amazon.lambda.powertools.metrics.testutils;
2+
3+
import java.util.Collections;
4+
import java.util.Map;
5+
6+
import com.amazonaws.services.lambda.runtime.Context;
7+
8+
import software.amazon.lambda.powertools.metrics.MetricsLogger;
9+
import software.amazon.lambda.powertools.metrics.model.DimensionSet;
10+
import software.amazon.lambda.powertools.metrics.model.MetricResolution;
11+
import software.amazon.lambda.powertools.metrics.model.MetricUnit;
12+
13+
public class TestMetricsLogger implements MetricsLogger {
14+
@Override
15+
public void addMetric(String name, double value, MetricUnit unit) {
16+
// Test placeholder
17+
}
18+
19+
@Override
20+
public void flush() {
21+
// Test placeholder
22+
}
23+
24+
@Override
25+
public void addMetric(String key, double value, MetricUnit unit, MetricResolution resolution) {
26+
// Test placeholder
27+
}
28+
29+
@Override
30+
public void addDimension(String key, String value) {
31+
// Test placeholder
32+
}
33+
34+
@Override
35+
public void addMetadata(String key, Object value) {
36+
// Test placeholder
37+
}
38+
39+
@Override
40+
public void setDefaultDimensions(Map<String, String> defaultDimensions) {
41+
// Test placeholder
42+
}
43+
44+
@Override
45+
public DimensionSet getDefaultDimensions() {
46+
// Test placeholder
47+
return DimensionSet.of(Collections.emptyMap());
48+
}
49+
50+
@Override
51+
public void setNamespace(String namespace) {
52+
// Test placeholder
53+
}
54+
55+
@Override
56+
public void setRaiseOnEmptyMetrics(boolean raiseOnEmptyMetrics) {
57+
// Test placeholder
58+
}
59+
60+
@Override
61+
public void clearDefaultDimensions() {
62+
// Test placeholder
63+
}
64+
65+
@Override
66+
public void captureColdStartMetric(Context context, DimensionSet dimensions) {
67+
// Test placeholder
68+
}
69+
70+
@Override
71+
public void captureColdStartMetric(DimensionSet dimensions) {
72+
// Test placeholder
73+
}
74+
75+
@Override
76+
public void pushSingleMetric(String name, double value, MetricUnit unit, String namespace,
77+
DimensionSet dimensions) {
78+
// Test placeholder
79+
}
80+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package software.amazon.lambda.powertools.metrics.testutils;
2+
3+
import software.amazon.lambda.powertools.metrics.MetricsLogger;
4+
import software.amazon.lambda.powertools.metrics.provider.MetricsProvider;
5+
6+
public class TestMetricsProvider implements MetricsProvider {
7+
@Override
8+
public MetricsLogger getMetricsLogger() {
9+
return new TestMetricsLogger();
10+
}
11+
}

0 commit comments

Comments
 (0)