Example #1
0
        public async Task TestGetLeadership()
        {
            var key           = Guid.NewGuid().ToString();
            var leadershipKey = $"leadershipTests/{key}";

            Console.WriteLine(nameof(TestGetLeadership));
            var opts = Options.Create(new ServiceManagerConfig()
            {
                ServicePort = 2222, ServiceName = key
            });

            using (var manager = new ServiceManager(opts))
            {
                manager.AddTtlHealthCheck(10);
                var registerResult = await manager.RegisterServiceAsync();

                var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                var leaderRegistry = new LeaderRegistry(manager);
                var watcher        = leaderRegistry.GetLeaderWatcher(leadershipKey);
                await watcher.GetLeadershipAsync();

                var result = await watcher.GetCurrentLeaderAsync();

                Assert.Equal(manager.ServiceId, result.ID);
            }
        }
Example #2
0
        public async Task TestRegisterWithCustomTags()
        {
            var serviceName = Guid.NewGuid().ToString();
            var opts        = Options.Create(new ServiceManagerConfig()
            {
                ServicePort = 2222, ServiceName = serviceName
            });

            using (var manager = new ServiceManager(opts))
            {
                manager.CustomTags.Add("CustomTag1");
                manager.CustomTags.Add("CustomTag2");
                manager.AddTtlHealthCheck(10);
                var registerResult = await manager.RegisterServiceAsync();

                var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                using (var serviceRegistry = new ServiceRegistry())
                {
                    var instance = await serviceRegistry.GetServiceInstanceAsync(serviceName);

                    Assert.Contains("CustomTag1", instance.Tags);
                    Assert.Contains("CustomTag2", instance.Tags);
                }
            }
        }
Example #3
0
        public async Task TestLeadershipFailOver()
        {
            var key           = Guid.NewGuid().ToString();
            var leadershipKey = $"leadershipTests/{key}";

            Console.WriteLine(nameof(TestLeadershipFailOver));
            var opts = Options.Create(new ServiceManagerConfig()
            {
                ServicePort = 2222, ServiceName = key
            });
            var opts2 = Options.Create(new ServiceManagerConfig()
            {
                ServicePort = 2222, ServiceName = $"{key}LeaderId1"
            });

            using (var manager = new ServiceManager(opts))
                using (var manager2 = new ServiceManager(opts2))
                {
                    await manager.AddTtlHealthCheck(100).RegisterServiceAsync();

                    var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                    await manager2.AddTtlHealthCheck(100).RegisterServiceAsync();

                    await manager2.TtlCheck.ReportPassingAsync();

                    var watcher1 = (new LeaderRegistry(manager)).GetLeaderWatcher(leadershipKey);
                    await watcher1.GetLeadershipAsync();

                    bool shouldNotBeLeader = true;
                    var  resetEvent        = new ManualResetEvent(false);

                    //Now that 1 is the leader lets try to join 2 into the party
                    var watcher2 = (new LeaderRegistry(manager2)).GetLeaderWatcher(leadershipKey);
                    var result   = watcher2.GetLeadershipAsync().ContinueWith(t =>
                    {
                        Assert.False(shouldNotBeLeader);
                        resetEvent.Set();
                    });

                    //Wait to make sure we didn't fail over straight away
                    await Task.Delay(1000);

                    //Now report that the first service is failing
                    shouldNotBeLeader = false;
                    await manager.TtlCheck.ReportFailAsync();

                    //Now we wait, the leadership should fall over
                    Assert.True(resetEvent.WaitOne(5000));

                    //Now check that service 2 is the leader
                    var leader = await watcher2.GetCurrentLeaderAsync();

                    Assert.Equal(manager2.ServiceId, leader.ID);
                }
        }
        public async Task TestRegisterAndSetPassTtl()
        {
            var serviceName = Guid.NewGuid().ToString();

            using (var manager = new ServiceManager(serviceName))
            {
                manager.AddTtlHealthCheck(10);
                var registerResult = await manager.RegisterServiceAsync();

                var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                Assert.Equal(true, ttlResult);
            }
        }
Example #5
0
        public async Task TestRegisterAndSetPassTtl()
        {
            var serviceName = Guid.NewGuid().ToString();
            var opts        = Options.Create(new ServiceManagerConfig()
            {
                ServicePort = 2222
            });

            using (var manager = new ServiceManager(opts))
            {
                manager.AddTtlHealthCheck(10);
                var registerResult = await manager.RegisterServiceAsync();

                var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                Assert.True(ttlResult);
            }
        }
        public async Task TestGetLeadership()
        {
            var key           = Guid.NewGuid().ToString();
            var leadershipKey = $"leadershipTests/{key}";

            Console.WriteLine(nameof(TestGetLeadership));
            using (var manager = new ServiceManager(key))
            {
                manager.AddTtlHealthCheck(10);
                var registerResult = await manager.RegisterServiceAsync();

                var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                var watcher = manager.Leaders.GetLeaderWatcher(leadershipKey);
                await watcher.GetLeadershipAsync();

                var result = await watcher.GetCurrentLeaderAsync();

                Assert.Equal(manager.ServiceId, result.ID);
            }
        }
Example #7
0
        public async Task TestCallbackIsCalled()
        {
            var serviceName  = Guid.NewGuid().ToString();
            var serviceCount = 100;
            var opts         = Options.Create(new ServiceManagerConfig()
            {
                ServiceName = serviceName, ServicePort = 2222
            });

            using (var manager = new ServiceManager(opts))
                using (var register = new ServiceRegistry())
                {
                    register.SetServiceListCallback(serviceName, list =>
                    {
                        Volatile.Write(ref serviceCount, list?.Count ?? 0);
                    });
                    await Task.Delay(500);

                    Assert.Equal(0, serviceCount);

                    manager.AddTtlHealthCheck(10);
                    var registerResult = await manager.RegisterServiceAsync();

                    var ttlResult = await manager.TtlCheck.ReportPassingAsync();

                    await Task.Delay(500);

                    Assert.Equal(1, serviceCount);

                    ttlResult = await manager.TtlCheck.ReportFailAsync();

                    await Task.Delay(500);

                    Assert.Equal(0, serviceCount);
                }
        }