Example #1
0
    public async Task UpgradeToWebSocketLogsWrittenOnlyOnce(HttpLoggingFields loggingFields)
    {
        var options = CreateOptionsAccessor();

        options.CurrentValue.LoggingFields = loggingFields;

        var httpContext = new DefaultHttpContext();

        var upgradeFeatureMock = new Mock <IHttpUpgradeFeature>();

        upgradeFeatureMock.Setup(m => m.IsUpgradableRequest).Returns(true);
        upgradeFeatureMock
        .Setup(m => m.UpgradeAsync())
        .Callback(() =>
        {
            httpContext.Response.StatusCode = StatusCodes.Status101SwitchingProtocols;
            httpContext.Response.Headers[HeaderNames.Connection] = HeaderNames.Upgrade;
        })
        .ReturnsAsync(Stream.Null);
        httpContext.Features.Set <IHttpUpgradeFeature>(upgradeFeatureMock.Object);

        var writeCount = 0;

        TestSink.MessageLogged += (context) => { writeCount++; };

        var middleware = new HttpLoggingMiddleware(
            async c =>
        {
            await c.Features.Get <IHttpUpgradeFeature>().UpgradeAsync();
        },
            options,
            LoggerFactory.CreateLogger <HttpLoggingMiddleware>());

        await middleware.Invoke(httpContext);

        Assert.Equal(1, writeCount);
    }
Example #2
0
    public async Task OriginalUpgradeFeatureIsRestoredBeforeMiddlewareCompletes(HttpLoggingFields loggingFields)
    {
        var options = CreateOptionsAccessor();

        options.CurrentValue.LoggingFields = loggingFields;

        var letBodyFinish = new TaskCompletionSource();

        var httpContext = new DefaultHttpContext();

        var upgradeFeatureMock = new Mock <IHttpUpgradeFeature>();

        upgradeFeatureMock.Setup(m => m.IsUpgradableRequest).Returns(true);
        upgradeFeatureMock.Setup(m => m.UpgradeAsync()).ReturnsAsync(Stream.Null);
        httpContext.Features.Set <IHttpUpgradeFeature>(upgradeFeatureMock.Object);

        IHttpUpgradeFeature upgradeFeature = null;

        var middleware = new HttpLoggingMiddleware(
            async c =>
        {
            upgradeFeature = c.Features.Get <IHttpUpgradeFeature>();
            await letBodyFinish.Task;
        },
            options,
            LoggerFactory.CreateLogger <HttpLoggingMiddleware>());

        var middlewareTask = middleware.Invoke(httpContext);

        Assert.True(upgradeFeature is UpgradeFeatureLoggingDecorator);

        letBodyFinish.SetResult();
        await middlewareTask;

        Assert.False(httpContext.Features.Get <IHttpUpgradeFeature>() is UpgradeFeatureLoggingDecorator);
    }