1414
1515package software .amazon .lambda .powertools .logging .internal ;
1616
17- import static java .util .Collections .emptyMap ;
18- import static java .util .Collections .singletonList ;
19- import static java .util .stream .Collectors .joining ;
20- import static org .apache .commons .lang3 .reflect .FieldUtils .writeStaticField ;
21- import static org .assertj .core .api .Assertions .assertThat ;
22- import static org .assertj .core .api .Assertions .fail ;
23- import static org .mockito .Mockito .mockStatic ;
24- import static org .mockito .Mockito .when ;
25- import static org .mockito .MockitoAnnotations .openMocks ;
26- import static org .skyscreamer .jsonassert .JSONAssert .assertEquals ;
27- import static software .amazon .lambda .powertools .core .internal .SystemWrapper .getProperty ;
28- import static software .amazon .lambda .powertools .core .internal .SystemWrapper .getenv ;
29-
3017import com .amazonaws .services .lambda .runtime .Context ;
3118import com .amazonaws .services .lambda .runtime .RequestHandler ;
3219import com .amazonaws .services .lambda .runtime .RequestStreamHandler ;
3724import com .amazonaws .services .lambda .runtime .tests .annotations .Event ;
3825import com .fasterxml .jackson .core .JsonProcessingException ;
3926import com .fasterxml .jackson .databind .ObjectMapper ;
40- import java .io .BufferedReader ;
41- import java .io .ByteArrayInputStream ;
42- import java .io .ByteArrayOutputStream ;
43- import java .io .IOException ;
44- import java .io .InputStreamReader ;
45- import java .lang .reflect .InvocationTargetException ;
46- import java .lang .reflect .Method ;
47- import java .nio .channels .FileChannel ;
48- import java .nio .charset .StandardCharsets ;
49- import java .nio .file .Files ;
50- import java .nio .file .Paths ;
51- import java .nio .file .StandardOpenOption ;
52- import java .util .List ;
53- import java .util .Map ;
54- import java .util .stream .Collectors ;
5527import org .apache .logging .log4j .Level ;
5628import org .apache .logging .log4j .ThreadContext ;
5729import org .json .JSONException ;
30+ import org .junit .jupiter .api .Assertions ;
5831import org .junit .jupiter .api .BeforeEach ;
5932import org .junit .jupiter .api .Test ;
6033import org .junit .jupiter .params .ParameterizedTest ;
6134import org .mockito .Mock ;
6235import org .mockito .MockedStatic ;
6336import software .amazon .lambda .powertools .core .internal .LambdaHandlerProcessor ;
6437import software .amazon .lambda .powertools .core .internal .SystemWrapper ;
65- import software .amazon .lambda .powertools .logging .handlers .PowerLogToolApiGatewayHttpApiCorrelationId ;
66- import software .amazon .lambda .powertools .logging .handlers .PowerLogToolApiGatewayRestApiCorrelationId ;
67- import software .amazon .lambda .powertools .logging .handlers .PowerLogToolEnabled ;
68- import software .amazon .lambda .powertools .logging .handlers .PowerLogToolEnabledForStream ;
69- import software .amazon .lambda .powertools .logging .handlers .PowerToolDisabled ;
70- import software .amazon .lambda .powertools .logging .handlers .PowerToolDisabledForStream ;
71- import software .amazon .lambda .powertools .logging .handlers .PowerToolLogEventEnabled ;
72- import software .amazon .lambda .powertools .logging .handlers .PowerToolLogEventEnabledForStream ;
73- import software .amazon .lambda .powertools .logging .handlers .PowerToolLogEventEnabledWithCustomMapper ;
74- import software .amazon .lambda .powertools .logging .handlers .PowertoolsLogAlbCorrelationId ;
75- import software .amazon .lambda .powertools .logging .handlers .PowertoolsLogEnabledWithClearState ;
76- import software .amazon .lambda .powertools .logging .handlers .PowertoolsLogEventBridgeCorrelationId ;
38+ import software .amazon .lambda .powertools .logging .handlers .*;
39+
40+ import java .io .*;
41+ import java .lang .reflect .InvocationTargetException ;
42+ import java .lang .reflect .Method ;
43+ import java .nio .channels .FileChannel ;
44+ import java .nio .charset .StandardCharsets ;
45+ import java .nio .file .Files ;
46+ import java .nio .file .Paths ;
47+ import java .nio .file .StandardOpenOption ;
48+ import java .util .List ;
49+ import java .util .Map ;
50+ import java .util .stream .Collectors ;
51+
52+ import static java .util .Collections .emptyMap ;
53+ import static java .util .Collections .singletonList ;
54+ import static java .util .stream .Collectors .joining ;
55+ import static org .apache .commons .lang3 .reflect .FieldUtils .writeStaticField ;
56+ import static org .assertj .core .api .Assertions .assertThat ;
57+ import static org .assertj .core .api .Assertions .fail ;
58+ import static org .junit .jupiter .api .Assertions .assertTrue ;
59+ import static org .mockito .Mockito .mockStatic ;
60+ import static org .mockito .Mockito .when ;
61+ import static org .mockito .MockitoAnnotations .openMocks ;
62+ import static org .skyscreamer .jsonassert .JSONAssert .assertEquals ;
63+ import static software .amazon .lambda .powertools .core .internal .SystemWrapper .getProperty ;
64+ import static software .amazon .lambda .powertools .core .internal .SystemWrapper .getenv ;
7765
7866class LambdaLoggingAspectTest {
7967
@@ -116,7 +104,7 @@ void shouldSetLambdaContextWhenEnabled() {
116104 void shouldSetLambdaContextForStreamHandlerWhenEnabled () throws IOException {
117105 requestStreamHandler = new PowerLogToolEnabledForStream ();
118106
119- requestStreamHandler .handleRequest (new ByteArrayInputStream (new byte [] {}), new ByteArrayOutputStream (),
107+ requestStreamHandler .handleRequest (new ByteArrayInputStream (new byte []{}), new ByteArrayOutputStream (),
120108 context );
121109
122110 assertThat (ThreadContext .getImmutableContext ())
@@ -132,14 +120,14 @@ void shouldSetLambdaContextForStreamHandlerWhenEnabled() throws IOException {
132120
133121 @ Test
134122 void shouldSetColdStartFlag () throws IOException {
135- requestStreamHandler .handleRequest (new ByteArrayInputStream (new byte [] {}), new ByteArrayOutputStream (),
123+ requestStreamHandler .handleRequest (new ByteArrayInputStream (new byte []{}), new ByteArrayOutputStream (),
136124 context );
137125
138126 assertThat (ThreadContext .getImmutableContext ())
139127 .hasSize (EXPECTED_CONTEXT_SIZE )
140128 .containsEntry ("coldStart" , "true" );
141129
142- requestStreamHandler .handleRequest (new ByteArrayInputStream (new byte [] {}), new ByteArrayOutputStream (),
130+ requestStreamHandler .handleRequest (new ByteArrayInputStream (new byte []{}), new ByteArrayOutputStream (),
143131 context );
144132
145133 assertThat (ThreadContext .getImmutableContext ())
@@ -195,6 +183,51 @@ void shouldLogEventForHandler() throws IOException, JSONException {
195183 assertEquals (expectEvent , event , false );
196184 }
197185
186+ /**
187+ * If POWERTOOLS_LOGGER_LOG_EVENT was set to true, the handler should log, despite @Logging(logEvent=false)
188+ *
189+ * @throws IOException
190+ */
191+ @ Test
192+ void shouldLogEventForHandlerWhenEnvVariableSetToTrue () throws IOException , IllegalAccessException , JSONException {
193+ try {
194+ writeStaticField (LambdaLoggingAspect .class , "LOG_EVENT" , Boolean .TRUE , true );
195+
196+ requestHandler = new PowerToolLogEventDisabled ();
197+ S3EventNotification s3EventNotification = s3EventNotification ();
198+
199+ requestHandler .handleRequest (s3EventNotification , context );
200+
201+ Map <String , Object > log = parseToMap (Files .lines (Paths .get ("target/logfile.json" )).collect (joining ()));
202+
203+ String event = (String ) log .get ("message" );
204+
205+ String expectEvent = new BufferedReader (
206+ new InputStreamReader (this .getClass ().getResourceAsStream ("/s3EventNotification.json" )))
207+ .lines ().collect (joining ("\n " ));
208+
209+ assertEquals (expectEvent , event , false );
210+ } finally {
211+ writeStaticField (LambdaLoggingAspect .class , "LOG_EVENT" , Boolean .FALSE , true );
212+ }
213+ }
214+
215+ /**
216+ * If POWERTOOLS_LOGGER_LOG_EVENT was set to false and @Logging(logEvent=false), the handler shouldn't log
217+ *
218+ * @throws IOException
219+ */
220+ @ Test
221+ void shouldNotLogEventForHandlerWhenEnvVariableSetToFalse () throws IOException {
222+ requestHandler = new PowerToolLogEventDisabled ();
223+ S3EventNotification s3EventNotification = s3EventNotification ();
224+
225+ requestHandler .handleRequest (s3EventNotification , context );
226+
227+ Assertions .assertEquals (0 ,
228+ Files .lines (Paths .get ("target/logfile.json" )).collect (joining ()).length ());
229+ }
230+
198231 @ Test
199232 void shouldLogEventForHandlerWithOverriddenObjectMapper () throws IOException , JSONException {
200233 RequestHandler <S3EventNotification , Object > handler = new PowerToolLogEventEnabledWithCustomMapper ();
0 commit comments