示例#1
0
        private static async Task SetVaultConfig(
            this IConfigurationBuilder builder,
            VaultOptions options,
            string kvp)
        {
            VerifyOptions(options);
            var kvPath = string.IsNullOrWhiteSpace(kvp) ? options.KeyValue?.Path : kvp;

            if (!(options.KeyValue?.Enabled ?? false) && string.IsNullOrWhiteSpace(kvPath))
            {
                return;
            }

            var(client, _) = GetClientAndSettings(options);
            var keyValueService = new KeyValueService(client, options);
            var secret          = await keyValueService.GetAsync(kvPath);

            var parser = new JsonConfigurationParser();
            var data   = parser.Parse(JObject.FromObject(secret));
            var source = new MemoryConfigurationSource {
                InitialData = data
            };

            builder.Add(source);
        }
        public void Should_skip_comments()
        {
            var json = @"
// root
{
// my
    ""A"": ""1"",
    ""B"": [
        // world 
        ""2"" 
    ]
}
";

            var parsed = JsonConfigurationParser.Parse(json);

            parsed.Should()
            .BeEquivalentTo(
                new ObjectNode(
                    null,
                    new ISettingsNode[]
            {
                new ValueNode("A", "1"),
                new ArrayNode("B", new[] { new ValueNode(null, "2") })
            }));
        }
 public override IDictionary <string, string> ProcessParameters(IEnumerable <Parameter> parameters, string path)
 {
     return(parameters
            .Where(parameter => IncludeParameter(parameter, path))
            .SelectMany(parameter => JsonConfigurationParser.Parse(parameter.Value))
            .ToDictionary(parameter => parameter.Key, parameter => parameter.Value, StringComparer.OrdinalIgnoreCase));
 }
示例#4
0
        public void LoadConfig(string module, object config)
        {
            if (!_moduleDict.TryGetValue(module, out var dict))
            {
                dict = new Dictionary <string, string>();
                _moduleDict.Add(module, dict);
            }
            dict.Clear();
            if (config != null)
            {
                var parser = new JsonConfigurationParser();
                var json   = config is string?config.ToString() : JsonConvert.SerializeObject(config);

                var t = parser.Parse(json);
                foreach (var key in t.Keys)
                {
                    var dKey = ConvertKey(key);
                    if (string.IsNullOrWhiteSpace(dKey))
                    {
                        continue;
                    }
                    dict[dKey] = t[key];
                }
            }

            //重新加载整体数据
            Data.Clear();
            foreach (var moduleData in _moduleDict)
            {
                foreach (var data in moduleData.Value)
                {
                    Data[data.Key] = data.Value;
                }
            }
        }
        public void Should_parse_value_with_empty_root_object()
        {
            const string value = "{ }";

            var result = JsonConfigurationParser.Parse(value);

            result.Should().Be(new ObjectNode(new ISettingsNode[] {}));
        }
        public void Should_parse_ArrayOfNulls_value()
        {
            const string value = "{ 'Array': [null, null] }";

            var result = JsonConfigurationParser.Parse(value);

            result["Array"].Children.Select(c => c.Value).Should().Equal(null, null);
        }
        public void Should_parse_Null_value()
        {
            const string value = "{ 'NullValue': null }";

            var result = JsonConfigurationParser.Parse(value);

            result["NullValue"].Value.Should().Be(null);
        }
        public void Should_parse_Boolean_value()
        {
            const string value = "{ 'BooleanValue': true }";

            var result = JsonConfigurationParser.Parse(value);

            result["BooleanValue"].Value.Should().Be("True");
        }
        public void Should_parse_integer_value()
        {
            const string value = "{ 'IntValue': 123 }";

            var result = JsonConfigurationParser.Parse(value);

            result["IntValue"].Value.Should().Be("123");
        }
        public void Should_parse_Double_value()
        {
            const string value = "{ 'DoubleValue': 123.321 }";

            var result = JsonConfigurationParser.Parse(value);

            result["DoubleValue"].Value.Should().Be(123.321d.ToString(CultureInfo.CurrentCulture));
        }
        public void Should_parse_Object_value()
        {
            const string value = "{ 'Object': { 'StringValue': 'str' } }";

            var result = JsonConfigurationParser.Parse(value);

            result["Object"]["StringValue"].Value.Should().Be("str");
        }
        public void Should_parse_empty_Object_value()
        {
            const string value = "{ 'Object': { } }";

            var result = JsonConfigurationParser.Parse(value);

            result["Object"].Should().Be(new ObjectNode("Object"));
        }
        public void Should_parse_Array_value()
        {
            const string value = "{ 'IntArray': [1, 2, 3] }";

            var result = JsonConfigurationParser.Parse(value);

            result["IntArray"].Children.Select(c => c.Value).Should().Equal("1", "2", "3");
        }
 public SettingsProvider(string serviceName, string configurationPathPrefix = SingularClientConstants.ServicesConfigurationNamePrefix)
 {
     servicePath = $"{configurationPathPrefix}{serviceName}.json";
     source      = new ClusterConfigSource(
         new ClusterConfigSourceSettings(ClusterConfigClient.Default, servicePath)
     {
         ValuesParser = (value, path) => JsonConfigurationParser.Parse(value)
     });
 }
示例#15
0
        public async Task ConvertAsync_InvalidJson()
        {
            var json = "{";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();

            await Assert.ThrowsAsync <JsonException>(() => configurationConverter.ParseAsync(jsonStream));
        }
示例#16
0
        public ConsulConfigurationSource(string key)
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            Key    = key;
            Parser = new JsonConfigurationParser();
        }
        public void Should_parse_ArrayOfArrays_value()
        {
            const string value = "{ 'Array': [['s', 't'], ['r']] }";

            var result = JsonConfigurationParser.Parse(value);

            result["Array"].Children.Count().Should().Be(2);
            result["Array"].Children.First().Children.Select(c => c.Value).Should().Equal("s", "t");
            result["Array"].Children.Last().Children.Select(c => c.Value).Should().Equal("r");
        }
        public void Should_parse_ArrayOfObjects_value()
        {
            const string value = "{ 'Array': [{ 'StringValue': 'str' }, { 'IntValue': 123 }] }";

            var result = JsonConfigurationParser.Parse(value);

            result["Array"].Children.Count().Should().Be(2);
            result["Array"].Children.First()["StringValue"].Value.Should().Be("str");
            result["Array"].Children.Last()["IntValue"].Value.Should().Be("123");
        }
示例#19
0
        public async Task ConvertAsync_OneExcelEntry_MissingSheet()
        {
            var json = "{ \"summary\": [{ \"resource\": \"homer.xlsx\", \"row\": 1 }]}";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();

            await Assert.ThrowsAsync <InvalidDataException>(() => configurationConverter.ParseAsync(jsonStream));
        }
示例#20
0
        public async Task ConvertAsync_OneSensorEntry_InvalidFormatValue()
        {
            var json = "{ \"energy\": [{ \"format\": \"swiss\", \"resource\": \"heaven.json\" }]}";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();

            await Assert.ThrowsAsync <InvalidDataException>(() => configurationConverter.ParseAsync(jsonStream));
        }
示例#21
0
        public async Task ConvertAsync_OneSensorEntry()
        {
            var json = "{ \"energy\": [{ \"id\": \"heaven\", \"format\": \"Sel\", \"resource\": \"heaven.json\" }]}";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();
            var configuration          = await configurationConverter.ParseAsync(jsonStream);

            Assert.Contains(new EnergyConfig("heaven", "heaven.json", EnergySourceFormat.Sel), configuration.EnergyConfigs);
        }
示例#22
0
        public async Task ConvertAsync_OneExcelEntry()
        {
            var json = "{ \"summary\": [{ \"resource\": \"homer.xlsx\", \"sheet\": \"atlantis\", \"row\": 1 }]}";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();
            var configuration          = await configurationConverter.ParseAsync(jsonStream);

            Assert.Contains(new SummaryConfig("homer.xlsx", "atlantis", 1), configuration.SummaryConfigs);
        }
示例#23
0
        public ConsulConfigurationSource(string key)
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            Key    = key;
            Parser = new JsonConfigurationParser();
            ConvertConsulKVPairToConfig = DefaultConvertConsulKVPairToConfigStrategy;
        }
示例#24
0
    public void JsonTest()
    {
        var json = @"{""a"":3, ""b"":{""c"":[4]}}";

        var data = JsonConfigurationParser.Parse(json);

        Assert.NotNull(data);
        Assert.Equal(2, data.Count);
        Assert.Equal("3", data["a"]);
        Assert.Equal("4", data["b:c:0"]);
    }
示例#25
0
        public async Task ConvertAsync_TwoMeteoEntries()
        {
            var json = "{ \"meteo\": [{ \"resource\": \"any.json\" }, { \"resource\": \"second.json\" }]}";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();
            var configuration          = await configurationConverter.ParseAsync(jsonStream);

            Assert.Contains(new MeteoConfig("any.json"), configuration.MeteoConfigs);
            Assert.Contains(new MeteoConfig("second.json"), configuration.MeteoConfigs);
        }
        public void Should_parse_root_array()
        {
            const string value = "[1, 2]";

            JsonConfigurationParser.Parse(value)
            .Should()
            .Be(new ArrayNode(new ISettingsNode[]
            {
                new ValueNode("0", "1"),
                new ValueNode("1", "2")
            }));
        }
示例#27
0
        public async Task ConvertAsync_Empty()
        {
            var json = "{}";

            using var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));

            var configurationConverter = new JsonConfigurationParser();
            var configuration          = await configurationConverter.ParseAsync(jsonStream);

            Assert.NotNull(configuration);
            Assert.Empty(configuration.MeteoConfigs);
            Assert.Empty(configuration.EnergyConfigs);
            Assert.Empty(configuration.SummaryConfigs);
        }
 public static IConfigurationBuilder AddAwsS3(this IConfigurationBuilder builder,
                                              Func <IAmazonS3> clientCreator,
                                              GetObjectRequest objectRequest,
                                              bool optional   = false,
                                              TimeSpan?period = default,
                                              string prefix   = default,
                                              Func <AsyncLoaderExceptionContext, Task> onException = default)
 {
     builder.AddLoadAsync(async() =>
     {
         using var client = clientCreator();
         var response     = await client.GetObjectAsync(objectRequest).ConfigureAwait(false);
         return(JsonConfigurationParser.Parse(response.ResponseStream));
     }, optional, period, prefix, onException);
     return(builder);
 }
示例#29
0
        public void Should_not_corrupt_date()
        {
            var json = @"{
    ""A"": ""2020-11-16T00:00:00.000+06:00"",
    ""B"": [ ""2020-11-16T00:00:00.000+06:00"" ]
}
";

            var parsed = JsonConfigurationParser.Parse(json);

            var printed = JsonConfigurationPrinter.Print(parsed);

            printed.Should().Contain("2020-11-16T00:00:00.000+06:00");

            var parsed2 = JsonConfigurationParser.Parse(printed);

            parsed2.Should().BeEquivalentTo(parsed);
        }
        private void ParseFrom(KVPair kv)
        {
            if (kv.Value == null || kv.Value.Length == 0)
            {
                return;
            }
            var parser = new JsonConfigurationParser();

            using (var stream = new MemoryStream(kv.Value))
            {
                Data = parser.Parse(stream);
            }
            if (this._LastIndex > 0)
            {
                Logger.Debug("raise base onreload");
                base.OnReload();
            }
            //Console.WriteLine(JsonConvert.SerializeObject(Data));
        }