diff --git a/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs b/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs index b7bd2b654c29..3ba5e15984bf 100644 --- a/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs +++ b/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs @@ -3525,7 +3525,7 @@ public async Task RequestTimeoutDisabledWhenConnected(HttpTransportType transpor app.UseRouting(); app.UseEndpoints(endpoints => { - endpoints.MapConnectionHandler("/foo"); + endpoints.MapConnectionHandler("/foo"); }); }) .UseUrls("http://127.0.0.1:0"); @@ -3550,6 +3550,10 @@ public async Task RequestTimeoutDisabledWhenConnected(HttpTransportType transpor await connection.StartAsync(); + // Easy way to make sure everything is set is to send and receive data over the connection + await connection.Transport.Output.WriteAsync(new byte[2]); + await connection.Transport.Input.ReadAsync(); + var negotiateResponse = NegotiateProtocol.ParseResponse(stream.ToArray()); Assert.True(manager.TryGetConnection(negotiateResponse.ConnectionToken, out var context)); @@ -3898,6 +3902,34 @@ public override async Task OnConnectedAsync(ConnectionContext connection) } } +public class EchoConnectionHandler : ConnectionHandler +{ + public override async Task OnConnectedAsync(ConnectionContext connection) + { + while (true) + { + var result = await connection.Transport.Input.ReadAsync(); + var buffer = result.Buffer; + + try + { + if (!buffer.IsEmpty) + { + await connection.Transport.Output.WriteAsync(buffer.ToArray()); + } + else if (result.IsCompleted) + { + break; + } + } + finally + { + connection.Transport.Input.AdvanceTo(result.Buffer.End); + } + } + } +} + public class ServiceProviderConnectionHandler : ConnectionHandler { public override async Task OnConnectedAsync(ConnectionContext connection)