public void HasRegistration_ApplicationIsRegistered_ReturnsTrue()
        {
            var inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, _configurationMock);
            var uniqueId         = inMemoryProvider.Register("ClientApp", "https://www.someclient.com");

            Assert.IsTrue(inMemoryProvider.HasRegistration(uniqueId));
        }
        public void RegisterHeartBeat_EmptyUUidApplicationRegistered_ThrowsArgumentException()
        {
            var inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, _configurationMock);

            inMemoryProvider.Register("ClientApp", "https://www.someclient.com");

            Assert.Throws <RpcException>(() => inMemoryProvider.RegisterHeartBeat(new UUID()));
        }
        public void Register_AlreadyExistingRegistration_ReturnsAlreadyRegisteredApp()
        {
            var inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, _configurationMock);

            inMemoryProvider.Register("ClientApp", "https://www.someclient.com");

            Assert.IsNotNull(inMemoryProvider.Register("ClientApp", "https://www.someclient.com"));
        }
        public void ResolveHost_RegisteredInDistributor_ShouldReturnNextHost()
        {
            var inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, _configurationMock);
            var discovery        = new RoundRobinDistribution(inMemoryProvider, _discoveryLoggerMock.Object);
            var uid = inMemoryProvider.Register("ClientApp", "https://www.someclient.com");

            var host = discovery.ResolveHost(uid, "ClientApp");

            Assert.AreEqual("https://www.someclient.com", host);
        }
        public static void AddDiscoverio(this IServiceCollection serviceCollection)
        {
            var provider = serviceCollection.BuildServiceProvider();

            var registrationProviderLogger = provider.GetService <ILogger <InMemoryRegistrationProvider> >();
            var distributionLogger         = provider.GetService <ILogger <RoundRobinDistribution> >();
            var configuration = provider.GetService <IConfiguration>();

            var inMemoryRegistrationProvider = new InMemoryRegistrationProvider(registrationProviderLogger, configuration);
            var roundRobinDistribution       = new RoundRobinDistribution(inMemoryRegistrationProvider, distributionLogger);

            serviceCollection.AddSingleton <IRegistrationProvider, InMemoryRegistrationProvider>(x => inMemoryRegistrationProvider);
            serviceCollection.AddSingleton <IServiceDiscoveryLoadBalancer, RoundRobinDistribution>(x => roundRobinDistribution);
        }
        public void Setup()
        {
            var inMemorySettings = new Dictionary <string, string> {
                { "Discoverio.Server:DeRegisterCycleFrequency", "5" },
                { "Discoverio.Server:ElapsedTimeToDeRegister", "5" },
            };

            _configurationMock = new ConfigurationBuilder()
                                 .AddInMemoryCollection(inMemorySettings)
                                 .Build();

            _inMemoryLoggerMock  = new Mock <ILogger <InMemoryRegistrationProvider> >();
            _discoveryLoggerMock = new Mock <ILogger <RoundRobinDistribution> >();

            _inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, _configurationMock);
        }
        public void ResolveHost_RegistrationExpiredInDistributor_ThrowsRpcException()
        {
            var inMemorySettings = new Dictionary <string, string> {
                { "Discoverio.Server:DeRegisterCycleFrequency", "1" },
                { "Discoverio.Server:ElapsedTimeToDeRegister", "1" },
            };

            var configuration = new ConfigurationBuilder()
                                .AddInMemoryCollection(inMemorySettings)
                                .Build();

            var inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, configuration);
            var discovery        = new RoundRobinDistribution(inMemoryProvider, _discoveryLoggerMock.Object);
            var uid = inMemoryProvider.Register("ClientApp", "https://www.someclient.com");

            var host = discovery.ResolveHost(uid, "ClientApp");

            Assert.AreEqual("https://www.someclient.com", host);

            Thread.Sleep(TimeSpan.FromSeconds(2));

            Assert.Throws <RpcException>(() => discovery.ResolveHost(uid, "SomeAppName"));
        }
        public void Register_GivenInvalidUri_ThrowsArgumentException(string appName, string host)
        {
            var inMemoryProvider = new InMemoryRegistrationProvider(_inMemoryLoggerMock.Object, _configurationMock);

            Assert.Throws <RpcException>(() => inMemoryProvider.Register(appName, host));
        }