public void TryUpdateApplicationPropertiesAsync_should_return_true_and_set_new_properties_for_existent_application()
        {
            var initProperties = GetProperties();

            CreateApplicationNode("environment", "vostok", properties: initProperties);
            var updatedProperties = new Dictionary <string, string>
            {
                ["updatedKey"] = "updatedValue"
            };

            IApplicationInfoProperties UpdatePropertiesFunc(IApplicationInfoProperties props)
            {
                foreach (var property in updatedProperties)
                {
                    props = props.Set(property.Key, property.Value);
                }
                return(props);
            }

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

            serviceDiscoveryManager.GetApplicationAsync("environment", "vostok")
            .GetAwaiter()
            .GetResult()
            .Properties
            .Should()
            .BeEquivalentTo(initProperties);

            serviceDiscoveryManager.TryUpdateApplicationPropertiesAsync("environment", "vostok", UpdatePropertiesFunc)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeTrue();

            Action assert = () => serviceDiscoveryManager.GetApplicationAsync("environment", "vostok")
                            .GetAwaiter()
                            .GetResult()
                            .Properties
                            .Should()
                            .BeEquivalentTo(initProperties.Concat(updatedProperties));
        }
        public void TryUpdateApplicationPropertiesAsync_should_return_false_and_do_not_create_non_existent_environment_nor_non_existent_application()
        {
            const string environment = "environment";
            const string application = "vostok";

            var updatedProperties = new Dictionary <string, string>
            {
                ["updatedKey"] = "updatedValue"
            };

            IApplicationInfoProperties UpdatePropertiesFunc(IApplicationInfoProperties props)
            {
                foreach (var property in updatedProperties)
                {
                    props.Set(property.Key, property.Value);
                }
                return(props);
            }

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

            serviceDiscoveryManager.TryUpdateApplicationPropertiesAsync(environment, application, UpdatePropertiesFunc)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeFalse();

            serviceDiscoveryManager.GetApplicationAsync(environment, application)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeNull();

            serviceDiscoveryManager.GetEnvironmentAsync(environment)
            .GetAwaiter()
            .GetResult()
            .Should()
            .BeNull();
        }