Skip to content

Commit

Permalink
[alc] fix nullpointer exception when logging null (#38) (#439)
Browse files Browse the repository at this point in the history
* [alc] fix nullpointer exception when logging null

---------

Co-authored-by: Daniel Torok <torokd@amazon.com>
  • Loading branch information
dtorok and dtorok committed Sep 4, 2023
1 parent 5594241 commit 5777886
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ public AbstractLambdaLogger(LogLevel logLevel, LogFormat logFormat) {
protected abstract void logMessage(byte[] message, LogLevel logLevel);

protected void logMessage(String message, LogLevel logLevel) {
logMessage(message.getBytes(UTF_8), logLevel);
byte[] messageBytes = message == null ? null : message.getBytes(UTF_8);
logMessage(messageBytes, logLevel);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,26 @@


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

public TestLogger(LogLevel logLevel, LogFormat logFormat) {
super(logLevel, logFormat);
public TestSink() {
}

@Override
protected void logMessage(byte[] message, LogLevel logLevel) {
public void log(byte[] message) {
messages.add(message);
}

@Override
public void log(LogLevel logLevel, LogFormat logFormat, byte[] message) {
messages.add(message);
}

@Override
public void close() {
}

List<byte[]> getMessages() {
return messages;
}
Expand All @@ -39,36 +47,97 @@ private void logMessages(LambdaLogger logger) {
logger.log("fatal", LogLevel.FATAL);
}

@Test
public void testLoggingNullValuesWithoutLogLevelInText() {
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.TEXT);

String isNullString = null;
byte[] isNullBytes = null;

logger.log(isNullString);
logger.log(isNullBytes);

assertEquals("null", new String(sink.getMessages().get(0)));
assertEquals("null", new String(sink.getMessages().get(1)));
}

@Test
public void testLoggingNullValuesWithoutLogLevelInJSON() {
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.JSON);

String isNullString = null;
byte[] isNullBytes = null;

logger.log(isNullString);
logger.log(isNullBytes);

assertEquals(2, sink.getMessages().size());
}

@Test
public void testLoggingNullValuesWithLogLevelInText() {
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.TEXT);

String isNullString = null;
byte[] isNullBytes = null;

logger.log(isNullString, LogLevel.ERROR);
logger.log(isNullBytes, LogLevel.ERROR);

assertEquals("[ERROR] null", new String(sink.getMessages().get(0)));
assertEquals("null", new String(sink.getMessages().get(1)));
}

@Test
public void testLoggingNullValuesWithLogLevelInJSON() {
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.JSON);

String isNullString = null;
byte[] isNullBytes = null;

logger.log(isNullString, LogLevel.ERROR);
logger.log(isNullBytes, LogLevel.ERROR);

assertEquals(2, sink.getMessages().size());
}
@Test
public void testWithoutFiltering() {
TestLogger logger = new TestLogger(LogLevel.UNDEFINED, LogFormat.TEXT);
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.UNDEFINED, LogFormat.TEXT);
logMessages(logger);

assertEquals(6, logger.getMessages().size());
assertEquals(6, sink.getMessages().size());
}

@Test
public void testWithFiltering() {
TestLogger logger = new TestLogger(LogLevel.WARN, LogFormat.TEXT);
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.WARN, LogFormat.TEXT);
logMessages(logger);

assertEquals(3, logger.getMessages().size());
assertEquals(3, sink.getMessages().size());
}

@Test
public void testUndefinedLogLevelWithFiltering() {
TestLogger logger = new TestLogger(LogLevel.WARN, LogFormat.TEXT);
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.WARN, LogFormat.TEXT);
logger.log("undefined");

assertEquals(1, logger.getMessages().size());
assertEquals(1, sink.getMessages().size());
}

@Test
public void testFormattingLogMessages() {
TestLogger logger = new TestLogger(LogLevel.INFO, LogFormat.TEXT);
TestSink sink = new TestSink();
LambdaLogger logger = new LambdaContextLogger(sink, LogLevel.INFO, LogFormat.TEXT);
logger.log("test message", LogLevel.INFO);

assertEquals(1, logger.getMessages().size());
assertEquals("[INFO] test message", new String(logger.getMessages().get(0)));
assertEquals(1, sink.getMessages().size());
assertEquals("[INFO] test message", new String(sink.getMessages().get(0)));
}
}

0 comments on commit 5777886

Please sign in to comment.