private void RegisterDefaultServices() { var traceManager = new Lazy<TraceManager>(() => new TraceManager()); Register(typeof(ITraceManager), () => traceManager.Value); var newMessageBus = new Lazy<IMessageBus>(() => new MessageBus(this)); Register(typeof(IMessageBus), () => newMessageBus.Value); var stringMinifier = new Lazy<IStringMinifier>(() => new StringMinifier()); Register(typeof(IStringMinifier), () => stringMinifier.Value); var jsonSerializer = new Lazy<JsonSerializer>(); Register(typeof(JsonSerializer), () => jsonSerializer.Value); var transportManager = new Lazy<TransportManager>(() => new TransportManager(this)); Register(typeof(ITransportManager), () => transportManager.Value); var configurationManager = new DefaultConfigurationManager(); Register(typeof(IConfigurationManager), () => configurationManager); var transportHeartbeat = new Lazy<TransportHeartbeat>(() => new TransportHeartbeat(this)); Register(typeof(ITransportHeartbeat), () => transportHeartbeat.Value); var connectionManager = new Lazy<ConnectionManager>(() => new ConnectionManager(this)); Register(typeof(IConnectionManager), () => connectionManager.Value); var ackHandler = new Lazy<AckHandler>(); Register(typeof(IAckHandler), () => ackHandler.Value); var perfCounterWriter = new Lazy<PerformanceCounterManager>(() => new PerformanceCounterManager(this)); Register(typeof(IPerformanceCounterManager), () => perfCounterWriter.Value); var userIdProvider = new PrincipalUserIdProvider(); Register(typeof(IUserIdProvider), () => userIdProvider); }
public configuration_entry() { FileSystem = new InMemoryFileSystem(); ConfigurationDirectory = FileSystem.GetDirectory(@"c:\data\config").MustExist(); DefaultConfigurationManager = new DefaultConfigurationManager(ConfigurationDirectory); }
public void GetConnectionStringReturnsNullForNotFoundString() { var target = new DefaultConfigurationManager(); var result = target.GetConnectionString("very unknown name"); Assert.IsNull(result); }
public void GetAppSettingReturnsFoundSetting() { var target = new DefaultConfigurationManager(); var result = target.GetAppSetting("defaultKey1"); Assert.AreEqual("defaultValue1", result); }
public void NonGenericGetSectionReturnsNullForNotFoundSection() { var target = new DefaultConfigurationManager(); var result = target.GetSection("very unknown name"); Assert.IsNull(result); }
public void DisconnectTimeoutThrowsWhenNegative() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.KeepAlive = TimeSpan.FromSeconds(-1)); }
public void KeepAliveThrowsWhenZero() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.KeepAlive = TimeSpan.FromSeconds(0)); }
public void GetConnectionStringReturnsFoundString() { var target = new DefaultConfigurationManager(); var result = target.GetConnectionString("defaultName1"); Assert.AreEqual("System.Data.SqlClient", result.ProviderName); Assert.AreEqual("defaultString1", result.ConnectionString); }
public void GenericGetSectionReturnsFoundSection() { var target = new DefaultConfigurationManager(); var result = target.GetSection<TestConfigurationSection>("defaultSection1"); Assert.IsNotNull(result); Assert.AreEqual("defaultTestValue1", result.TestValue); }
public async Task FarmDisconnectRaisesUncleanDisconnects() { EnableTracing(); // Each node shares the same bus but are indepenent servers var counters = new SignalR.Infrastructure.PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); var protectedData = new DefaultProtectedData(); using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000)) { var nodeCount = 3; var nodes = new List <ServerNode>(); for (int i = 0; i < nodeCount; i++) { nodes.Add(new ServerNode(bus)); } var timeout = TimeSpan.FromSeconds(5); foreach (var node in nodes) { var config = node.Resolver.Resolve <IConfigurationManager>(); config.DisconnectTimeout = TimeSpan.FromSeconds(6); IDependencyResolver resolver = node.Resolver; node.Server.Configure(app => { app.MapSignalR <FarmConnection>("/echo", new ConnectionConfiguration { Resolver = resolver }); resolver.Register(typeof(IProtectedData), () => protectedData); }); } var loadBalancer = new LoadBalancer(nodes.Select(f => f.Server).ToArray()); var transport = new Client.Transports.LongPollingTransport(loadBalancer); var connection = new Client.Connection("http://goo/echo"); await connection.Start(transport); for (int i = 0; i < nodes.Count; i++) { nodes[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1)); await Task.Delay(TimeSpan.FromSeconds(1)); } ((Client.IConnection)connection).Disconnect(); await Task.Delay(TimeSpan.FromTicks(timeout.Ticks *nodes.Count)); Assert.Equal(0, FarmConnection.CleanDisconnectCount); Assert.Equal(3, FarmConnection.UncleanDisconnectCount); } }
public void DisconnectTimeoutThrowsWhenLessThanSixSeconds() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.DisconnectTimeout = TimeSpan.FromSeconds(5.99)); config.DisconnectTimeout = TimeSpan.FromSeconds(6); }
/// <summary> /// Initializes resolvers. /// </summary> private void InitializeResolvers() { // Initialize configuration resolver. var configManager = new DefaultConfigurationManager(); ConfigResolver.Current = new ConfigResolver(configManager); // Initialize form persistence resolver. var formPersistence = new JsonFormPersistence(); FormPersistence.Current = new FormPersistence(formPersistence); // Initialize configured form persistence resolver. var conFormPersistence = new JsonConfiguredFormPersistence(); ConfiguredFormPersistence.Current = new ConfiguredFormPersistence(conFormPersistence); // Initialize layout persistence resolver. var layoutPersistence = new JsonLayoutPersistence(); LayoutPersistence.Current = new LayoutPersistence(layoutPersistence); // Initialize validation persistence resolver. var validationPersistence = new JsonValidationPersistence(); ValidationPersistence.Current = new ValidationPersistence(validationPersistence); // Initialize data value persistence resolver. var dataValuePersistence = new JsonDataValuePersistence(); DataValuePersistence.Current = new DataValuePersistence(dataValuePersistence); // Initialize folder persistence resolver. var folderPersistence = new JsonFolderPersistence(); FolderPersistence.Current = new FolderPersistence(folderPersistence); // Initialize entity persistence resolver. var entityPersistence = new DefaultEntityPersistence(); EntityPersistence.Current = new EntityPersistence(entityPersistence); }
public void HeartbeatIntervalIsHalfTheKeepAlive() { // Arrange var config = new DefaultConfigurationManager(); var random = new Random(); config.KeepAlive = TimeSpan.FromSeconds(random.NextDouble() * 8 + 2); // 2 to 10 seconds // Assert Assert.Equal(TimeSpan.FromTicks(config.KeepAlive.Value.Ticks / 2), config.HeartbeatInterval()); }
public void SettingDisconnectTimeoutSetKeepAliveToAThirdOfItself() { // Arrange var config = new DefaultConfigurationManager(); var random = new Random(); config.DisconnectTimeout = TimeSpan.FromSeconds(random.Next(6, 31536000)); // 6 seconds to a year // Assert Assert.Equal(TimeSpan.FromTicks(config.DisconnectTimeout.Ticks / 3), config.KeepAlive); }
public void TopicTopicTimeToLiveIsDoubleTheDisconnectTimeoutWhenKeepAliveIsNull() { var config = new DefaultConfigurationManager(); var random = new Random(); config.DisconnectTimeout = TimeSpan.FromSeconds(random.Next(6, 31536000)); // 12 seconds to a year config.KeepAlive = null; // Assert Assert.Equal(TimeSpan.FromTicks(config.DisconnectTimeout.Ticks * 2), config.TopicTtl()); }
public void TopicTimeToLiveIsDoubleTheDisconnectAndKeepAliveTimeouts() { var config = new DefaultConfigurationManager(); var random = new Random(); config.DisconnectTimeout = TimeSpan.FromSeconds(random.Next(12, 31536000)); // 12 seconds to a year config.KeepAlive = TimeSpan.FromTicks(config.DisconnectTimeout.Ticks / 6); // Set custom keep-alive to half the default // Assert Assert.Equal(TimeSpan.FromTicks(config.DisconnectTimeout.Ticks * 2 + config.KeepAliveTimeout().Value.Ticks * 2), config.TopicTtl()); }
public void HeartbeatIntervalIsASixthOfTheDisconnectTimeoutIfTheKeepAliveIsNull() { // Arrange var config = new DefaultConfigurationManager(); var random = new Random(); config.DisconnectTimeout = TimeSpan.FromSeconds(random.Next(6, 31536000)); // 6 seconds to a year config.KeepAlive = null; // Assert Assert.Equal(TimeSpan.FromTicks(config.DisconnectTimeout.Ticks / 6), config.HeartbeatInterval()); }
public void FarmDisconnectOnlyRaisesEventOnce() { EnableTracing(); // Each node shares the same bus but are indepenent servers var counters = new SignalR.Infrastructure.PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000)) { var nodeCount = 3; var nodes = new List <ServerNode>(); for (int i = 0; i < nodeCount; i++) { nodes.Add(new ServerNode(bus)); } var timeout = TimeSpan.FromSeconds(5); foreach (var node in nodes) { var config = node.Resolver.Resolve <IConfigurationManager>(); config.DisconnectTimeout = TimeSpan.FromSeconds(6); IDependencyResolver resolver = node.Resolver; node.Server.Configure(app => { app.MapConnection <FarmConnection>("/echo", new ConnectionConfiguration { Resolver = resolver }); }); } var loadBalancer = new LoadBalancer(nodes.Select(f => f.Server).ToArray()); var transport = new Client.Transports.LongPollingTransport(loadBalancer); var connection = new Client.Connection("http://goo/echo"); connection.Start(transport).Wait(); for (int i = 0; i < nodes.Count; i++) { nodes[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1)); Thread.Sleep(TimeSpan.FromSeconds(1)); } ((Client.IConnection)connection).Disconnect(); Thread.Sleep(TimeSpan.FromTicks(timeout.Ticks * nodes.Count)); Assert.Equal(1, nodes.Sum(n => n.Connection.DisconnectCount)); } }
public void DefaultValues() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Equal(config.ConnectionTimeout.TotalSeconds, 110); Assert.Equal(config.DisconnectTimeout.TotalSeconds, 40); Assert.Equal(config.HeartBeatInterval.TotalSeconds, 10); Assert.NotNull(config.KeepAlive); Assert.Equal(config.KeepAlive.Value.TotalSeconds, 30); }
private void RegisterDefaultServices() { var traceManager = new Lazy <TraceManager>(() => new TraceManager()); Register(typeof(ITraceManager), () => traceManager.Value); var newMessageBus = new Lazy <IMessageBus>(() => new MessageBus(this)); Register(typeof(IMessageBus), () => newMessageBus.Value); var stringMinifier = new Lazy <IStringMinifier>(() => new StringMinifier()); Register(typeof(IStringMinifier), () => stringMinifier.Value); var jsonSerializer = new Lazy <JsonSerializer>(); Register(typeof(JsonSerializer), () => jsonSerializer.Value); //var transportManager = new Lazy<TransportManager>(() => new TransportManager(this)); //Register(typeof(ITransportManager), () => transportManager.Value); var configurationManager = new DefaultConfigurationManager(); Register(typeof(IConfigurationManager), () => configurationManager); var transportHeartbeat = new Lazy <TransportHeartbeat>(() => new TransportHeartbeat(this)); Register(typeof(ITransportHeartbeat), () => transportHeartbeat.Value); var connectionManager = new Lazy <ConnectionManager>(() => new ConnectionManager(this)); Register(typeof(IConnectionManager), () => connectionManager.Value); var ackHandler = new Lazy <AckHandler>(); Register(typeof(IAckHandler), () => ackHandler.Value); var serverMessageHandler = new Lazy <AckSubscriber>(() => new AckSubscriber(this)); Register(typeof(AckSubscriber), () => serverMessageHandler.Value); var perfCounterWriter = new Lazy <PerformanceCounterManager>(() => new PerformanceCounterManager(this)); Register(typeof(IPerformanceCounterManager), () => perfCounterWriter.Value); var userIdProvider = new PrincipalUserIdProvider(); Register(typeof(IUserIdProvider), () => userIdProvider); var pool = new MemoryPool(); Register(typeof(IMemoryPool), () => pool); }
public void DefaultValues() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Equal(config.ConnectionTimeout.TotalSeconds, 110); Assert.Equal(config.DisconnectTimeout.TotalSeconds, 40); Assert.Equal(config.HeartbeatInterval.TotalSeconds, 10); Assert.NotNull(config.KeepAlive); Assert.Equal(config.KeepAlive.Value.TotalSeconds, 15); }
public void DefaultValues() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Equal(110, config.ConnectionTimeout.TotalSeconds); Assert.Equal(30, config.DisconnectTimeout.TotalSeconds); Assert.Equal(10, config.KeepAlive.Value.TotalSeconds); Assert.Equal(20, config.KeepAliveTimeout().Value.TotalSeconds); Assert.Equal(5, config.HeartbeatInterval().TotalSeconds); Assert.Equal(100, config.TopicTtl().TotalSeconds); }
public async Task ContextGroupAddCompletesSuccessfully() { // https://github.com/SignalR/SignalR/issues/3337 // Each node shares the same bus but are independent servers var counters = new PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); using (EnableTracing()) using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000)) using (var memoryHost = new MemoryHost()) { memoryHost.Configure(app => { var resolver = new DefaultDependencyResolver(); resolver.Register(typeof(IMessageBus), () => bus); app.MapSignalR(new HubConfiguration { Resolver = resolver }); }); using (var connection = new HubConnection("http://goo/")) { var proxy = connection.CreateHubProxy("FarmGroupHub"); const string group = "group"; const string message = "message"; var mre = new AsyncManualResetEvent(); proxy.On <string>("message", m => { if (m == message) { mre.Set(); } }); await connection.Start(memoryHost); // Add the connection to a group via an IHubContext on a "second" server. var secondResolver = new DefaultDependencyResolver(); secondResolver.Register(typeof(IMessageBus), () => bus); var secondConnectionManager = secondResolver.Resolve <IConnectionManager>(); var secondHubContext = secondConnectionManager.GetHubContext <FarmGroupHub>(); await secondHubContext.Groups.Add(connection.ConnectionId, group); await proxy.Invoke("SendToGroup", group, message); Assert.True(await mre.WaitAsync(TimeSpan.FromSeconds(5))); } } }
public async Task FarmDisconnectRaisesUncleanDisconnects() { // Each node shares the same bus but are independent servers const int nodeCount = 3; var counters = new PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); configurationManager.DisconnectTimeout = TimeSpan.FromSeconds(6); using (EnableDisposableTracing()) using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000)) using (var loadBalancer = new LoadBalancer(nodeCount)) { var broadcasters = new List <IConnection>(); var disconnectCounter = new DisconnectCounter(); loadBalancer.Configure(app => { var resolver = new DefaultDependencyResolver(); resolver.Register(typeof(IMessageBus), () => bus); resolver.Register(typeof(IConfigurationManager), () => configurationManager); resolver.Register(typeof(FarmConnection), () => new FarmConnection(disconnectCounter)); var connectionManager = resolver.Resolve <IConnectionManager>(); broadcasters.Add(connectionManager.GetConnectionContext <FarmConnection>().Connection); app.MapSignalR <FarmConnection>("/echo", new ConnectionConfiguration { Resolver = resolver }); }); var transport = new Client.Transports.LongPollingTransport(loadBalancer); var connection = new Client.Connection("http://goo/echo"); await connection.Start(transport); for (int i = 0; i < nodeCount; i++) { broadcasters[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1)).Wait(); await Task.Delay(TimeSpan.FromSeconds(1)); } ((Client.IConnection)connection).Disconnect(); await Task.Delay(TimeSpan.FromTicks(TimeSpan.FromSeconds(5).Ticks *nodeCount)); Assert.Equal(0, disconnectCounter.CleanDisconnectCount); Assert.Equal(3, disconnectCounter.UncleanDisconnectCount); } }
public void DefaultConfigurationManager_GetSettingUseConfigurationRootIndexer() { var settingName = "Fake Setting"; var mock = new Mock <Microsoft.Extensions.Configuration.IConfigurationRoot>(); var sut = new DefaultConfigurationManager(mock.Object); mock.Setup(m => m[settingName]).Returns(string.Empty); sut.GetSetting(settingName); mock.Verify(m => m[settingName]); }
public void DefaultConfigurationManager_GetSettingTranslateDottes() { var settingName = "Fake.Dot.Separed.Setting"; var realSettingName = "Fake:Dot:Separed:Setting"; var mock = new Mock <Microsoft.Extensions.Configuration.IConfigurationRoot>(); var sut = new DefaultConfigurationManager(mock.Object); mock.Setup(m => m[realSettingName]).Returns(string.Empty); sut.GetSetting(settingName); mock.Verify(m => m[realSettingName]); }
public void TwoSecondsAndNullOnlyValidKeepAliveValuesWhenDisconnectTimeoutIsSixSeconds() { // Arrange var config = new DefaultConfigurationManager(); config.DisconnectTimeout = TimeSpan.FromSeconds(6); // Assert Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.KeepAlive = TimeSpan.FromSeconds(1.99)); Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.KeepAlive = TimeSpan.FromSeconds(2.01)); // Assert doesn't throw config.KeepAlive = TimeSpan.FromSeconds(2); config.KeepAlive = null; }
public DefaultDependencyResolver() { var traceManager = new Lazy<TraceManager>(() => new TraceManager()); Register(typeof(ITraceManager), () => traceManager.Value); var messageBus = new Lazy<InProcessMessageBus>(() => new InProcessMessageBus(this)); Register(typeof(IMessageBus), () => messageBus.Value); var serializer = new JsonConvertAdapter(); Register(typeof(IJsonSerializer), () => serializer); // Hubs var hubLocator = new Lazy<DefaultHubLocator>(); Register(typeof(IHubLocator), () => hubLocator.Value); var hubTypeResolver = new Lazy<DefaultHubTypeResolver>(() => new DefaultHubTypeResolver(this)); Register(typeof(IHubTypeResolver), () => hubTypeResolver.Value); var actionResolver = new Lazy<DefaultActionResolver>(() => new DefaultActionResolver()); Register(typeof(IActionResolver), () => actionResolver.Value); var activator = new Lazy<DefaultHubActivator>(() => new DefaultHubActivator(this)); Register(typeof(IHubActivator), () => activator.Value); var hubFactory = new Lazy<DefaultHubFactory>(() => new DefaultHubFactory(this)); Register(typeof(IHubFactory), () => hubFactory.Value); var proxyGenerator = new Lazy<DefaultJavaScriptProxyGenerator>(() => new DefaultJavaScriptProxyGenerator(this)); Register(typeof(IJavaScriptProxyGenerator), () => proxyGenerator.Value); var connectionIdFactory = new GuidConnectionIdFactory(); Register(typeof(IConnectionIdFactory), () => connectionIdFactory); var transportManager = new Lazy<TransportManager>(() => new TransportManager(this)); Register(typeof(ITransportManager), () => transportManager.Value); var configurationManager = new DefaultConfigurationManager(); Register(typeof(IConfigurationManager), () => configurationManager); var transportHeartbeat = new Lazy<TransportHeartBeat>(() => new TransportHeartBeat(this)); Register(typeof(ITransportHeartBeat), () => transportHeartbeat.Value); var connectionManager = new Lazy<ConnectionManager>(() => new ConnectionManager(this)); Register(typeof(IConnectionManager), () => connectionManager.Value); }
public void KeepAliveTimeoutIsTwiceTheKeepAlive() { // Arrange var config = new DefaultConfigurationManager(); var random = new Random(); config.KeepAlive = TimeSpan.FromSeconds(random.NextDouble() * 8 + 2); // 2 to 10 seconds // Assert Assert.Equal(TimeSpan.FromTicks(config.KeepAlive.Value.Ticks * 2), config.KeepAliveTimeout()); // Arrange config.KeepAlive = null; // Assert Assert.Equal(null, config.KeepAliveTimeout()); }
public void KeepAliveCannotBeConfiguredBeforeDisconnectTimeout() { // Arrange var config = new DefaultConfigurationManager(); config.KeepAlive = TimeSpan.FromSeconds(5); // Assert Assert.Throws(typeof(InvalidOperationException), () => config.DisconnectTimeout = TimeSpan.FromSeconds(40)); // Arrange config = new DefaultConfigurationManager(); config.KeepAlive = null; // Assert Assert.Throws(typeof(InvalidOperationException), () => config.DisconnectTimeout = TimeSpan.FromSeconds(40)); }
public void roundtrips(string token, string username, string password) { var confMan = new DefaultConfigurationManager(new InMemoryFileSystem().GetDirectory(@"c:\config").MustExist()); confMan.Save(new RemoteRepositories { new RemoteRepository { Name = "iron-hills", FetchRepository = new RemoteRepositoryEndpoint { Token = token, Username = username, Password = password } } }); confMan.Load<RemoteRepositories>()["iron-hills"] .Check(x => x.FetchRepository.Token.ShouldBe(token)) .Check(x => x.FetchRepository.Username.ShouldBe(username)) .Check(x => x.FetchRepository.Password.ShouldBe(password)); }
public void KeepAliveThrowsWhenGreaterThanAThirdOfTheDisconnectTimeout() { // Arrange var config = new DefaultConfigurationManager(); // Assert Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.KeepAlive = TimeSpan.FromSeconds(10.01)); config.KeepAlive = TimeSpan.FromSeconds(10); // Arrange config = new DefaultConfigurationManager(); config.DisconnectTimeout = TimeSpan.FromSeconds(15); // Assert Assert.Throws(typeof(ArgumentOutOfRangeException), () => config.KeepAlive = TimeSpan.FromSeconds(5.01)); config.KeepAlive = TimeSpan.FromSeconds(5); }
public void roundtrips(string token, string username, string password) { var confMan = new DefaultConfigurationManager(new InMemoryFileSystem().GetDirectory(@"c:\config").MustExist()); confMan.Save(new RemoteRepositories { new RemoteRepository { Name = "iron-hills", FetchRepository = new RemoteRepositoryEndpoint { Token = token, Username = username, Password = password } } }); confMan.Load <RemoteRepositories>()["iron-hills"] .Check(x => x.FetchRepository.Token.ShouldBe(token)) .Check(x => x.FetchRepository.Username.ShouldBe(username)) .Check(x => x.FetchRepository.Password.ShouldBe(password)); }
private void RegisterDefaultServices() { var traceManager = new Lazy<TraceManager>(() => new TraceManager()); Register(typeof(ITraceManager), () => traceManager.Value); var serverIdManager = new ServerIdManager(); Register(typeof(IServerIdManager), () => serverIdManager); var serverMessageHandler = new Lazy<IServerCommandHandler>(() => new ServerCommandHandler(this)); Register(typeof(IServerCommandHandler), () => serverMessageHandler.Value); var newMessageBus = new Lazy<IMessageBus>(() => new MessageBus(this)); Register(typeof(IMessageBus), () => newMessageBus.Value); var stringMinifier = new Lazy<IStringMinifier>(() => new StringMinifier()); Register(typeof(IStringMinifier), () => stringMinifier.Value); var serializer = new Lazy<JsonNetSerializer>(); Register(typeof(IJsonSerializer), () => serializer.Value); var transportManager = new Lazy<TransportManager>(() => new TransportManager(this)); Register(typeof(ITransportManager), () => transportManager.Value); var configurationManager = new DefaultConfigurationManager(); Register(typeof(IConfigurationManager), () => configurationManager); var transportHeartbeat = new Lazy<TransportHeartbeat>(() => new TransportHeartbeat(this)); Register(typeof(ITransportHeartbeat), () => transportHeartbeat.Value); var connectionManager = new Lazy<ConnectionManager>(() => new ConnectionManager(this)); Register(typeof(IConnectionManager), () => connectionManager.Value); var ackHandler = new Lazy<AckHandler>(); Register(typeof(IAckHandler), () => ackHandler.Value); var perfCounterWriter = new Lazy<PerformanceCounterManager>(() => new PerformanceCounterManager(this)); Register(typeof(IPerformanceCounterManager), () => perfCounterWriter.Value); var protectedData = new DefaultProtectedData(); Register(typeof(IProtectedData), () => protectedData); }
void RefreshLockFiles() { if (!_canLock) { return; } _lockFile = BasePath.Files("*.lock").Where(x => x.Name.StartsWith("packages.")).OrderBy(x => x.Name.Length).FirstOrDefault() ?? BasePath.GetFile("packages.lock"); _lockFileUri = new Uri(ConstantUris.URI_BASE, UriKind.Absolute).Combine(new Uri(_lockFile.Name, UriKind.Relative)); if (_lockFile.Exists == false) { return; } var lockedPackageInfo = new DefaultConfigurationManager(BasePath).Load <LockedPackages>(_lockFileUri) .Lock; var lockedPackages = lockedPackageInfo.Select( locked => _packageLoader.Packages.Single(package => locked.Name.EqualsNoCase(package.Package.Name) && locked.Version == package.Package.Version).Package); LockedPackages = lockedPackages.ToLookup(x => string.Empty); }
/// <summary> /// Initializes resolvers. /// </summary> private void InitializeResolvers() { // Initialize configuration resolver. var configManager = new DefaultConfigurationManager(); ConfigResolver.Current = new ConfigResolver(configManager); // Initialize form persistence resolver. var formPersistence = new JsonFormPersistence(); FormPersistence.Current = new FormPersistence(formPersistence); // Initialize layout persistence resolver. var layoutPersistence = new JsonLayoutPersistence(); LayoutPersistence.Current = new LayoutPersistence(layoutPersistence); // Initialize validation persistence resolver. var validationPersistence = new JsonValidationPersistence(); ValidationPersistence.Current = new ValidationPersistence(validationPersistence); // Initialize folder persistence resolver. var folderPersistence = new JsonFolderPersistence(); FolderPersistence.Current = new FolderPersistence(folderPersistence); // Initialize entity persistence resolver. var entityPersistence = new DefaultEntityPersistence(); EntityPersistence.Current = new EntityPersistence(entityPersistence); }
public async Task FarmDisconnectRaisesUncleanDisconnects() { // Each node shares the same bus but are independent servers const int nodeCount = 3; var counters = new PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); configurationManager.DisconnectTimeout = TimeSpan.FromSeconds(6); using (EnableTracing()) using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000)) using (var loadBalancer = new LoadBalancer(nodeCount)) { var broadcasters = new List <IConnection>(); var disconnectCounter = Channel.CreateUnbounded <DisconnectData>(); loadBalancer.Configure(app => { var resolver = new DefaultDependencyResolver(); resolver.Register(typeof(IMessageBus), () => bus); resolver.Register(typeof(IConfigurationManager), () => configurationManager); resolver.Register(typeof(FarmConnection), () => new FarmConnection(disconnectCounter.Writer)); var connectionManager = resolver.Resolve <IConnectionManager>(); broadcasters.Add(connectionManager.GetConnectionContext <FarmConnection>().Connection); app.MapSignalR <FarmConnection>("/echo", new ConnectionConfiguration { Resolver = resolver }); }); var transport = new Client.Transports.LongPollingTransport(loadBalancer); var connection = new Client.Connection("http://goo/echo"); await connection.Start(transport); for (int i = 0; i < nodeCount; i++) { broadcasters[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1)).Wait(); await Task.Delay(TimeSpan.FromSeconds(1)); } ((Client.IConnection)connection).Disconnect(); // Give up after 30 seconds var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(30)); // We can get duplicate OnDisconnected calls, and that's a known by-design issue. var instancesDisconnected = new HashSet <string>(); while (await disconnectCounter.Reader.WaitToReadAsync(cts.Token)) { while (!cts.IsCancellationRequested && disconnectCounter.Reader.TryRead(out var disconnect)) { Assert.False(disconnect.StopCalled, "Disconnect should not have been due to stop being called."); instancesDisconnected.Add(disconnect.InstanceName); if (instancesDisconnected.Count == 3) { // We're done, all three instances disconneted return; } } } // If we get here it means the cts was cancelled which means we timed out cts.Token.ThrowIfCancellationRequested(); } }
public async Task FarmGroupAddCompletesSuccessfully(TransportType transportType) { // https://github.com/SignalR/SignalR/issues/3337 // Each node shares the same bus but are independent servers const int nodeCount = 2; var counters = new PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); // Ensure /send and /connect requests get handled by different servers Func <string, int> scheduler = url => url.Contains("/send") ? 0 : 1; using (EnableTracing()) using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000)) using (var loadBalancer = new LoadBalancer(nodeCount, scheduler)) { loadBalancer.Configure(app => { var resolver = new DefaultDependencyResolver(); resolver.Register(typeof(IMessageBus), () => bus); app.MapSignalR(new HubConfiguration { Resolver = resolver }); }); using (var connection = new HubConnection("http://goo/")) { var proxy = connection.CreateHubProxy("FarmGroupHub"); const string group = "group"; const string message = "message"; var mre = new AsyncManualResetEvent(); proxy.On <string>("message", m => { if (m == message) { mre.Set(); } }); Client.Transports.IClientTransport transport; switch (transportType) { case TransportType.LongPolling: transport = new Client.Transports.LongPollingTransport(loadBalancer); break; case TransportType.ServerSentEvents: transport = new Client.Transports.ServerSentEventsTransport(loadBalancer); break; default: throw new ArgumentException("transportType"); } await connection.Start(transport); await proxy.Invoke("JoinGroup", group); await proxy.Invoke("SendToGroup", group, message); Assert.True(await mre.WaitAsync(TimeSpan.FromSeconds(5))); } } }
static Dictionary <string, string> parsed(string input) { return(DefaultConfigurationManager.ParseKeyValuePairs(input).ToDictionary(x => x.Key, x => x.Value)); }
public void DefaultConfigurationManager_IsAssignableFromIConfigurationManager() { var sut = new DefaultConfigurationManager(Mock.Of <Microsoft.Extensions.Configuration.IConfigurationRoot>()); Assert.IsAssignableFrom <IConfigurationManager>(sut); }
void when_saving_configuration(Uri uri) { DefaultConfigurationManager.Save(uri, Entry); Entry = DefaultConfigurationManager.LoadRemoteRepositories(); }
public void GenericGetSectionReturnsNullForExistingSectionOfWrongType() { var target = new DefaultConfigurationManager(); var result = target.GetSection<TestConfigurationSection>("anotherTestConfigurationSection"); Assert.IsNull(result); }
public void FarmDisconnectOnlyRaisesEventOnce() { // Each node shares the same bus but are indepenent servers var counters = new SignalR.Infrastructure.PerformanceCounterManager(); var configurationManager = new DefaultConfigurationManager(); using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager)) { var nodeCount = 3; var nodes = new List<ServerNode>(); for (int i = 0; i < nodeCount; i++) { nodes.Add(new ServerNode(bus)); } var timeout = TimeSpan.FromSeconds(5); foreach (var node in nodes) { node.Server.Configuration.HeartbeatInterval = timeout; node.Server.Configuration.DisconnectTimeout = TimeSpan.Zero; node.Server.MapConnection<FarmConnection>("/echo"); } var loadBalancer = new LoadBalancer(nodes.Select(f => f.Server).ToArray()); var transport = new Client.Transports.LongPollingTransport(loadBalancer); var connection = new Client.Connection("http://goo/echo"); connection.Start(transport).Wait(); for (int i = 0; i < nodes.Count; i++) { nodes[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1)); Thread.Sleep(TimeSpan.FromSeconds(1)); } connection.Stop(); Thread.Sleep(TimeSpan.FromTicks(timeout.Ticks * nodes.Count)); Assert.Equal(1, nodes.Sum(n => n.Connection.DisconnectCount)); } }