Skip to content

Commit c95639b

Browse files
committed
Prevent race when validating logs by only examining logs from Session #135
1 parent ae24eea commit c95639b

File tree

2 files changed

+38
-39
lines changed

2 files changed

+38
-39
lines changed

test/Microsoft.AspNetCore.Session.Tests/SessionTests.cs

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,9 @@ public async Task ClearedItemsCannotBeAccessedAgain()
288288
[Fact]
289289
public async Task SessionStart_LogsInformation()
290290
{
291-
var sink = new TestSink();
291+
var sink = new TestSink(
292+
TestSink.EnableWithTypeName<DistributedSession>,
293+
TestSink.EnableWithTypeName<DistributedSession>);
292294
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
293295
var builder = new WebHostBuilder()
294296
.Configure(app =>
@@ -314,9 +316,9 @@ public async Task SessionStart_LogsInformation()
314316
response.EnsureSuccessStatusCode();
315317
}
316318

317-
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
319+
var sessionLogMessages = sink.Writes;
318320

319-
Assert.Equal(2, sessionLogMessages.Length);
321+
Assert.Equal(2, sessionLogMessages.Count);
320322
Assert.Contains("started", sessionLogMessages[0].State.ToString());
321323
Assert.Equal(LogLevel.Information, sessionLogMessages[0].LogLevel);
322324
Assert.Contains("stored", sessionLogMessages[1].State.ToString());
@@ -326,7 +328,9 @@ public async Task SessionStart_LogsInformation()
326328
[Fact]
327329
public async Task ExpiredSession_LogsWarning()
328330
{
329-
var sink = new TestSink();
331+
var sink = new TestSink(
332+
TestSink.EnableWithTypeName<DistributedSession>,
333+
TestSink.EnableWithTypeName<DistributedSession>);
330334
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
331335
var builder = new WebHostBuilder()
332336
.Configure(app =>
@@ -370,10 +374,10 @@ public async Task ExpiredSession_LogsWarning()
370374
result = await client.GetStringAsync("/second");
371375
}
372376

373-
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
377+
var sessionLogMessages = sink.Writes;
374378

375379
Assert.Equal("2", result);
376-
Assert.Equal(3, sessionLogMessages.Length);
380+
Assert.Equal(3, sessionLogMessages.Count);
377381
Assert.Contains("started", sessionLogMessages[0].State.ToString());
378382
Assert.Contains("stored", sessionLogMessages[1].State.ToString());
379383
Assert.Contains("expired", sessionLogMessages[2].State.ToString());
@@ -551,7 +555,9 @@ public async Task SessionKeys_AreCaseSensitive()
551555
[Fact]
552556
public async Task SessionLogsCacheReadException()
553557
{
554-
var sink = new TestSink();
558+
var sink = new TestSink(
559+
TestSink.EnableWithTypeName<DistributedSession>,
560+
TestSink.EnableWithTypeName<DistributedSession>);
555561
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
556562
var builder = new WebHostBuilder()
557563
.Configure(app =>
@@ -584,17 +590,27 @@ public async Task SessionLogsCacheReadException()
584590
response.EnsureSuccessStatusCode();
585591
}
586592

587-
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
593+
var sessionLogMessages = sink.Writes;
588594

589-
Assert.Equal(1, sessionLogMessages.Length);
595+
Assert.Equal(1, sessionLogMessages.Count);
590596
Assert.Contains("Session cache read exception", sessionLogMessages[0].State.ToString());
591597
Assert.Equal(LogLevel.Error, sessionLogMessages[0].LogLevel);
592598
}
593599

594600
[Fact]
595601
public async Task SessionLogsCacheWriteException()
596602
{
597-
var sink = new TestSink();
603+
var sink = new TestSink(
604+
writeContext =>
605+
{
606+
return writeContext.LoggerName.Equals(typeof(SessionMiddleware).FullName)
607+
|| writeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
608+
},
609+
beginScopeContext =>
610+
{
611+
return beginScopeContext.LoggerName.Equals(typeof(SessionMiddleware).FullName)
612+
|| beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
613+
});
598614
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
599615
var builder = new WebHostBuilder()
600616
.Configure(app =>
@@ -623,22 +639,23 @@ public async Task SessionLogsCacheWriteException()
623639
response.EnsureSuccessStatusCode();
624640
}
625641

626-
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
642+
var sessionLogMessage = sink.Writes.Where(message => message.LoggerName.Equals(typeof(DistributedSession).FullName, StringComparison.Ordinal)).Single();
627643

628-
Assert.Equal(1, sessionLogMessages.Length);
629-
Assert.Contains("Session started", sessionLogMessages[0].State.ToString());
630-
Assert.Equal(LogLevel.Information, sessionLogMessages[0].LogLevel);
644+
Assert.Contains("Session started", sessionLogMessage.State.ToString());
645+
Assert.Equal(LogLevel.Information, sessionLogMessage.LogLevel);
646+
647+
var sessionMiddlewareLogMessage = sink.Writes.Where(message => message.LoggerName.Equals(typeof(SessionMiddleware).FullName, StringComparison.Ordinal)).Single();
631648

632-
var sessionMiddlewareLogMessages = sink.Writes.OnlyMessagesFromSource<SessionMiddleware>().ToArray();
633-
Assert.Equal(1, sessionMiddlewareLogMessages.Length);
634-
Assert.Contains("Error closing the session.", sessionMiddlewareLogMessages[0].State.ToString());
635-
Assert.Equal(LogLevel.Error, sessionMiddlewareLogMessages[0].LogLevel);
649+
Assert.Contains("Error closing the session.", sessionMiddlewareLogMessage.State.ToString());
650+
Assert.Equal(LogLevel.Error, sessionMiddlewareLogMessage.LogLevel);
636651
}
637652

638653
[Fact]
639654
public async Task SessionLogsCacheRefreshException()
640655
{
641-
var sink = new TestSink();
656+
var sink = new TestSink(
657+
TestSink.EnableWithTypeName<SessionMiddleware>,
658+
TestSink.EnableWithTypeName<SessionMiddleware>);
642659
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
643660
var builder = new WebHostBuilder()
644661
.Configure(app =>
@@ -667,9 +684,9 @@ public async Task SessionLogsCacheRefreshException()
667684
response.EnsureSuccessStatusCode();
668685
}
669686

670-
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<SessionMiddleware>().ToArray();
687+
var sessionLogMessages = sink.Writes;
671688

672-
Assert.Equal(1, sessionLogMessages.Length);
689+
Assert.Equal(1, sessionLogMessages.Count);
673690
Assert.Contains("Error closing the session.", sessionLogMessages[0].State.ToString());
674691
Assert.Equal(LogLevel.Error, sessionLogMessages[0].LogLevel);
675692
}

test/Microsoft.AspNetCore.Session.Tests/TestExtensions.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)