1919using Microsoft . AspNetCore . Server . Kestrel . Core ;
2020using Microsoft . AspNetCore . Server . Kestrel . Core . Internal . Infrastructure ;
2121using Microsoft . AspNetCore . Server . Kestrel . Core . Middleware ;
22+ using Microsoft . AspNetCore . Server . Kestrel . Core . Tests . TestHelpers ;
2223using Microsoft . AspNetCore . Server . Kestrel . Https ;
23- using Microsoft . AspNetCore . Server . Kestrel . InMemory . FunctionalTests . TestTransport ;
2424using Microsoft . Extensions . DependencyInjection ;
2525using Microsoft . Extensions . Hosting ;
2626using Microsoft . Extensions . Logging ;
2727using Moq ;
28- using static Microsoft . AspNetCore . Server . Kestrel . InMemory . FunctionalTests . TestTransport . InMemoryTransportConnection ;
2928
30- namespace InMemory . FunctionalTests ;
29+ namespace Microsoft . AspNetCore . Server . Kestrel . Core . Tests ;
3130
3231public partial class TlsListenerMiddlewareTests
3332{
@@ -54,10 +53,14 @@ public Task OnTlsClientHelloAsync_InvalidData_MultipleSegments(int id, List<byte
5453 [ Fact ]
5554 public async Task RunTlsClientHelloCallbackTest_DeterministinglyReads ( )
5655 {
57- var serviceContext = new TestServiceContext ( LoggerFactory ) ;
58- var logger = LoggerFactory . CreateLogger < InMemoryTransportConnection > ( ) ;
59- var memoryPool = serviceContext . MemoryPoolFactory ( ) ;
60- var transportConnection = new InMemoryTransportConnection ( memoryPool , logger ) ;
56+ var serviceContext = new TestServiceContext ( ) ;
57+
58+ var pipe = new Pipe ( ) ;
59+ var writer = pipe . Writer ;
60+ var reader = new ObservablePipeReader ( pipe . Reader ) ;
61+
62+ var transport = new DuplexPipe ( reader , writer ) ;
63+ var transportConnection = new DefaultConnectionContext ( "test" , transport , transport ) ;
6164
6265 var nextMiddlewareInvoked = false ;
6366 var tlsClientHelloCallbackInvoked = false ;
@@ -77,22 +80,19 @@ public async Task RunTlsClientHelloCallbackTest_DeterministinglyReads()
7780 }
7881 ) ;
7982
80- await transportConnection . Input . WriteAsync ( new byte [ 1 ] { 0x16 } ) ;
83+ await writer . WriteAsync ( new byte [ 1 ] { 0x16 } ) ;
8184 var middlewareTask = Task . Run ( ( ) => middleware . OnTlsClientHelloAsync ( transportConnection ) ) ;
82- await transportConnection . Input . WriteAsync ( new byte [ 2 ] { 0x03 , 0x01 } ) ;
83- await transportConnection . Input . WriteAsync ( new byte [ 2 ] { 0x00 , 0x20 } ) ;
84-
85- await transportConnection . Input . CompleteAsync ( ) ;
85+ await writer . WriteAsync ( new byte [ 2 ] { 0x03 , 0x01 } ) ;
86+ await writer . WriteAsync ( new byte [ 2 ] { 0x00 , 0x20 } ) ;
87+ await writer . CompleteAsync ( ) ;
8688
8789 await middlewareTask ;
8890 Assert . True ( nextMiddlewareInvoked ) ;
8991 Assert . False ( tlsClientHelloCallbackInvoked ) ;
9092
9193 // ensuring that we have read limited number of times
92- var observableTransport = transportConnection . Transport as ObservableDuplexPipe ;
93- Assert . NotNull ( observableTransport ) ;
94- Assert . True ( observableTransport . ReadAsyncCounter is >= 2 && observableTransport . ReadAsyncCounter is <= 5 ,
95- $ "Expected ReadAsync() to happen about 2-5 times. Actually happened { observableTransport . ReadAsyncCounter } times.") ;
94+ Assert . True ( reader . ReadAsyncCounter is >= 2 && reader . ReadAsyncCounter is <= 5 ,
95+ $ "Expected ReadAsync() to happen about 2-5 times. Actually happened { reader . ReadAsyncCounter } times.") ;
9696 }
9797
9898 private async Task RunTlsClientHelloCallbackTest_WithMultipleSegments (
@@ -101,18 +101,20 @@ private async Task RunTlsClientHelloCallbackTest_WithMultipleSegments(
101101 bool nextMiddlewareInvokedExpected ,
102102 bool tlsClientHelloCallbackExpected )
103103 {
104- var serviceContext = new TestServiceContext ( LoggerFactory ) ;
105- var logger = LoggerFactory . CreateLogger < InMemoryTransportConnection > ( ) ;
106- var memoryPool = serviceContext . MemoryPoolFactory ( ) ;
107- var transportConnection = new InMemoryTransportConnection ( memoryPool , logger ) ;
104+ var pipe = new Pipe ( ) ;
105+ var writer = pipe . Writer ;
106+ var reader = new ObservablePipeReader ( pipe . Reader ) ;
107+
108+ var transport = new DuplexPipe ( reader , writer ) ;
109+ var transportConnection = new DefaultConnectionContext ( "test" , transport , transport ) ;
108110
109111 var nextMiddlewareInvokedActual = false ;
110112 var tlsClientHelloCallbackActual = false ;
111113
112114 var fullLength = packets . Sum ( p => p . Length ) ;
113115
114116 var middleware = new TlsListenerMiddleware (
115- next : _ =>
117+ next : ctx =>
116118 {
117119 nextMiddlewareInvokedActual = true ;
118120 return Task . CompletedTask ;
@@ -128,7 +130,7 @@ private async Task RunTlsClientHelloCallbackTest_WithMultipleSegments(
128130 ) ;
129131
130132 // write first packet
131- await transportConnection . Input . WriteAsync ( packets [ 0 ] ) ;
133+ await writer . WriteAsync ( packets [ 0 ] ) ;
132134 var middlewareTask = Task . Run ( ( ) => middleware . OnTlsClientHelloAsync ( transportConnection ) ) ;
133135
134136 var random = new Random ( ) ;
@@ -137,10 +139,10 @@ private async Task RunTlsClientHelloCallbackTest_WithMultipleSegments(
137139 // write all next packets
138140 foreach ( var packet in packets . Skip ( 1 ) )
139141 {
140- await transportConnection . Input . WriteAsync ( packet ) ;
142+ await writer . WriteAsync ( packet ) ;
141143 await Task . Delay ( millisecondsDelay : random . Next ( 25 , 75 ) ) ;
142144 }
143- await transportConnection . Input . CompleteAsync ( ) ;
145+ await writer . CompleteAsync ( ) ;
144146 await middlewareTask ;
145147
146148 Assert . Equal ( nextMiddlewareInvokedExpected , nextMiddlewareInvokedActual ) ;
@@ -153,18 +155,23 @@ private async Task RunTlsClientHelloCallbackTest(
153155 bool nextMiddlewareExpected ,
154156 bool tlsClientHelloCallbackExpected )
155157 {
156- var serviceContext = new TestServiceContext ( LoggerFactory ) ;
157- var logger = LoggerFactory . CreateLogger < InMemoryTransportConnection > ( ) ;
158- var memoryPool = serviceContext . MemoryPoolFactory ( ) ;
159- var transportConnection = new InMemoryTransportConnection ( memoryPool , logger ) ;
158+ var pipe = new Pipe ( ) ;
159+ var writer = pipe . Writer ;
160+ var reader = new ObservablePipeReader ( pipe . Reader ) ;
161+
162+ var transport = new DuplexPipe ( reader , writer ) ;
163+ var transportConnection = new DefaultConnectionContext ( "test" , transport , transport ) ;
160164
161165 var nextMiddlewareInvokedActual = false ;
162166 var tlsClientHelloCallbackActual = false ;
163167
164168 var middleware = new TlsListenerMiddleware (
165- next : _ =>
169+ next : ctx =>
166170 {
167171 nextMiddlewareInvokedActual = true ;
172+ var readResult = ctx . Transport . Input . ReadAsync ( ) ;
173+ Assert . Equal ( packetBytes . Length , readResult . Result . Buffer . Length ) ;
174+
168175 return Task . CompletedTask ;
169176 } ,
170177 tlsClientHelloBytesCallback : ( ctx , data ) =>
@@ -177,8 +184,8 @@ private async Task RunTlsClientHelloCallbackTest(
177184 }
178185 ) ;
179186
180- await transportConnection . Input . WriteAsync ( packetBytes ) ;
181- await transportConnection . Input . CompleteAsync ( ) ;
187+ await writer . WriteAsync ( packetBytes ) ;
188+ await writer . CompleteAsync ( ) ;
182189
183190 // call middleware and expect a callback
184191 await middleware . OnTlsClientHelloAsync ( transportConnection ) ;
0 commit comments