Remove some test flakiness and add logging (#1402)

This commit is contained in:
BrennanConroy 2018-02-02 15:04:48 -08:00 committed by GitHub
parent 5ade419c53
commit 5ccc9e3a0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 743 additions and 643 deletions

View File

@ -17,20 +17,28 @@ using Microsoft.AspNetCore.Http.Internal;
using Microsoft.AspNetCore.Sockets.Features; using Microsoft.AspNetCore.Sockets.Features;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Primitives;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Xunit; using Xunit;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Sockets.Tests namespace Microsoft.AspNetCore.Sockets.Tests
{ {
public class HttpConnectionDispatcherTests public class HttpConnectionDispatcherTests : LoggedTest
{ {
public HttpConnectionDispatcherTests(ITestOutputHelper output) : base(output)
{
}
[Fact] [Fact]
public async Task NegotiateReservesConnectionIdAndReturnsIt() public async Task NegotiateReservesConnectionIdAndReturnsIt()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddEndPoint<TestEndPoint>(); services.AddEndPoint<TestEndPoint>();
@ -45,6 +53,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.True(manager.TryGetConnection(connectionId, out var connectionContext)); Assert.True(manager.TryGetConnection(connectionId, out var connectionContext));
Assert.Equal(connectionId, connectionContext.ConnectionId); Assert.Equal(connectionId, connectionContext.ConnectionId);
} }
}
[Theory] [Theory]
[InlineData(TransportType.All)] [InlineData(TransportType.All)]
@ -52,8 +61,10 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransportType.LongPolling | TransportType.WebSockets)] [InlineData(TransportType.LongPolling | TransportType.WebSockets)]
public async Task NegotiateReturnsAvailableTransports(TransportType transports) public async Task NegotiateReturnsAvailableTransports(TransportType transports)
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -74,6 +85,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(transports, availableTransports); Assert.Equal(transports, availableTransports);
} }
}
[Theory] [Theory]
[InlineData(TransportType.WebSockets)] [InlineData(TransportType.WebSockets)]
@ -81,8 +93,10 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransportType.LongPolling)] [InlineData(TransportType.LongPolling)]
public async Task EndpointsThatAcceptConnectionId404WhenUnknownConnectionIdProvided(TransportType transportType) public async Task EndpointsThatAcceptConnectionId404WhenUnknownConnectionIdProvided(TransportType transportType)
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
@ -111,12 +125,15 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal("No Connection with that ID", Encoding.UTF8.GetString(strm.ToArray())); Assert.Equal("No Connection with that ID", Encoding.UTF8.GetString(strm.ToArray()));
} }
} }
}
[Fact] [Fact]
public async Task EndpointsThatAcceptConnectionId404WhenUnknownConnectionIdProvidedForPost() public async Task EndpointsThatAcceptConnectionId404WhenUnknownConnectionIdProvidedForPost()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
@ -143,12 +160,15 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal("No Connection with that ID", Encoding.UTF8.GetString(strm.ToArray())); Assert.Equal("No Connection with that ID", Encoding.UTF8.GetString(strm.ToArray()));
} }
} }
}
[Fact] [Fact]
public async Task PostNotAllowedForWebSocketConnections() public async Task PostNotAllowedForWebSocketConnections()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.Metadata[ConnectionMetadataNames.Transport] = TransportType.WebSockets; connection.Metadata[ConnectionMetadataNames.Transport] = TransportType.WebSockets;
@ -177,14 +197,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal("POST requests are not allowed for WebSocket connections.", Encoding.UTF8.GetString(strm.ToArray())); Assert.Equal("POST requests are not allowed for WebSocket connections.", Encoding.UTF8.GetString(strm.ToArray()));
} }
} }
}
[Theory] [Theory]
[InlineData(TransportType.ServerSentEvents)] [InlineData(TransportType.ServerSentEvents)]
[InlineData(TransportType.LongPolling)] [InlineData(TransportType.LongPolling)]
public async Task EndpointsThatRequireConnectionId400WhenNoConnectionIdProvided(TransportType transportType) public async Task EndpointsThatRequireConnectionId400WhenNoConnectionIdProvided(TransportType transportType)
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
@ -208,12 +231,15 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal("Connection ID required", Encoding.UTF8.GetString(strm.ToArray())); Assert.Equal("Connection ID required", Encoding.UTF8.GetString(strm.ToArray()));
} }
} }
}
[Fact] [Fact]
public async Task EndpointsThatRequireConnectionId400WhenNoConnectionIdProvidedForPost() public async Task EndpointsThatRequireConnectionId400WhenNoConnectionIdProvidedForPost()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); {
var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
@ -234,6 +260,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal("Connection ID required", Encoding.UTF8.GetString(strm.ToArray())); Assert.Equal("Connection ID required", Encoding.UTF8.GetString(strm.ToArray()));
} }
} }
}
[Theory] [Theory]
[InlineData(TransportType.LongPolling, 204)] [InlineData(TransportType.LongPolling, 204)]
@ -241,7 +268,10 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransportType.ServerSentEvents, 404)] [InlineData(TransportType.ServerSentEvents, 404)]
public async Task EndPointThatOnlySupportsLongPollingRejectsOtherTransports(TransportType transportType, int status) public async Task EndPointThatOnlySupportsLongPollingRejectsOtherTransports(TransportType transportType, int status)
{ {
await CheckTransportSupported(TransportType.LongPolling, transportType, status); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
await CheckTransportSupported(TransportType.LongPolling, transportType, status, loggerFactory);
}
} }
[Theory] [Theory]
@ -250,7 +280,10 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransportType.LongPolling, 404)] [InlineData(TransportType.LongPolling, 404)]
public async Task EndPointThatOnlySupportsSSERejectsOtherTransports(TransportType transportType, int status) public async Task EndPointThatOnlySupportsSSERejectsOtherTransports(TransportType transportType, int status)
{ {
await CheckTransportSupported(TransportType.ServerSentEvents, transportType, status); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
await CheckTransportSupported(TransportType.ServerSentEvents, transportType, status, loggerFactory);
}
} }
[Theory] [Theory]
@ -259,23 +292,31 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransportType.LongPolling, 404)] [InlineData(TransportType.LongPolling, 404)]
public async Task EndPointThatOnlySupportsWebSockesRejectsOtherTransports(TransportType transportType, int status) public async Task EndPointThatOnlySupportsWebSockesRejectsOtherTransports(TransportType transportType, int status)
{ {
await CheckTransportSupported(TransportType.WebSockets, transportType, status); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
await CheckTransportSupported(TransportType.WebSockets, transportType, status, loggerFactory);
}
} }
[Theory] [Theory]
[InlineData(TransportType.LongPolling, 404)] [InlineData(TransportType.LongPolling, 404)]
public async Task EndPointThatOnlySupportsWebSocketsAndSSERejectsLongPolling(TransportType transportType, int status) public async Task EndPointThatOnlySupportsWebSocketsAndSSERejectsLongPolling(TransportType transportType, int status)
{ {
await CheckTransportSupported(TransportType.WebSockets | TransportType.ServerSentEvents, transportType, status); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
await CheckTransportSupported(TransportType.WebSockets | TransportType.ServerSentEvents, transportType, status, loggerFactory);
}
} }
[Fact] [Fact]
public async Task CompletedEndPointEndsConnection() public async Task CompletedEndPointEndsConnection()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
SetTransport(context, TransportType.ServerSentEvents); SetTransport(context, TransportType.ServerSentEvents);
@ -292,14 +333,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
bool exists = manager.TryGetConnection(connection.ConnectionId, out _); bool exists = manager.TryGetConnection(connection.ConnectionId, out _);
Assert.False(exists); Assert.False(exists);
} }
}
[Fact] [Fact]
public async Task SynchronusExceptionEndsConnection() public async Task SynchronusExceptionEndsConnection()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
SetTransport(context, TransportType.ServerSentEvents); SetTransport(context, TransportType.ServerSentEvents);
@ -315,14 +359,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
bool exists = manager.TryGetConnection(connection.ConnectionId, out _); bool exists = manager.TryGetConnection(connection.ConnectionId, out _);
Assert.False(exists); Assert.False(exists);
} }
}
[Fact] [Fact]
public async Task CompletedEndPointEndsLongPollingConnection() public async Task CompletedEndPointEndsLongPollingConnection()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
@ -338,14 +385,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
bool exists = manager.TryGetConnection(connection.ConnectionId, out _); bool exists = manager.TryGetConnection(connection.ConnectionId, out _);
Assert.False(exists); Assert.False(exists);
} }
}
[Fact] [Fact]
public async Task LongPollingTimeoutSets200StatusCode() public async Task LongPollingTimeoutSets200StatusCode()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
@ -360,14 +410,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
} }
}
[Fact] [Fact]
public async Task WebSocketTransportTimesOutWhenCloseFrameNotReceived() public async Task WebSocketTransportTimesOutWhenCloseFrameNotReceived()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Trace))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
SetTransport(context, TransportType.WebSockets); SetTransport(context, TransportType.WebSockets);
@ -384,16 +437,19 @@ namespace Microsoft.AspNetCore.Sockets.Tests
await task.OrTimeout(); await task.OrTimeout();
} }
}
[Theory] [Theory]
[InlineData(TransportType.WebSockets)] [InlineData(TransportType.WebSockets)]
[InlineData(TransportType.ServerSentEvents)] [InlineData(TransportType.ServerSentEvents)]
public async Task RequestToActiveConnectionId409ForStreamingTransports(TransportType transportType) public async Task RequestToActiveConnectionId409ForStreamingTransports(TransportType transportType)
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context1 = MakeRequest("/foo", connection); var context1 = MakeRequest("/foo", connection);
var context2 = MakeRequest("/foo", connection); var context2 = MakeRequest("/foo", connection);
@ -425,14 +481,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
await request1.OrTimeout(); await request1.OrTimeout();
} }
}
[Fact] [Fact]
public async Task RequestToActiveConnectionIdKillsPreviousConnectionLongPolling() public async Task RequestToActiveConnectionIdKillsPreviousConnectionLongPolling()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context1 = MakeRequest("/foo", connection); var context1 = MakeRequest("/foo", connection);
var context2 = MakeRequest("/foo", connection); var context2 = MakeRequest("/foo", connection);
@ -457,17 +516,20 @@ namespace Microsoft.AspNetCore.Sockets.Tests
await request2; await request2;
} }
}
[Theory] [Theory]
[InlineData(TransportType.ServerSentEvents)] [InlineData(TransportType.ServerSentEvents)]
[InlineData(TransportType.LongPolling)] [InlineData(TransportType.LongPolling)]
public async Task RequestToDisposedConnectionIdReturns404(TransportType transportType) public async Task RequestToDisposedConnectionIdReturns404(TransportType transportType)
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.Status = DefaultConnectionContext.ConnectionStatus.Disposed; connection.Status = DefaultConnectionContext.ConnectionStatus.Disposed;
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
SetTransport(context, transportType); SetTransport(context, transportType);
@ -483,14 +545,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status404NotFound, context.Response.StatusCode); Assert.Equal(StatusCodes.Status404NotFound, context.Response.StatusCode);
} }
}
[Fact] [Fact]
public async Task ConnectionStateSetToInactiveAfterPoll() public async Task ConnectionStateSetToInactiveAfterPoll()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
@ -514,14 +579,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
} }
}
[Fact] [Fact]
public async Task BlockingConnectionWorksWithStreamingConnections() public async Task BlockingConnectionWorksWithStreamingConnections()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
SetTransport(context, TransportType.ServerSentEvents); SetTransport(context, TransportType.ServerSentEvents);
@ -545,14 +613,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
bool exists = manager.TryGetConnection(connection.ConnectionId, out _); bool exists = manager.TryGetConnection(connection.ConnectionId, out _);
Assert.False(exists); Assert.False(exists);
} }
}
[Fact] [Fact]
public async Task BlockingConnectionWorksWithLongPollingConnection() public async Task BlockingConnectionWorksWithLongPollingConnection()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
@ -575,14 +646,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
bool exists = manager.TryGetConnection(connection.ConnectionId, out _); bool exists = manager.TryGetConnection(connection.ConnectionId, out _);
Assert.False(exists); Assert.False(exists);
} }
}
[Fact] [Fact]
public async Task AttemptingToPollWhileAlreadyPollingReplacesTheCurrentPoll() public async Task AttemptingToPollWhileAlreadyPollingReplacesTheCurrentPoll()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddEndPoint<TestEndPoint>(); services.AddEndPoint<TestEndPoint>();
@ -610,6 +684,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status200OK, context2.Response.StatusCode); Assert.Equal(StatusCodes.Status200OK, context2.Response.StatusCode);
Assert.Equal("Hello, World", GetContentAsString(context2.Response.Body)); Assert.Equal("Hello, World", GetContentAsString(context2.Response.Body));
} }
}
[Theory] [Theory]
[InlineData(TransportType.LongPolling, TransferMode.Binary | TransferMode.Text)] [InlineData(TransportType.LongPolling, TransferMode.Binary | TransferMode.Text)]
@ -617,10 +692,12 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransportType.WebSockets, TransferMode.Binary | TransferMode.Text)] [InlineData(TransportType.WebSockets, TransferMode.Binary | TransferMode.Text)]
public async Task TransportCapabilitiesSet(TransportType transportType, TransferMode expectedTransportCapabilities) public async Task TransportCapabilitiesSet(TransportType transportType, TransferMode expectedTransportCapabilities)
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
SetTransport(context, transportType); SetTransport(context, transportType);
@ -637,13 +714,16 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(expectedTransportCapabilities, connection.TransportCapabilities); Assert.Equal(expectedTransportCapabilities, connection.TransportCapabilities);
} }
}
[Fact] [Fact]
public async Task UnauthorizedConnectionFailsToStartEndPoint() public async Task UnauthorizedConnectionFailsToStartEndPoint()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddOptions(); services.AddOptions();
@ -679,13 +759,16 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status401Unauthorized, context.Response.StatusCode); Assert.Equal(StatusCodes.Status401Unauthorized, context.Response.StatusCode);
} }
}
[Fact] [Fact]
public async Task AuthenticatedUserWithoutPermissionCausesForbidden() public async Task AuthenticatedUserWithoutPermissionCausesForbidden()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddOptions(); services.AddOptions();
@ -723,13 +806,16 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status403Forbidden, context.Response.StatusCode); Assert.Equal(StatusCodes.Status403Forbidden, context.Response.StatusCode);
} }
}
[Fact] [Fact]
public async Task AuthorizedConnectionCanConnectToEndPoint() public async Task AuthorizedConnectionCanConnectToEndPoint()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -776,13 +862,16 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
Assert.Equal("Hello, World", GetContentAsString(context.Response.Body)); Assert.Equal("Hello, World", GetContentAsString(context.Response.Body));
} }
}
[Fact] [Fact]
public async Task AllPoliciesRequiredForAuthorizedEndPoint() public async Task AllPoliciesRequiredForAuthorizedEndPoint()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -854,13 +943,16 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
Assert.Equal("Hello, World", GetContentAsString(context.Response.Body)); Assert.Equal("Hello, World", GetContentAsString(context.Response.Body));
} }
}
[Fact] [Fact]
public async Task AuthorizedConnectionWithAcceptedSchemesCanConnectToEndPoint() public async Task AuthorizedConnectionWithAcceptedSchemesCanConnectToEndPoint()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -908,13 +1000,16 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
Assert.Equal("Hello, World", GetContentAsString(context.Response.Body)); Assert.Equal("Hello, World", GetContentAsString(context.Response.Body));
} }
}
[Fact] [Fact]
public async Task AuthorizedConnectionWithRejectedSchemesFailsToConnectToEndPoint() public async Task AuthorizedConnectionWithRejectedSchemesFailsToConnectToEndPoint()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddOptions(); services.AddOptions();
@ -958,14 +1053,17 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.Equal(StatusCodes.Status401Unauthorized, context.Response.StatusCode); Assert.Equal(StatusCodes.Status401Unauthorized, context.Response.StatusCode);
} }
}
[Fact] [Fact]
public async Task SetsInherentKeepAliveFeatureOnFirstLongPollingRequest() public async Task SetsInherentKeepAliveFeatureOnFirstLongPollingRequest()
{ {
var manager = CreateConnectionManager(); using (StartLog(out var loggerFactory, LogLevel.Debug))
{
var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
@ -984,6 +1082,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
Assert.NotNull(connection.Features.Get<IConnectionInherentKeepAliveFeature>()); Assert.NotNull(connection.Features.Get<IConnectionInherentKeepAliveFeature>());
Assert.Equal(options.LongPolling.PollTimeout, connection.Features.Get<IConnectionInherentKeepAliveFeature>().KeepAliveInterval); Assert.Equal(options.LongPolling.PollTimeout, connection.Features.Get<IConnectionInherentKeepAliveFeature>().KeepAliveInterval);
} }
}
private class RejectHandler : TestAuthenticationHandler private class RejectHandler : TestAuthenticationHandler
{ {
@ -1029,11 +1128,11 @@ namespace Microsoft.AspNetCore.Sockets.Tests
} }
} }
private static async Task CheckTransportSupported(TransportType supportedTransports, TransportType transportType, int status) private static async Task CheckTransportSupported(TransportType supportedTransports, TransportType transportType, int status, ILoggerFactory loggerFactory)
{ {
var manager = CreateConnectionManager(); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
var dispatcher = new HttpConnectionDispatcher(manager, new LoggerFactory()); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
@ -1101,9 +1200,9 @@ namespace Microsoft.AspNetCore.Sockets.Tests
} }
} }
private static ConnectionManager CreateConnectionManager() private static ConnectionManager CreateConnectionManager(ILoggerFactory loggerFactory)
{ {
return new ConnectionManager(new Logger<ConnectionManager>(new LoggerFactory()), new EmptyApplicationLifetime()); return new ConnectionManager(new Logger<ConnectionManager>(loggerFactory ?? new LoggerFactory()), new EmptyApplicationLifetime());
} }
private string GetContentAsString(Stream body) private string GetContentAsString(Stream body)

View File

@ -7,9 +7,9 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Channels; using System.Threading.Channels;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR.Internal;
using Microsoft.AspNetCore.Sockets.Internal; using Microsoft.AspNetCore.Sockets.Internal;
using Microsoft.AspNetCore.Sockets.Internal.Transports; using Microsoft.AspNetCore.Sockets.Internal.Transports;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(WebSocketMessageType.Binary)] [InlineData(WebSocketMessageType.Binary)]
public async Task ReceivedFramesAreWrittenToChannel(WebSocketMessageType webSocketMessageType) public async Task ReceivedFramesAreWrittenToChannel(WebSocketMessageType webSocketMessageType)
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[InlineData(TransferMode.Binary, WebSocketMessageType.Binary)] [InlineData(TransferMode.Binary, WebSocketMessageType.Binary)]
public async Task WebSocketTransportSetsMessageTypeBasedOnTransferModeFeature(TransferMode transferMode, WebSocketMessageType expectedMessageType) public async Task WebSocketTransportSetsMessageTypeBasedOnTransferModeFeature(TransferMode transferMode, WebSocketMessageType expectedMessageType)
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[Fact] [Fact]
public async Task TransportFailsWhenClientDisconnectsAbnormally() public async Task TransportFailsWhenClientDisconnectsAbnormally()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -159,7 +159,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[Fact] [Fact]
public async Task ClientReceivesInternalServerErrorWhenTheApplicationFails() public async Task ClientReceivesInternalServerErrorWhenTheApplicationFails()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -194,7 +194,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[Fact] [Fact]
public async Task TransportClosesOnCloseTimeoutIfClientDoesNotSendCloseFrame() public async Task TransportClosesOnCloseTimeoutIfClientDoesNotSendCloseFrame()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -231,7 +231,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[Fact] [Fact]
public async Task TransportFailsOnTimeoutWithErrorWhenApplicationFailsAndClientDoesNotSendCloseFrame() public async Task TransportFailsOnTimeoutWithErrorWhenApplicationFailsAndClientDoesNotSendCloseFrame()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -268,7 +268,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[Fact] [Fact]
public async Task ServerGracefullyClosesWhenApplicationEndsThenClientSendsCloseFrame() public async Task ServerGracefullyClosesWhenApplicationEndsThenClientSendsCloseFrame()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();
@ -310,7 +310,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
[Fact] [Fact]
public async Task ServerGracefullyClosesWhenClientSendsCloseFrameThenApplicationEnds() public async Task ServerGracefullyClosesWhenClientSendsCloseFrameThenApplicationEnds()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory, LogLevel.Debug))
{ {
var transportToApplication = Channel.CreateUnbounded<byte[]>(); var transportToApplication = Channel.CreateUnbounded<byte[]>();
var applicationToTransport = Channel.CreateUnbounded<byte[]>(); var applicationToTransport = Channel.CreateUnbounded<byte[]>();

View File

@ -1,4 +1,5 @@
{ {
"longRunningTestSeconds": 30, "longRunningTestSeconds": 30,
"diagnosticMessages": true "diagnosticMessages": true,
"maxParallelThreads": 16
} }