@@ -21,17 +21,17 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
21
21
public class ConnectionDispatcherTests
22
22
{
23
23
[ Fact ]
24
- public void OnConnectionCreatesLogScopeWithConnectionId ( )
24
+ public async Task OnConnectionCreatesLogScopeWithConnectionId ( )
25
25
{
26
26
var serviceContext = new TestServiceContext ( ) ;
27
27
// This needs to run inline
28
28
var tcs = new TaskCompletionSource < object > ( ) ;
29
- var dispatcher = new ConnectionDispatcher ( serviceContext , _ => tcs . Task ) ;
30
29
31
30
var connection = new Mock < DefaultConnectionContext > { CallBase = true } . Object ;
32
31
connection . ConnectionClosed = new CancellationToken ( canceled : true ) ;
32
+ var kestrelConnection = new KestrelConnection ( 0 , serviceContext , _ => tcs . Task , connection , serviceContext . Log ) ;
33
33
34
- _ = dispatcher . Execute ( new KestrelConnection ( connection , Mock . Of < ILogger > ( ) ) ) ;
34
+ var task = kestrelConnection . ExecuteAsync ( ) ;
35
35
36
36
// The scope should be created
37
37
var scopeObjects = ( ( TestKestrelTrace ) serviceContext . Log )
@@ -47,6 +47,8 @@ public void OnConnectionCreatesLogScopeWithConnectionId()
47
47
48
48
tcs . TrySetResult ( null ) ;
49
49
50
+ await task ;
51
+
50
52
// Verify the scope was disposed after request processing completed
51
53
Assert . True ( ( ( TestKestrelTrace ) serviceContext . Log ) . Logger . Scopes . IsEmpty ) ;
52
54
}
@@ -73,19 +75,18 @@ public async Task StartAcceptingConnectionsAsyncLogsIfAcceptAsyncThrows()
73
75
public async Task OnConnectionFiresOnCompleted ( )
74
76
{
75
77
var serviceContext = new TestServiceContext ( ) ;
76
- var dispatcher = new ConnectionDispatcher ( serviceContext , _ => Task . CompletedTask ) ;
77
78
78
79
var connection = new Mock < DefaultConnectionContext > { CallBase = true } . Object ;
79
80
connection . ConnectionClosed = new CancellationToken ( canceled : true ) ;
80
- var kestrelConnection = new KestrelConnection ( connection , Mock . Of < ILogger > ( ) ) ;
81
+ var kestrelConnection = new KestrelConnection ( 0 , serviceContext , _ => Task . CompletedTask , connection , serviceContext . Log ) ;
81
82
var completeFeature = kestrelConnection . TransportConnection . Features . Get < IConnectionCompleteFeature > ( ) ;
82
83
83
84
Assert . NotNull ( completeFeature ) ;
84
85
object stateObject = new object ( ) ;
85
86
object callbackState = null ;
86
87
completeFeature . OnCompleted ( state => { callbackState = state ; return Task . CompletedTask ; } , stateObject ) ;
87
88
88
- await dispatcher . Execute ( kestrelConnection ) ;
89
+ await kestrelConnection . ExecuteAsync ( ) ;
89
90
90
91
Assert . Equal ( stateObject , callbackState ) ;
91
92
}
@@ -94,25 +95,23 @@ public async Task OnConnectionFiresOnCompleted()
94
95
public async Task OnConnectionOnCompletedExceptionCaught ( )
95
96
{
96
97
var serviceContext = new TestServiceContext ( ) ;
97
- var dispatcher = new ConnectionDispatcher ( serviceContext , _ => Task . CompletedTask ) ;
98
-
98
+ var logger = ( ( TestKestrelTrace ) serviceContext . Log ) . Logger ;
99
99
var connection = new Mock < DefaultConnectionContext > { CallBase = true } . Object ;
100
100
connection . ConnectionClosed = new CancellationToken ( canceled : true ) ;
101
- var mockLogger = new Mock < ILogger > ( ) ;
102
- var kestrelConnection = new KestrelConnection ( connection , mockLogger . Object ) ;
101
+ var kestrelConnection = new KestrelConnection ( 0 , serviceContext , _ => Task . CompletedTask , connection , serviceContext . Log ) ;
103
102
var completeFeature = kestrelConnection . TransportConnection . Features . Get < IConnectionCompleteFeature > ( ) ;
104
103
105
104
Assert . NotNull ( completeFeature ) ;
106
105
object stateObject = new object ( ) ;
107
106
object callbackState = null ;
108
107
completeFeature . OnCompleted ( state => { callbackState = state ; throw new InvalidTimeZoneException ( ) ; } , stateObject ) ;
109
108
110
- await dispatcher . Execute ( kestrelConnection ) ;
109
+ await kestrelConnection . ExecuteAsync ( ) ;
111
110
112
111
Assert . Equal ( stateObject , callbackState ) ;
113
- var log = mockLogger . Invocations . First ( ) ;
114
- Assert . Equal ( "An error occured running an IConnectionCompleteFeature.OnCompleted callback." , log . Arguments [ 2 ] . ToString ( ) ) ;
115
- Assert . IsType < InvalidTimeZoneException > ( log . Arguments [ 3 ] ) ;
112
+ var errors = logger . Messages . Where ( e => e . LogLevel >= LogLevel . Error ) . ToArray ( ) ;
113
+ Assert . Single ( errors ) ;
114
+ Assert . Equal ( "An error occured running an IConnectionCompleteFeature.OnCompleted callback." , errors [ 0 ] . Message ) ;
116
115
}
117
116
118
117
private class ThrowingListener : IConnectionListener
0 commit comments