Skip to content

Commit 4f87edd

Browse files
committed
move tests
1 parent 898c415 commit 4f87edd

File tree

3 files changed

+86
-32
lines changed

3 files changed

+86
-32
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using System.IO.Pipelines;
7+
using System.Text;
8+
9+
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests.TestHelpers;
10+
11+
internal class ObservablePipeReader : PipeReader
12+
{
13+
private readonly PipeReader _inner;
14+
15+
public ObservablePipeReader(PipeReader reader)
16+
{
17+
_inner = reader;
18+
}
19+
20+
/// <summary>
21+
/// Number of times <see cref="ReadAsync(CancellationToken)"/> was called.
22+
/// </summary>
23+
public int ReadAsyncCounter { get; private set; }
24+
25+
public override void AdvanceTo(SequencePosition consumed)
26+
=> _inner.AdvanceTo(consumed);
27+
28+
public override void AdvanceTo(SequencePosition consumed, SequencePosition examined)
29+
=> _inner.AdvanceTo(consumed, examined);
30+
31+
public override void CancelPendingRead()
32+
=> _inner.CancelPendingRead();
33+
34+
public override void Complete(Exception exception = null)
35+
=> _inner.Complete(exception);
36+
37+
public override ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
38+
{
39+
ReadAsyncCounter++;
40+
return _inner.ReadAsync(cancellationToken);
41+
}
42+
43+
public override bool TryRead(out ReadResult result)
44+
{
45+
return _inner.TryRead(out result);
46+
}
47+
}

src/Servers/Kestrel/test/InMemory.FunctionalTests/TlsListenerMiddlewareTests.Units.cs renamed to src/Servers/Kestrel/Core/test/TlsListenerMiddlewareTests.cs

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
using Microsoft.AspNetCore.Server.Kestrel.Core;
2020
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
2121
using Microsoft.AspNetCore.Server.Kestrel.Core.Middleware;
22+
using Microsoft.AspNetCore.Server.Kestrel.Core.Tests.TestHelpers;
2223
using Microsoft.AspNetCore.Server.Kestrel.Https;
23-
using Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTransport;
2424
using Microsoft.Extensions.DependencyInjection;
2525
using Microsoft.Extensions.Hosting;
2626
using Microsoft.Extensions.Logging;
2727
using 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

3231
public 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);

src/Servers/Kestrel/test/InMemory.FunctionalTests/TlsListenerMiddlewareTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
namespace InMemory.FunctionalTests;
2323

24-
public partial class TlsListenerMiddlewareTests : TestApplicationErrorLoggerLoggedTest
24+
public class TlsListenerMiddlewareTests : TestApplicationErrorLoggerLoggedTest
2525
{
2626
private static readonly X509Certificate2 _x509Certificate2 = TestResources.GetTestCertificate();
2727

0 commit comments

Comments
 (0)