Skip to content

Commit ea9a1a2

Browse files
committed
Switch logging module to use JUnit Pioneer
1 parent a969e3c commit ea9a1a2

File tree

4 files changed

+39
-52
lines changed

4 files changed

+39
-52
lines changed

examples/powertools-examples-core-utilities/sam-graalvm/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@ This file defines the Lambda function to be deployed as well as API Gateway for
1111
- Set the environment to use GraalVM
1212

1313
```shell
14-
export JAVA_HOME=<path to GraalVM>
15-
````
14+
export JAVA_HOME=<path to GraalVM>
15+
```
1616

1717
## Build the sample application
1818

1919
- Build the Docker image that will be used as the environment for SAM build:
2020
```shell
21-
docker build --platform linux/amd64 . -t powertools-examples-core-sam-graalvm
21+
docker build --platform linux/amd64 . -t powertools-examples-core-sam-graalvm
2222
```
2323

2424
- Build the SAM project using the docker image
2525
```shell
26-
sam build --use-container --build-image powertools-examples-core-sam-graalvm
26+
sam build --use-container --build-image powertools-examples-core-sam-graalvm
2727

2828
```
2929
#### [Optional] Building with -SNAPSHOT versions of PowerTools

powertools-logging/pom.xml

+11-5
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@
6767
<artifactId>junit-jupiter-engine</artifactId>
6868
<scope>test</scope>
6969
</dependency>
70+
<dependency>
71+
<groupId>org.junit-pioneer</groupId>
72+
<artifactId>junit-pioneer</artifactId>
73+
<scope>test</scope>
74+
</dependency>
7075
<dependency>
7176
<groupId>org.apache.commons</groupId>
7277
<artifactId>commons-lang3</artifactId>
@@ -116,7 +121,10 @@
116121
<artifactId>maven-surefire-plugin</artifactId>
117122
<version>3.2.3</version>
118123
<configuration>
119-
<argLine>-Dmockito.mock.maker=subclass -Dorg.graalvm.nativeimage.imagecode=agent -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-logging,experimental-class-define-support</argLine>
124+
<argLine>-Dmockito.mock.maker=subclass -Dorg.graalvm.nativeimage.imagecode=agent -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-logging,experimental-class-define-support
125+
--add-opens java.base/java.util=ALL-UNNAMED
126+
--add-opens java.base/java.lang=ALL-UNNAMED
127+
</argLine>
120128
</configuration>
121129
</plugin>
122130
</plugins>
@@ -149,12 +157,10 @@
149157
</execution>
150158
</executions>
151159
<configuration>
152-
<agent>
153-
<enabled>true</enabled>
154-
<defaultMode>Standard</defaultMode>
155-
</agent>
156160
<imageName>powertools-logging</imageName>
157161
<buildArgs>
162+
<buildArg>--add-opens java.base/java.util=ALL-UNNAMED</buildArg>
163+
<buildArg>--add-opens java.base/java.lang=ALL-UNNAMED</buildArg>
158164
<buildArg>--no-fallback</buildArg>
159165
<buildArg>-Dorg.graalvm.nativeimage.imagecode=agent</buildArg>
160166
<buildArg>-H:ClassInitialization=net.bytebuddy.ClassFileVersion:rerun</buildArg>

powertools-logging/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-logging/reflect-config.json

+8-18
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@
198198
"queryAllDeclaredConstructors":true,
199199
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"clone","parameterTypes":[] }, {"name":"getClass","parameterTypes":[] }, {"name":"toString","parameterTypes":[] }]
200200
},
201+
{
202+
"name":"java.lang.ProcessEnvironment",
203+
"fields":[{"name":"theCaseInsensitiveEnvironment"}, {"name":"theEnvironment"}]
204+
},
201205
{
202206
"name":"java.lang.ProcessHandle",
203207
"methods":[{"name":"current","parameterTypes":[] }, {"name":"pid","parameterTypes":[] }]
@@ -276,6 +280,10 @@
276280
"name":"java.security.AccessController",
277281
"methods":[{"name":"doPrivileged","parameterTypes":["java.security.PrivilegedAction"] }, {"name":"doPrivileged","parameterTypes":["java.security.PrivilegedExceptionAction"] }]
278282
},
283+
{
284+
"name":"java.util.Collections$UnmodifiableMap",
285+
"fields":[{"name":"m"}]
286+
},
279287
{
280288
"name":"java.util.Map"
281289
},
@@ -616,29 +624,11 @@
616624
"queryAllDeclaredMethods":true,
617625
"queryAllPublicMethods":true
618626
},
619-
{
620-
"name":"software.amazon.lambda.powertools.logging.internal.JsonSerializerTest",
621-
"allDeclaredFields":true,
622-
"allDeclaredClasses":true,
623-
"queryAllDeclaredMethods":true,
624-
"queryAllPublicMethods":true,
625-
"queryAllDeclaredConstructors":true,
626-
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"setUp","parameterTypes":[] }, {"name":"writeBigDecimal_shouldWriteBigDecimal","parameterTypes":[] }, {"name":"writeBoolean_shouldWriteBooleanValue","parameterTypes":[] }, {"name":"writeCustomObject_shouldWriteObjectAsJson","parameterTypes":[] }, {"name":"writeDouble_shouldWriteDoubleValue","parameterTypes":[] }, {"name":"writeFloat_shouldWriteFloatValue","parameterTypes":[] }, {"name":"writeInt_shouldWriteIntValue","parameterTypes":[] }, {"name":"writeJsonNodeObject_shouldWriteObjectAsJson","parameterTypes":[] }, {"name":"writeListObject_shouldWriteListAsArray","parameterTypes":[] }, {"name":"writeLong_shouldWriteLongValue","parameterTypes":[] }, {"name":"writeMapObject_shouldWriteMapAsJson","parameterTypes":[] }, {"name":"writeNull_shouldWriteNullValue","parameterTypes":[] }, {"name":"writeStringObject_shouldWriteStringWithQuotes","parameterTypes":[] }, {"name":"writeString_shouldWriteStringWithQuotes","parameterTypes":[] }, {"name":"writeTreeNodeArrayObject_shouldWriteObjectAsJson","parameterTypes":[] }, {"name":"writeTreeNodeObject_shouldWriteObjectAsJson","parameterTypes":[] }]
627-
},
628627
{
629628
"name":"software.amazon.lambda.powertools.logging.internal.LambdaLoggingAspect",
630629
"fields":[{"name":"LEVEL_AT_INITIALISATION"}],
631630
"methods":[{"name":"setLogLevels","parameterTypes":["org.slf4j.event.Level"] }]
632631
},
633-
{
634-
"name":"software.amazon.lambda.powertools.logging.internal.LambdaLoggingAspectTest",
635-
"allDeclaredFields":true,
636-
"allDeclaredClasses":true,
637-
"queryAllDeclaredMethods":true,
638-
"queryAllPublicMethods":true,
639-
"queryAllDeclaredConstructors":true,
640-
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"cleanUp","parameterTypes":[] }, {"name":"setUp","parameterTypes":[] }, {"name":"shouldClearStateWhenClearStateIsTrue","parameterTypes":[] }, {"name":"shouldHaveNoEffectIfNotUsedOnLambdaHandler","parameterTypes":[] }, {"name":"shouldLogCorrelationIdOnALBEvent","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ApplicationLoadBalancerRequestEvent"] }, {"name":"shouldLogCorrelationIdOnAPIGatewayProxyRequestEvent","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"shouldLogCorrelationIdOnAPIGatewayV2HTTPEvent","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent"] }, {"name":"shouldLogCorrelationIdOnAppSyncEvent","parameterTypes":[] }, {"name":"shouldLogCorrelationIdOnStreamHandler","parameterTypes":[] }, {"name":"shouldLogDebugWhenPowertoolsLevelEnvVarIsDebug","parameterTypes":[] }, {"name":"shouldLogDebugWhenSamplingEnvVarEqualsOne","parameterTypes":[] }, {"name":"shouldLogDebugWhenSamplingEqualsOne","parameterTypes":[] }, {"name":"shouldLogErrorForHandlerWhenEnvVariableSetToTrue","parameterTypes":[] }, {"name":"shouldLogErrorForHandlerWithLogErrorAnnotation","parameterTypes":[] }, {"name":"shouldLogErrorWhenPowertoolsLevelEnvVarIsError","parameterTypes":[] }, {"name":"shouldLogErrorWhenPowertoolsLevelEnvVarIsFatal","parameterTypes":[] }, {"name":"shouldLogEventForHandlerWhenEnvVariableSetToTrue","parameterTypes":[] }, {"name":"shouldLogEventForHandlerWithLogEventAnnotation","parameterTypes":[] }, {"name":"shouldLogEventForStreamHandler","parameterTypes":[] }, {"name":"shouldLogInfoWhenPowertoolsLevelEnvVarIsInfo","parameterTypes":[] }, {"name":"shouldLogInfoWhenPowertoolsLevelEnvVarIsInfoAndLambdaLevelVarIsWarn","parameterTypes":[] }, {"name":"shouldLogInfoWhenPowertoolsLevelEnvVarIsInvalid","parameterTypes":[] }, {"name":"shouldLogResponseForHandlerWhenEnvVariableSetToTrue","parameterTypes":[] }, {"name":"shouldLogResponseForHandlerWithLogResponseAnnotation","parameterTypes":[] }, {"name":"shouldLogResponseForStreamHandler","parameterTypes":[] }, {"name":"shouldLogServiceNameWhenEnvVarSet","parameterTypes":[] }, {"name":"shouldLogWarnWhenPowertoolsLevelEnvVarINotSetAndLambdaLevelVarIsWarn","parameterTypes":[] }, {"name":"shouldLogWarnWhenPowertoolsLevelEnvVarIsWarn","parameterTypes":[] }, {"name":"shouldLogWarnWhenPowertoolsLevelEnvVarIsWarnAndLambdaLevelVarIsInfo","parameterTypes":[] }, {"name":"shouldNotLogDebugWhenSamplingEnvVarIsInvalid","parameterTypes":[] }, {"name":"shouldNotLogDebugWhenSamplingEnvVarIsTooBig","parameterTypes":[] }, {"name":"shouldNotLogDebugWhenSamplingEqualsZero","parameterTypes":[] }, {"name":"shouldNotLogEventForHandlerWhenEnvVariableSetToFalse","parameterTypes":[] }, {"name":"shouldNotSetLambdaContextForStreamHandlerWhenDisabled","parameterTypes":[] }, {"name":"shouldNotSetLambdaContextWhenDisabled","parameterTypes":[] }, {"name":"shouldSetColdStartFlagOnFirstCallNotOnSecondCall","parameterTypes":[] }, {"name":"shouldSetLambdaContextForStreamHandlerWhenEnabled","parameterTypes":[] }, {"name":"shouldSetLambdaContextWhenEnabled","parameterTypes":[] }, {"name":"testMultipleLoggingManagers_shouldWarnAndSelectFirstOne","parameterTypes":[] }, {"name":"testNoLoggingManagers_shouldWarnAndCreateDefault","parameterTypes":[] }]
641-
},
642632
{
643633
"name":"software.amazon.lambda.powertools.logging.internal.LoggingConstants",
644634
"fields":[{"name":"LAMBDA_LOG_LEVEL"}, {"name":"POWERTOOLS_LOG_EVENT"}, {"name":"POWERTOOLS_LOG_LEVEL"}, {"name":"POWERTOOLS_SAMPLING_RATE"}]

powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspectTest.java

+16-25
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,8 @@
1818
import static org.apache.commons.lang3.reflect.FieldUtils.writeStaticField;
1919
import static org.assertj.core.api.Assertions.assertThat;
2020
import static org.assertj.core.api.Assertions.contentOf;
21-
import static org.mockito.Mockito.mockStatic;
2221
import static org.mockito.Mockito.when;
2322
import static org.mockito.MockitoAnnotations.openMocks;
24-
import static software.amazon.lambda.powertools.common.internal.SystemWrapper.getProperty;
25-
import static software.amazon.lambda.powertools.common.internal.SystemWrapper.getenv;
2623
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_ARN;
2724
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_COLD_START;
2825
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_MEMORY_SIZE;
@@ -62,6 +59,9 @@
6259
import org.junit.jupiter.api.BeforeEach;
6360
import org.junit.jupiter.api.Test;
6461
import org.junit.jupiter.params.ParameterizedTest;
62+
import org.junitpioneer.jupiter.ClearEnvironmentVariable;
63+
import org.junitpioneer.jupiter.SetEnvironmentVariable;
64+
import org.junitpioneer.jupiter.SetSystemProperty;
6565
import org.mockito.Mock;
6666
import org.mockito.MockedStatic;
6767
import org.slf4j.Logger;
@@ -426,40 +426,31 @@ void shouldLogServiceNameWhenEnvVarSet() throws IllegalAccessException {
426426
}
427427

428428
@Test
429+
@ClearEnvironmentVariable(key = "_X_AMZN_TRACE_ID")
430+
@SetSystemProperty(key = "com.amazonaws.xray.traceHeader", value = "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1")
429431
void shouldLogxRayTraceIdSystemPropertySet() {
430432
String xRayTraceId = "1-5759e988-bd862e3fe1be46a994272793";
431433

432-
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
433-
mocked.when(() -> getenv("_X_AMZN_TRACE_ID"))
434-
.thenReturn(null);
435-
mocked.when(() -> getProperty("com.amazonaws.xray.traceHeader"))
436-
.thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1");
437-
438-
requestHandler.handleRequest(new Object(), context);
434+
requestHandler.handleRequest(new Object(), context);
439435

440-
assertThat(MDC.getCopyOfContextMap())
441-
.hasSize(EXPECTED_CONTEXT_SIZE + 1)
442-
.containsEntry("xray_trace_id", xRayTraceId);
443-
}
436+
assertThat(MDC.getCopyOfContextMap())
437+
.hasSize(EXPECTED_CONTEXT_SIZE + 1)
438+
.containsEntry("xray_trace_id", xRayTraceId);
444439
}
445440

446441
@Test
442+
@SetEnvironmentVariable(key = "_X_AMZN_TRACE_ID", value = "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1")
447443
void shouldLogxRayTraceIdEnvVarSet() {
448444
// GIVEN
449445
String xRayTraceId = "1-5759e988-bd862e3fe1be46a994272793";
450446

451-
try (MockedStatic<SystemWrapper> mocked = mockStatic(SystemWrapper.class)) {
452-
mocked.when(() -> getenv("_X_AMZN_TRACE_ID"))
453-
.thenReturn("Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1");
454-
455-
// WHEN
456-
requestHandler.handleRequest(new Object(), context);
447+
// WHEN
448+
requestHandler.handleRequest(new Object(), context);
457449

458-
// THEN
459-
assertThat(MDC.getCopyOfContextMap())
460-
.hasSize(EXPECTED_CONTEXT_SIZE + 1)
461-
.containsEntry(FUNCTION_TRACE_ID.getName(), xRayTraceId);
462-
}
450+
// THEN
451+
assertThat(MDC.getCopyOfContextMap())
452+
.hasSize(EXPECTED_CONTEXT_SIZE + 1)
453+
.containsEntry(FUNCTION_TRACE_ID.getName(), xRayTraceId);
463454
}
464455

465456
@Test

0 commit comments

Comments
 (0)