Prevent race when validating logs by only examining logs from Session #135
This commit is contained in:
parent
ae24eea1a1
commit
c95639b886
|
|
@ -288,7 +288,9 @@ namespace Microsoft.AspNetCore.Session
|
|||
[Fact]
|
||||
public async Task SessionStart_LogsInformation()
|
||||
{
|
||||
var sink = new TestSink();
|
||||
var sink = new TestSink(
|
||||
TestSink.EnableWithTypeName<DistributedSession>,
|
||||
TestSink.EnableWithTypeName<DistributedSession>);
|
||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||
var builder = new WebHostBuilder()
|
||||
.Configure(app =>
|
||||
|
|
@ -314,9 +316,9 @@ namespace Microsoft.AspNetCore.Session
|
|||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
|
||||
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
|
||||
var sessionLogMessages = sink.Writes;
|
||||
|
||||
Assert.Equal(2, sessionLogMessages.Length);
|
||||
Assert.Equal(2, sessionLogMessages.Count);
|
||||
Assert.Contains("started", sessionLogMessages[0].State.ToString());
|
||||
Assert.Equal(LogLevel.Information, sessionLogMessages[0].LogLevel);
|
||||
Assert.Contains("stored", sessionLogMessages[1].State.ToString());
|
||||
|
|
@ -326,7 +328,9 @@ namespace Microsoft.AspNetCore.Session
|
|||
[Fact]
|
||||
public async Task ExpiredSession_LogsWarning()
|
||||
{
|
||||
var sink = new TestSink();
|
||||
var sink = new TestSink(
|
||||
TestSink.EnableWithTypeName<DistributedSession>,
|
||||
TestSink.EnableWithTypeName<DistributedSession>);
|
||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||
var builder = new WebHostBuilder()
|
||||
.Configure(app =>
|
||||
|
|
@ -370,10 +374,10 @@ namespace Microsoft.AspNetCore.Session
|
|||
result = await client.GetStringAsync("/second");
|
||||
}
|
||||
|
||||
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
|
||||
var sessionLogMessages = sink.Writes;
|
||||
|
||||
Assert.Equal("2", result);
|
||||
Assert.Equal(3, sessionLogMessages.Length);
|
||||
Assert.Equal(3, sessionLogMessages.Count);
|
||||
Assert.Contains("started", sessionLogMessages[0].State.ToString());
|
||||
Assert.Contains("stored", sessionLogMessages[1].State.ToString());
|
||||
Assert.Contains("expired", sessionLogMessages[2].State.ToString());
|
||||
|
|
@ -551,7 +555,9 @@ namespace Microsoft.AspNetCore.Session
|
|||
[Fact]
|
||||
public async Task SessionLogsCacheReadException()
|
||||
{
|
||||
var sink = new TestSink();
|
||||
var sink = new TestSink(
|
||||
TestSink.EnableWithTypeName<DistributedSession>,
|
||||
TestSink.EnableWithTypeName<DistributedSession>);
|
||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||
var builder = new WebHostBuilder()
|
||||
.Configure(app =>
|
||||
|
|
@ -584,9 +590,9 @@ namespace Microsoft.AspNetCore.Session
|
|||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
|
||||
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
|
||||
var sessionLogMessages = sink.Writes;
|
||||
|
||||
Assert.Equal(1, sessionLogMessages.Length);
|
||||
Assert.Equal(1, sessionLogMessages.Count);
|
||||
Assert.Contains("Session cache read exception", sessionLogMessages[0].State.ToString());
|
||||
Assert.Equal(LogLevel.Error, sessionLogMessages[0].LogLevel);
|
||||
}
|
||||
|
|
@ -594,7 +600,17 @@ namespace Microsoft.AspNetCore.Session
|
|||
[Fact]
|
||||
public async Task SessionLogsCacheWriteException()
|
||||
{
|
||||
var sink = new TestSink();
|
||||
var sink = new TestSink(
|
||||
writeContext =>
|
||||
{
|
||||
return writeContext.LoggerName.Equals(typeof(SessionMiddleware).FullName)
|
||||
|| writeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
|
||||
},
|
||||
beginScopeContext =>
|
||||
{
|
||||
return beginScopeContext.LoggerName.Equals(typeof(SessionMiddleware).FullName)
|
||||
|| beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
|
||||
});
|
||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||
var builder = new WebHostBuilder()
|
||||
.Configure(app =>
|
||||
|
|
@ -623,22 +639,23 @@ namespace Microsoft.AspNetCore.Session
|
|||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
|
||||
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<DistributedSession>().ToArray();
|
||||
var sessionLogMessage = sink.Writes.Where(message => message.LoggerName.Equals(typeof(DistributedSession).FullName, StringComparison.Ordinal)).Single();
|
||||
|
||||
Assert.Equal(1, sessionLogMessages.Length);
|
||||
Assert.Contains("Session started", sessionLogMessages[0].State.ToString());
|
||||
Assert.Equal(LogLevel.Information, sessionLogMessages[0].LogLevel);
|
||||
Assert.Contains("Session started", sessionLogMessage.State.ToString());
|
||||
Assert.Equal(LogLevel.Information, sessionLogMessage.LogLevel);
|
||||
|
||||
var sessionMiddlewareLogMessages = sink.Writes.OnlyMessagesFromSource<SessionMiddleware>().ToArray();
|
||||
Assert.Equal(1, sessionMiddlewareLogMessages.Length);
|
||||
Assert.Contains("Error closing the session.", sessionMiddlewareLogMessages[0].State.ToString());
|
||||
Assert.Equal(LogLevel.Error, sessionMiddlewareLogMessages[0].LogLevel);
|
||||
var sessionMiddlewareLogMessage = sink.Writes.Where(message => message.LoggerName.Equals(typeof(SessionMiddleware).FullName, StringComparison.Ordinal)).Single();
|
||||
|
||||
Assert.Contains("Error closing the session.", sessionMiddlewareLogMessage.State.ToString());
|
||||
Assert.Equal(LogLevel.Error, sessionMiddlewareLogMessage.LogLevel);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SessionLogsCacheRefreshException()
|
||||
{
|
||||
var sink = new TestSink();
|
||||
var sink = new TestSink(
|
||||
TestSink.EnableWithTypeName<SessionMiddleware>,
|
||||
TestSink.EnableWithTypeName<SessionMiddleware>);
|
||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||
var builder = new WebHostBuilder()
|
||||
.Configure(app =>
|
||||
|
|
@ -667,9 +684,9 @@ namespace Microsoft.AspNetCore.Session
|
|||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
|
||||
var sessionLogMessages = sink.Writes.OnlyMessagesFromSource<SessionMiddleware>().ToArray();
|
||||
var sessionLogMessages = sink.Writes;
|
||||
|
||||
Assert.Equal(1, sessionLogMessages.Length);
|
||||
Assert.Equal(1, sessionLogMessages.Count);
|
||||
Assert.Contains("Error closing the session.", sessionLogMessages[0].State.ToString());
|
||||
Assert.Equal(LogLevel.Error, sessionLogMessages[0].LogLevel);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.Logging.Testing;
|
||||
|
||||
namespace Microsoft.AspNetCore.Session
|
||||
{
|
||||
public static class TestExtensions
|
||||
{
|
||||
public static IEnumerable<WriteContext> OnlyMessagesFromSource<T>(this IEnumerable<WriteContext> source)
|
||||
{
|
||||
return source.Where(message => message.LoggerName.Equals(typeof(T).FullName, StringComparison.Ordinal));
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue