public async Task DisconnectMiddleware_OnlyAccepts_PostRequests(string httpMethod)
        {
            // Arrange
            var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
            var registry         = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                NullLogger <CircuitRegistry> .Instance,
                circuitIdFactory);

            var middleware = new CircuitDisconnectMiddleware(
                NullLogger <CircuitDisconnectMiddleware> .Instance,
                registry,
                circuitIdFactory,
                (ctx) => Task.CompletedTask);

            var context = new DefaultHttpContext();

            context.Request.Method = httpMethod;

            // Act
            await middleware.Invoke(context);

            // Assert
            Assert.Equal(StatusCodes.Status405MethodNotAllowed, context.Response.StatusCode);
        }
        public async Task Returns400BadRequest_IfNoCircuitIdOnForm()
        {
            // Arrange
            var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
            var registry         = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                NullLogger <CircuitRegistry> .Instance,
                circuitIdFactory);

            var middleware = new CircuitDisconnectMiddleware(
                NullLogger <CircuitDisconnectMiddleware> .Instance,
                registry,
                circuitIdFactory,
                (ctx) => Task.CompletedTask);

            var context = new DefaultHttpContext();

            context.Request.Method      = HttpMethods.Post;
            context.Request.ContentType = "application/x-www-form-urlencoded";

            // Act
            await middleware.Invoke(context);

            // Assert
            Assert.Equal(StatusCodes.Status400BadRequest, context.Response.StatusCode);
        }
Пример #3
0
        public async Task ExtractsUriFromHttpContext_NonemptyPathBase()
        {
            // Arrange
            var circuitFactory     = new TestCircuitFactory();
            var circuitRegistry    = new CircuitRegistry(Options.Create(new CircuitOptions()), Mock.Of <ILogger <CircuitRegistry> >());
            var circuitPrerenderer = new CircuitPrerenderer(circuitFactory, circuitRegistry);
            var httpContext        = new DefaultHttpContext();
            var httpRequest        = httpContext.Request;

            httpRequest.Scheme   = "https";
            httpRequest.Host     = new HostString("example.com", 1234);
            httpRequest.PathBase = "/my/dir";
            httpRequest.Path     = "/some/path";

            var prerenderingContext = new ComponentPrerenderingContext
            {
                ComponentType = typeof(UriDisplayComponent),
                Parameters    = ParameterCollection.Empty,
                Context       = httpContext
            };

            // Act
            var result = await circuitPrerenderer.PrerenderComponentAsync(prerenderingContext);

            // Assert
            Assert.Equal(string.Join("", new[]
            {
                "The current URI is ",
                "https://example.com:1234/my/dir/some/path",
                " within base URI ",
                "https://example.com:1234/my/dir/"
            }), GetUnwrappedContent(result));
        }
        public async Task Returns200OK_NonExistingCircuit()
        {
            // Arrange
            var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
            var circuitId        = circuitIdFactory.CreateCircuitId();
            var registry         = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                NullLogger <CircuitRegistry> .Instance,
                circuitIdFactory);

            var middleware = new CircuitDisconnectMiddleware(
                NullLogger <CircuitDisconnectMiddleware> .Instance,
                registry,
                circuitIdFactory,
                (ctx) => Task.CompletedTask);

            using var memory = new MemoryStream();
            await new FormUrlEncodedContent(new Dictionary <string, string> {
                ["circuitId"] = circuitId.Secret,
            }).CopyToAsync(memory);
            memory.Seek(0, SeekOrigin.Begin);

            var context = new DefaultHttpContext();

            context.Request.Method      = HttpMethods.Post;
            context.Request.ContentType = "application/x-www-form-urlencoded";
            context.Request.Body        = memory;

            // Act
            await middleware.Invoke(context);

            // Assert
            Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
        }
        public async Task ReplacesDashesWithDots_WhenTheyAppearInPairs()
        {
            // Arrange
            var circuitFactory  = new TestCircuitFactory(() => "--1234--");
            var circuitRegistry = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                Mock.Of <ILogger <CircuitRegistry> >(),
                TestCircuitIdFactory.CreateTestFactory());
            var circuitPrerenderer = new CircuitPrerenderer(circuitFactory, circuitRegistry);
            var httpContext        = new DefaultHttpContext();
            var httpRequest        = httpContext.Request;

            httpRequest.Scheme = "https";
            httpRequest.Host   = new HostString("example.com", 1234);
            httpRequest.Path   = "/some/path";

            var prerenderingContext = new ComponentPrerenderingContext
            {
                ComponentType = typeof(UriDisplayComponent),
                Parameters    = ParameterView.Empty,
                Context       = httpContext
            };

            // Act
            var result = await circuitPrerenderer.PrerenderComponentAsync(prerenderingContext);

            // Assert
            Assert.Equal("..1234..", GetUnwrappedCircuitInfo(result).RootElement.GetProperty("circuitId").GetString());
        }
Пример #6
0
 /// <summary>
 /// Intended for framework use only. Applications should not instantiate
 /// this class directly.
 /// </summary>
 public ComponentHub(
     CircuitFactory circuitFactory,
     CircuitRegistry circuitRegistry,
     ILogger <ComponentHub> logger,
     IOptions <CircuitOptions> options)
 {
     _circuitFactory  = circuitFactory;
     _circuitRegistry = circuitRegistry;
     _options         = options.Value;
     _logger          = logger;
 }
 public CircuitDisconnectMiddleware(
     ILogger <CircuitDisconnectMiddleware> logger,
     CircuitRegistry registry,
     CircuitIdFactory circuitIdFactory,
     RequestDelegate next)
 {
     Logger           = logger;
     Registry         = registry;
     CircuitIdFactory = circuitIdFactory;
     Next             = next;
 }
 public ComponentHub(
     ServerComponentDeserializer serializer,
     CircuitFactory circuitFactory,
     CircuitIdFactory circuitIdFactory,
     CircuitRegistry circuitRegistry,
     ILogger <ComponentHub> logger)
 {
     _serverComponentSerializer = serializer;
     _circuitFactory            = circuitFactory;
     _circuitIdFactory          = circuitIdFactory;
     _circuitRegistry           = circuitRegistry;
     _logger = logger;
 }
Пример #9
0
 public ComponentHub(
     ServerComponentDeserializer serializer,
     IDataProtectionProvider dataProtectionProvider,
     CircuitFactory circuitFactory,
     CircuitIdFactory circuitIdFactory,
     CircuitRegistry circuitRegistry,
     ILogger <ComponentHub> logger)
 {
     _serverComponentSerializer = serializer;
     _dataProtectionProvider    = dataProtectionProvider;
     _circuitFactory            = circuitFactory;
     _circuitIdFactory          = circuitIdFactory;
     _circuitRegistry           = circuitRegistry;
     _logger = logger;
 }
Пример #10
0
    private static (Mock <IClientProxy>, ComponentHub) InitializeComponentHub()
    {
        var ephemeralDataProtectionProvider = new EphemeralDataProtectionProvider();
        var circuitIdFactory = new CircuitIdFactory(ephemeralDataProtectionProvider);
        var circuitFactory   = new TestCircuitFactory(
            new Mock <IServiceScopeFactory>().Object,
            NullLoggerFactory.Instance,
            circuitIdFactory,
            Options.Create(new CircuitOptions()));
        var circuitRegistry = new CircuitRegistry(
            Options.Create(new CircuitOptions()),
            NullLogger <CircuitRegistry> .Instance,
            circuitIdFactory);
        var serializer            = new TestServerComponentDeserializer();
        var circuitHandleRegistry = new TestCircuitHandleRegistry();
        var hub = new ComponentHub(
            serializer: serializer,
            dataProtectionProvider: ephemeralDataProtectionProvider,
            circuitFactory: circuitFactory,
            circuitIdFactory: circuitIdFactory,
            circuitRegistry: circuitRegistry,
            circuitHandleRegistry: circuitHandleRegistry,
            logger: NullLogger <ComponentHub> .Instance);

        // Here we mock out elements of the Hub that are typically configured
        // by SignalR as clients connect to the hub.
        var mockCaller      = new Mock <IHubCallerClients>();
        var mockClientProxy = new Mock <IClientProxy>();

        mockCaller.Setup(x => x.Caller).Returns(mockClientProxy.Object);
        hub.Clients = mockCaller.Object;
        var mockContext = new Mock <HubCallerContext>();

        mockContext.Setup(x => x.ConnectionId).Returns("123");
        hub.Context = mockContext.Object;

        return(mockClientProxy, hub);
    }
        public async Task DisposesCircuitScopeEvenIfPrerenderingThrows()
        {
            // Arrange
            var circuitFactory  = new MockServiceScopeCircuitFactory();
            var circuitRegistry = new CircuitRegistry(
                Options.Create(new CircuitOptions()),
                Mock.Of <ILogger <CircuitRegistry> >(),
                TestCircuitIdFactory.CreateTestFactory());
            var httpContext         = new DefaultHttpContext();
            var prerenderer         = new CircuitPrerenderer(circuitFactory, circuitRegistry);
            var prerenderingContext = new ComponentPrerenderingContext
            {
                ComponentType = typeof(ThrowExceptionComponent),
                Parameters    = ParameterCollection.Empty,
                Context       = httpContext
            };

            // Act
            await Assert.ThrowsAsync <InvalidTimeZoneException>(async() =>
                                                                await prerenderer.PrerenderComponentAsync(prerenderingContext));

            // Assert
            circuitFactory.MockServiceScope.Verify(scope => scope.Dispose(), Times.Once());
        }
Пример #12
0
 /// <summary>
 /// Intended for framework use only. Applications should not instantiate
 /// this class directly.
 /// </summary>
 public ComponentHub(IServiceProvider services, ILogger <ComponentHub> logger)
 {
     _circuitFactory  = services.GetRequiredService <CircuitFactory>();
     _circuitRegistry = services.GetRequiredService <CircuitRegistry>();
     _logger          = logger ?? throw new ArgumentNullException(nameof(logger));
 }