public async void ServiceLifetimeManagerIgnoreBlazorHubProtocolTest(string functionName, Type type) { var blazorDetector = new DefaultBlazorDetector(); var protocolResolver = new DefaultHubProtocolResolver(new IHubProtocol[] { new JsonHubProtocol(), new MessagePackHubProtocol(), new CustomHubProtocol(), }, NullLogger <DefaultHubProtocolResolver> .Instance); IOptions <HubOptions> globalHubOptions = Options.Create(new HubOptions() { SupportedProtocols = new List <string>() { "json", "messagepack", MockProtocol, "json" } }); IOptions <HubOptions <TestHub> > localHubOptions = Options.Create(new HubOptions <TestHub>() { SupportedProtocols = new List <string>() { "json", "messagepack", MockProtocol } }); var serviceConnectionManager = new TestServiceConnectionManager <TestHub>(); var serviceLifetimeManager = new ServiceLifetimeManager <TestHub>(serviceConnectionManager, new ClientConnectionManager(), protocolResolver, Logger, Marker, globalHubOptions, localHubOptions, blazorDetector); await InvokeMethod(serviceLifetimeManager, functionName); Assert.Equal(1, serviceConnectionManager.GetCallCount(type)); VerifyServiceMessage(functionName, serviceConnectionManager.ServiceMessage); Assert.Equal(2, (serviceConnectionManager.ServiceMessage as MulticastDataMessage).Payloads.Count); Assert.True(blazorDetector.IsBlazor(nameof(TestHub))); }
public async void ServiceLifetimeManagerIntegrationTest(string methodName, Type messageType) { var proxy = new ServiceConnectionProxy(); var blazorDetector = new DefaultBlazorDetector(); var serviceConnectionManager = new ServiceConnectionManager <TestHub>(); serviceConnectionManager.SetServiceConnection(proxy.ServiceConnectionContainer); var serviceLifetimeManager = new ServiceLifetimeManager <TestHub>(serviceConnectionManager, proxy.ClientConnectionManager, HubProtocolResolver, Logger, Marker, _globalHubOptions, _localHubOptions, blazorDetector); var serverTask = proxy.WaitForServerConnectionAsync(1); _ = proxy.StartAsync(); await proxy.WaitForServerConnectionsInited().OrTimeout(); await serverTask.OrTimeout(); var task = proxy.WaitForApplicationMessageAsync(messageType); var invokeTask = InvokeMethod(serviceLifetimeManager, methodName); if (typeof(IAckableMessage).IsAssignableFrom(messageType)) { await proxy.WriteMessageAsync(new AckMessage(1, (int)AckStatus.Ok)); } // Need to return in time, or it indicate a timeout when sending ack-able messages. await invokeTask.OrTimeout(); var message = await task.OrTimeout(); VerifyServiceMessage(methodName, message); }
public async Task TestNegotiateHandlerServerStickyRespectBlazor(bool isBlazor) { var hubName = typeof(Chat).Name; var blazorDetector = new DefaultBlazorDetector(); var config = new ConfigurationBuilder().Build(); var serviceProvider = new ServiceCollection() .AddSignalR(o => o.EnableDetailedErrors = true) .AddAzureSignalR( o => { o.ServerStickyMode = ServerStickyMode.Preferred; o.ConnectionString = DefaultConnectionString; }) .Services .AddLogging() .AddSingleton <IConfiguration>(config) .AddSingleton(typeof(IUserIdProvider), typeof(DefaultUserIdProvider)) .AddSingleton(typeof(IBlazorDetector), blazorDetector) .BuildServiceProvider(); blazorDetector.TrySetBlazor(hubName, isBlazor); var httpContext = new DefaultHttpContext { User = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(CustomClaimType, CustomUserId), new Claim(ClaimTypes.NameIdentifier, DefaultUserId), new Claim("custom", "custom"), })) }; var handler = serviceProvider.GetRequiredService <NegotiateHandler <Chat> >(); var negotiateResponse = await handler.Process(httpContext); Assert.NotNull(negotiateResponse); Assert.NotNull(negotiateResponse.Url); Assert.NotNull(negotiateResponse.AccessToken); Assert.Null(negotiateResponse.ConnectionId); Assert.Empty(negotiateResponse.AvailableTransports); var token = JwtSecurityTokenHandler.ReadJwtToken(negotiateResponse.AccessToken); var mode = token.Claims.FirstOrDefault(s => s.Type == Constants.ClaimType.ServerStickyMode)?.Value; if (isBlazor) { Assert.Equal("Required", mode); } else { Assert.Equal("Preferred", mode); } Assert.Equal("True", token.Claims.FirstOrDefault(s => s.Type == Constants.ClaimType.EnableDetailedErrors)?.Value); }
public async void ServiceLifetimeManagerOnlyBlazorHubProtocolTest(string functionName, Type type) { var serviceConnectionManager = new TestServiceConnectionManager <TestHub>(); var blazorDetector = new DefaultBlazorDetector(); var serviceLifetimeManager = MockLifetimeManager(serviceConnectionManager, null, blazorDetector); await InvokeMethod(serviceLifetimeManager, functionName); Assert.Equal(1, serviceConnectionManager.GetCallCount(type)); VerifyServiceMessage(functionName, serviceConnectionManager.ServiceMessage); Assert.Equal(1, (serviceConnectionManager.ServiceMessage as MulticastDataMessage).Payloads.Count); Assert.True(blazorDetector.IsBlazor(nameof(TestHub))); }
public async void ServiceLifetimeManagerTest(string functionName, Type type) { var serviceConnectionManager = new TestServiceConnectionManager <TestHub>(); var blazorDetector = new DefaultBlazorDetector(); var serviceLifetimeManager = new ServiceLifetimeManager <TestHub>(serviceConnectionManager, new ClientConnectionManager(), HubProtocolResolver, Logger, Marker, _globalHubOptions, _localHubOptions, blazorDetector); await InvokeMethod(serviceLifetimeManager, functionName); Assert.Equal(1, serviceConnectionManager.GetCallCount(type)); VerifyServiceMessage(functionName, serviceConnectionManager.ServiceMessage); Assert.Equal(2, (serviceConnectionManager.ServiceMessage as MulticastDataMessage).Payloads.Count); Assert.False(blazorDetector.IsBlazor(nameof(TestHub))); }