Skip to content

Commit 5777886

Browse files
authored
[alc] fix nullpointer exception when logging null (#38) (#439)
* [alc] fix nullpointer exception when logging null --------- Co-authored-by: Daniel Torok <[email protected]>
1 parent 5594241 commit 5777886

File tree

2 files changed

+84
-14
lines changed

2 files changed

+84
-14
lines changed

aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/logging/AbstractLambdaLogger.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public AbstractLambdaLogger(LogLevel logLevel, LogFormat logFormat) {
3333
protected abstract void logMessage(byte[] message, LogLevel logLevel);
3434

3535
protected void logMessage(String message, LogLevel logLevel) {
36-
logMessage(message.getBytes(UTF_8), logLevel);
36+
byte[] messageBytes = message == null ? null : message.getBytes(UTF_8);
37+
logMessage(messageBytes, logLevel);
3738
}
3839

3940
@Override

aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/logging/AbstractLambdaLoggerTest.java

+82-13
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,26 @@
1313

1414

1515
public class AbstractLambdaLoggerTest {
16-
class TestLogger extends AbstractLambdaLogger {
16+
class TestSink implements LogSink {
1717
private List<byte[]> messages = new LinkedList<>();
1818

19-
public TestLogger(LogLevel logLevel, LogFormat logFormat) {
20-
super(logLevel, logFormat);
19+
public TestSink() {
2120
}
2221

2322
@Override
24-
protected void logMessage(byte[] message, LogLevel logLevel) {
23+
public void log(byte[] message) {
2524
messages.add(message);
2625
}
2726

27+
@Override
28+
public void log(LogLevel logLevel, LogFormat logFormat, byte[] message) {
29+
messages.add(message);
30+
}
31+
32+
@Override
33+
public void close() {
34+
}
35+
2836
List<byte[]> getMessages() {
2937
return messages;
3038
}
@@ -39,36 +47,97 @@ private void logMessages(LambdaLogger logger) {
3947
logger.log("fatal", LogLevel.FATAL);
4048
}
4149

50+
@Test
51+
public void testLoggingNullValuesWithoutLogLevelInText() {
52+
TestSink sink = new TestSink();
53+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.TEXT);
54+
55+
String isNullString = null;
56+
byte[] isNullBytes = null;
57+
58+
logger.log(isNullString);
59+
logger.log(isNullBytes);
60+
61+
assertEquals("null", new String(sink.getMessages().get(0)));
62+
assertEquals("null", new String(sink.getMessages().get(1)));
63+
}
64+
65+
@Test
66+
public void testLoggingNullValuesWithoutLogLevelInJSON() {
67+
TestSink sink = new TestSink();
68+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.JSON);
69+
70+
String isNullString = null;
71+
byte[] isNullBytes = null;
72+
73+
logger.log(isNullString);
74+
logger.log(isNullBytes);
75+
76+
assertEquals(2, sink.getMessages().size());
77+
}
78+
79+
@Test
80+
public void testLoggingNullValuesWithLogLevelInText() {
81+
TestSink sink = new TestSink();
82+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.TEXT);
83+
84+
String isNullString = null;
85+
byte[] isNullBytes = null;
86+
87+
logger.log(isNullString, LogLevel.ERROR);
88+
logger.log(isNullBytes, LogLevel.ERROR);
89+
90+
assertEquals("[ERROR] null", new String(sink.getMessages().get(0)));
91+
assertEquals("null", new String(sink.getMessages().get(1)));
92+
}
93+
94+
@Test
95+
public void testLoggingNullValuesWithLogLevelInJSON() {
96+
TestSink sink = new TestSink();
97+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.JSON);
98+
99+
String isNullString = null;
100+
byte[] isNullBytes = null;
101+
102+
logger.log(isNullString, LogLevel.ERROR);
103+
logger.log(isNullBytes, LogLevel.ERROR);
104+
105+
assertEquals(2, sink.getMessages().size());
106+
}
42107
@Test
43108
public void testWithoutFiltering() {
44-
TestLogger logger = new TestLogger(LogLevel.UNDEFINED, LogFormat.TEXT);
109+
TestSink sink = new TestSink();
110+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.UNDEFINED, LogFormat.TEXT);
45111
logMessages(logger);
46112

47-
assertEquals(6, logger.getMessages().size());
113+
assertEquals(6, sink.getMessages().size());
48114
}
49115

50116
@Test
51117
public void testWithFiltering() {
52-
TestLogger logger = new TestLogger(LogLevel.WARN, LogFormat.TEXT);
118+
TestSink sink = new TestSink();
119+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.WARN, LogFormat.TEXT);
53120
logMessages(logger);
54121

55-
assertEquals(3, logger.getMessages().size());
122+
assertEquals(3, sink.getMessages().size());
56123
}
57124

58125
@Test
59126
public void testUndefinedLogLevelWithFiltering() {
60-
TestLogger logger = new TestLogger(LogLevel.WARN, LogFormat.TEXT);
127+
TestSink sink = new TestSink();
128+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.WARN, LogFormat.TEXT);
61129
logger.log("undefined");
62130

63-
assertEquals(1, logger.getMessages().size());
131+
assertEquals(1, sink.getMessages().size());
64132
}
65133

66134
@Test
67135
public void testFormattingLogMessages() {
68-
TestLogger logger = new TestLogger(LogLevel.INFO, LogFormat.TEXT);
136+
TestSink sink = new TestSink();
137+
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.TEXT);
69138
logger.log("test message", LogLevel.INFO);
70139

71-
assertEquals(1, logger.getMessages().size());
72-
assertEquals("[INFO] test message", new String(logger.getMessages().get(0)));
140+
assertEquals(1, sink.getMessages().size());
141+
assertEquals("[INFO] test message", new String(sink.getMessages().get(0)));
73142
}
74143
}

0 commit comments

Comments
 (0)