public void TryCreatePermanentReplicaAsync_should_return_true_and_create_new_replica_environment_and_application_if_they_do_not_exist()
        {
            var replicaInfo             = new ReplicaInfo("default", "vostok", "replica1", GetProperties());
            var serviceDiscoveryManager = new ServiceDiscoveryManager(GetZooKeeperClient(), log: Log);

            serviceDiscoveryManager.TryCreatePermanentReplicaAsync(replicaInfo)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeTrue();

            serviceDiscoveryManager
            .GetAllReplicasAsync(replicaInfo.Environment, replicaInfo.Application)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeEquivalentTo("replica1");

            serviceDiscoveryManager
            .GetEnvironmentAsync("default")
            .GetAwaiter()
            .GetResult()
            .Should()
            .NotBeNull();

            serviceDiscoveryManager
            .GetApplicationAsync("default", "vostok")
            .GetAwaiter()
            .GetResult()
            .Should()
            .NotBeNull();
        }
        public void GetAllReplicasAsync_should_return_empty_array_if_no_replicas_exists()
        {
            CreateApplicationNode("default", "vostok", GetProperties());

            var serviceDiscoveryManager = new ServiceDiscoveryManager(GetZooKeeperClient(), log: Log);

            serviceDiscoveryManager.GetAllReplicasAsync("default", "vostok")
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeEmpty();
        }
        public void TryDeletePermanentReplicaAsync_should_return_true_for_non_existent_replica()
        {
            var serviceDiscoveryManager = new ServiceDiscoveryManager(GetZooKeeperClient(), log: Log);

            serviceDiscoveryManager.TryDeletePermanentReplicaAsync("default", "vostok", "replica1")
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeTrue();

            serviceDiscoveryManager.GetAllReplicasAsync("default", "vostok")
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeEmpty();
        }
        public void GetAllReplicasAsync_should_return_all_existent_replicas_from_environment_and_application()
        {
            CreateReplicaNode(new ReplicaInfo("default", "vostok", "vr1", GetProperties()));
            CreateReplicaNode(new ReplicaInfo("default", "vostok", "vr2", GetProperties()));
            CreateReplicaNode(new ReplicaInfo("default", "vostok", "vr3", GetProperties()));
            CreateReplicaNode(new ReplicaInfo("default", "zapad", "zzzz111", GetProperties()));
            CreateReplicaNode(new ReplicaInfo("worldofpain", "vostok", "665", GetProperties()));

            var serviceDiscoveryManager = new ServiceDiscoveryManager(GetZooKeeperClient(), log: Log);

            serviceDiscoveryManager.GetAllReplicasAsync("default", "vostok")
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeEquivalentTo("vr1", "vr2", "vr3");
        }
        public void TryDeletePermanentReplicaAsync_should_return_false_and_do_not_delete_ephemeral_replica()
        {
            var replicaToDelete = new ReplicaInfo("default", "vostok", "replica1");

            CreateReplicaNode(replicaToDelete, false);
            CreateReplicaNode(new ReplicaInfo("default", "vostok", "replica2"));
            CreateReplicaNode(new ReplicaInfo("default", "vostok", "replica3"));

            var serviceDiscoveryManager = new ServiceDiscoveryManager(GetZooKeeperClient(), log: Log);

            serviceDiscoveryManager.TryDeletePermanentReplicaAsync(replicaToDelete.Environment, replicaToDelete.Application, replicaToDelete.Replica)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeFalse();

            serviceDiscoveryManager.GetAllReplicasAsync("default", "vostok")
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeEquivalentTo("replica1", "replica2", "replica3");
        }