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);
        }
Example #12
0
        /// <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());
        }
Example #18
0
        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);
        }
Example #21
0
        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);
        }
Example #23
0
        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)));
                        }
                    }
        }
Example #24
0
        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));
        }
Example #31
0
        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);
        }
Example #33
0
        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);
        }
Example #35
0
        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);

        }
Example #37
0
        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();
                    }
        }
Example #38
0
        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)));
                        }
                    }
        }
Example #39
0
 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);
        }
Example #43
0
        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));
            }
        }