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); }
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()); }
/// <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; }
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; }
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()); }
/// <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)); }