Skip to content

Commit dbd4bf3

Browse files
authored
Merge pull request #202 from hjgraca/fix-test-json-escaping
bug: fix flaky test, add relaxed json escaping
2 parents fae639d + dbcd4e8 commit dbd4bf3

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

libraries/src/AWS.Lambda.Powertools.Logging/Internal/PowertoolsLogger.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System;
1717
using System.Collections.Generic;
1818
using System.Linq;
19+
using System.Text.Encodings.Web;
1920
using System.Text.Json;
2021
using AWS.Lambda.Powertools.Common;
2122
using AWS.Lambda.Powertools.Logging.Internal.Converters;
@@ -355,6 +356,9 @@ private JsonSerializerOptions BuildJsonSerializerOptions()
355356
jsonOptions.Converters.Add(new ExceptionConverter());
356357
jsonOptions.Converters.Add(new MemoryStreamConverter());
357358
jsonOptions.Converters.Add(new ConstantClassConverter());
359+
360+
jsonOptions.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
361+
358362
return jsonOptions;
359363
}
360364
}

libraries/tests/AWS.Lambda.Powertools.Logging.Tests/PowertoolsLoggerTest.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Globalization;
1919
using System.IO;
2020
using System.Linq;
21+
using System.Text;
2122
using AWS.Lambda.Powertools.Common;
2223
using AWS.Lambda.Powertools.Logging.Internal;
2324
using Microsoft.Extensions.Logging;
@@ -1175,5 +1176,49 @@ public void Log_WhenMemoryStream_LogsBase64String()
11751176
)
11761177
), Times.Once);
11771178
}
1179+
1180+
[Fact]
1181+
public void Log_WhenMemoryStream_LogsBase64String_UnsafeRelaxedJsonEscaping()
1182+
{
1183+
// Arrange
1184+
var loggerName = Guid.NewGuid().ToString();
1185+
var service = Guid.NewGuid().ToString();
1186+
1187+
// This will produce the encoded string dW5zYWZlIHN0cmluZyB+IHRlc3Q= (which has a plus sign to test unsafe escaping)
1188+
var bytes = Encoding.UTF8.GetBytes("unsafe string ~ test");
1189+
1190+
var memoryStream = new MemoryStream(bytes)
1191+
{
1192+
Position = 0
1193+
};
1194+
var logLevel = LogLevel.Information;
1195+
var randomSampleRate = 0.5;
1196+
1197+
var configurations = new Mock<IPowertoolsConfigurations>();
1198+
configurations.Setup(c => c.Service).Returns(service);
1199+
configurations.Setup(c => c.LogLevel).Returns(logLevel.ToString);
1200+
1201+
var systemWrapper = new Mock<ISystemWrapper>();
1202+
systemWrapper.Setup(c => c.GetRandom()).Returns(randomSampleRate);
1203+
1204+
var logger = new PowertoolsLogger(loggerName, configurations.Object, systemWrapper.Object, () =>
1205+
new LoggerConfiguration
1206+
{
1207+
Service = null,
1208+
MinimumLevel = null
1209+
});
1210+
1211+
// Act
1212+
logger.LogInformation(new { Name = "Test Object", Stream = memoryStream });
1213+
1214+
// Assert
1215+
systemWrapper.Verify(v =>
1216+
v.LogLine(
1217+
It.Is<string>
1218+
(s =>
1219+
s.Contains("\"stream\":\"" + Convert.ToBase64String(bytes) + "\"")
1220+
)
1221+
), Times.Once);
1222+
}
11781223
}
11791224
}

0 commit comments

Comments
 (0)