Skip to content

Commit 4f87e23

Browse files
authored
Merge pull request #178 from pengweiqhca/master
添加CommonSectionBuilder
2 parents f12e8b8 + 29b0188 commit 4f87e23

21 files changed

+474
-199
lines changed

Apollo.AspNetCoreHosting/Apollo.AspNetCoreHosting.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $(PackageReleaseNotes)</Description>
1515
<PackageProjectUrl>$(RepositoryUrl)/$(MSBuildProjectName)</PackageProjectUrl>
1616
<RootNamespace>Microsoft.AspNetCore.Hosting</RootNamespace>
1717
<TargetFramework>netstandard2.0</TargetFramework>
18-
<Version>$(ApolloVersion)</Version>
18+
<Version>$(ApolloVersion).0</Version>
1919
</PropertyGroup>
2020

2121
<ItemGroup>

Apollo.ConfigAdapter.Yaml/Apollo.ConfigAdapter.Yaml.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ $(PackageReleaseNotes)</Description>
1111
<PackageTags>$(PackageTags) yml yaml</PackageTags>
1212
<RootNamespace>Com.Ctrip.Framework.Apollo.ConfigAdapter</RootNamespace>
1313
<TargetFrameworks>net40;net45;netstandard2.0</TargetFrameworks>
14-
<Version>$(ApolloVersion)</Version>
14+
<Version>$(ApolloVersion).0</Version>
1515
</PropertyGroup>
1616

1717
<ItemGroup>

Apollo.Configuration/Apollo.Configuration.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ $(PackageReleaseNotes)</Description>
3232
<PackageProjectUrl>$(RepositoryUrl)/$(MSBuildProjectName)</PackageProjectUrl>
3333
<RootNamespace>Com.Ctrip.Framework.Apollo</RootNamespace>
3434
<TargetFramework>netstandard2.0</TargetFramework>
35-
<Version>$(ApolloVersion)</Version>
35+
<Version>$(ApolloVersion).0</Version>
3636
</PropertyGroup>
3737

3838
<ItemGroup>

Apollo.ConfigurationManager.Tests/App.config

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,34 @@
33
<configuration>
44
<configSections>
55
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
6+
<section name="test" type="Apollo.ConfigurationManager.Tests.TestConfigurationSection, Apollo.ConfigurationManager.Tests" />
67
</configSections>
8+
79
<configBuilders>
810
<builders>
911
<add name="AppSettingsSectionBuilder" type="Com.Ctrip.Framework.Apollo.AppSettingsSectionBuilder, Com.Ctrip.Framework.Apollo.ConfigurationManager" namespace="application.json;application.xml;application.yml;application.yaml;application" />
1012
<add name="ConnectionStringsSectionBuilder" type="Com.Ctrip.Framework.Apollo.ConnectionStringsSectionBuilder, Com.Ctrip.Framework.Apollo.ConfigurationManager" namespace="application.json;application.xml;application.yml;application.yaml;application" />
1113
<add name="ClientSectionBuilder" type="Com.Ctrip.Framework.Apollo.NodeReplaceSectionBuilder, Com.Ctrip.Framework.Apollo.ConfigurationManager" namespace="application.json;application.xml;application.yml;application.yaml;application" key="system.serviceModel:client" />
14+
<add name="CommonSectionBuilder" type="Com.Ctrip.Framework.Apollo.CommonSectionBuilder, Com.Ctrip.Framework.Apollo.ConfigurationManager" keyPrefix="" namespace="application.json;application.xml;application.yml;application.yaml;application" />
1215
</builders>
1316
</configBuilders>
17+
1418
<connectionStrings configBuilders="ConnectionStringsSectionBuilder" />
19+
1520
<appSettings configBuilders="AppSettingsSectionBuilder">
1621
<add key="Apollo:AppId" value="apollo-client" />
1722
<add key="Apollo:Secret" value="ffd9d01130ee4329875ac3441c0bedda" />
1823
<add key="Apollo:MetaServer" value="http://106.54.227.205:8080/" />
1924
</appSettings>
25+
2026
<system.serviceModel>
2127
<client configBuilders="ClientSectionBuilder" />
2228
</system.serviceModel>
2329

30+
<test configBuilders="CommonSectionBuilder">
31+
<map>
32+
<add key="abc" value="321" />
33+
</map>
34+
</test>
35+
2436
</configuration>
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
using Com.Ctrip.Framework.Apollo;
2+
using Xunit;
3+
4+
namespace Apollo.ConfigurationManager.Tests;
5+
6+
public class ConfigExtensionsTest
7+
{
8+
[Fact]
9+
public void GetChildren()
10+
{
11+
var config = new TestConfig(Create("a:B", "1"), Create("A:c", "2"), Create("A:C:d", "4"), Create("b", "3"));
12+
13+
Assert.Equal(new[] { "a", "b" }, config.GetChildren("").Select(x => x.Name));
14+
Assert.Equal(new[] { "B", "c" }, config.GetChildren("a").Select(x => x.Name));
15+
Assert.Equal(new[] { "a:B", "A:c" }, config.GetChildren("a").Select(x => x.FullName));
16+
}
17+
18+
[Fact]
19+
public void GetConnectionStrings_ConnectionString_Prior()
20+
{
21+
var config = new TestConfig(Create("a:b", "123"), Create("a:b:ConnectionString", "abc"));
22+
23+
var connectionString = config.GetConnectionStrings("a", "sql").Single();
24+
25+
Assert.Equal("b", connectionString.Name);
26+
Assert.Equal("abc", connectionString.ConnectionString);
27+
Assert.Equal("sql", connectionString.ProviderName);
28+
}
29+
30+
[Fact]
31+
public void GetConnectionStrings_ProviderName()
32+
{
33+
var config = new TestConfig(Create("a:b", "123"), Create("a:b:ProviderName", "abc"));
34+
35+
var connectionString = config.GetConnectionStrings("a", "sql").Single();
36+
37+
Assert.Equal("123", connectionString.ConnectionString);
38+
Assert.Equal("abc", connectionString.ProviderName);
39+
}
40+
41+
[Fact]
42+
public void GetConnectionStrings_No_Prefix()
43+
{
44+
var config = new TestConfig(Create("a", "123"));
45+
46+
var connectionString = config.GetConnectionStrings("", "sql").Single();
47+
48+
Assert.Equal("a", connectionString.Name);
49+
Assert.Equal("123", connectionString.ConnectionString);
50+
}
51+
52+
[Fact]
53+
public void WithPrefix()
54+
{
55+
IConfig config = new TestConfig(Create("a:B", "1"), Create("A:c", "2"), Create("A:C:d", "4"), Create("b", "3"));
56+
57+
Assert.Same(config, config.WithPrefix(" "));
58+
59+
config = config.WithPrefix("a");
60+
61+
Assert.Equal(new[] { "B", "c", "C:d" }, config.GetPropertyNames());
62+
Assert.Equal(new[] { "1", "2", "4" }, config.GetPropertyNames().Select(p => config.GetProperty(p, "")));
63+
}
64+
65+
private static KeyValuePair<string, string> Create(string key, string value) => new(key, value);
66+
67+
private class TestConfig : IConfig
68+
{
69+
private readonly IReadOnlyDictionary<string, string> _dict;
70+
71+
public TestConfig(params KeyValuePair<string, string>[] keyValues)
72+
{
73+
var dict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
74+
75+
foreach (var kv in keyValues) dict[kv.Key] = kv.Value;
76+
77+
_dict = dict;
78+
}
79+
80+
public bool TryGetProperty(string key, [NotNullWhen(true)] out string? value) =>
81+
_dict.TryGetValue(key, out value);
82+
83+
public IEnumerable<string> GetPropertyNames() => _dict.Keys;
84+
85+
public event ConfigChangeEvent ConfigChanged = default!;
86+
}
87+
}
88+

Apollo.ConfigurationManager.Tests/ConfigurationBuilderTest.cs

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class ConfigurationBuilderTest
88
#if NET471_OR_GREATER
99
[Fact]
1010
public void AppSettingsSectionBuilderTest() =>
11-
Assert.Equal("560", System.Configuration.ConfigurationManager.AppSettings["Timeout"]);
11+
Assert.Equal("00:00:30", System.Configuration.ConfigurationManager.AppSettings["Timeout"]);
1212

1313
[Fact]
1414
public void ConnectionStringsSectionBuilderTest() =>
@@ -26,5 +26,40 @@ public void NodeReplaceSectionBuilderTest()
2626
Assert.Equal(new Uri("http://localhost:1234"), endpoint.Address);
2727
Assert.Equal("test", endpoint.Name);
2828
}
29+
30+
[Fact]
31+
public void CommonConfigurationBuilderTest()
32+
{
33+
var test = (TestConfigurationSection)System.Configuration.ConfigurationManager.GetSection("test");
34+
35+
Assert.Equal(3, test.DefaultValue);
36+
37+
Assert.Equal(TimeSpan.FromSeconds(30), test.Timeout);
38+
39+
Assert.Equal(100, test.MaxValue);
40+
41+
Assert.NotNull(test.Map);
42+
43+
var element = test.Map["abc"];
44+
45+
Assert.NotNull(element);
46+
47+
Assert.Equal("abc", element.Key);
48+
Assert.Equal("123", element.Value);
49+
50+
Assert.Null(test.Map["def"]);
51+
52+
element = test.Map["defg"];
53+
54+
Assert.NotNull(element);
55+
56+
Assert.Equal("defg", element.Key);
57+
Assert.Equal("456", element.Value);
58+
59+
Assert.NotNull(test.Element);
60+
61+
Assert.Equal("jkl", test.Element.Name);
62+
Assert.Equal("789", test.Element.Value);
63+
}
2964
#endif
30-
}
65+
}

Apollo.ConfigurationManager.Tests/GetChildrenTest.cs

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System.Configuration;
2+
3+
namespace Apollo.ConfigurationManager.Tests;
4+
5+
public class TestConfigurationSection : ConfigurationSection
6+
{
7+
[ConfigurationProperty("timeout")]
8+
public TimeSpan Timeout => (TimeSpan)this["timeout"];
9+
10+
[ConfigurationProperty("maxValue")]
11+
public int MaxValue => (int)this["maxValue"];
12+
13+
[ConfigurationProperty("defaultValue", DefaultValue = 3L)]
14+
public long DefaultValue => (long)this["defaultValue"];
15+
16+
[ConfigurationProperty("element")]
17+
public NameValueConfigurationElement Element => (NameValueConfigurationElement)this["element"];
18+
19+
[ConfigurationProperty("map")]
20+
public KeyValueConfigurationCollection Map => (KeyValueConfigurationCollection)this["map"];
21+
}

Apollo.ConfigurationManager.Tests/XmlExtensionsTest.cs

Lines changed: 0 additions & 41 deletions
This file was deleted.

Apollo.ConfigurationManager/Apollo.ConfigurationManager.csproj

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111
  直接使用ApolloConfigurationManager请使用Com.Ctrip.Framework.Apollo.Configuration或者Com.Ctrip.Framework.Apollo.ConfigurationManager
1212

1313
$(PackageReleaseNotes)</Description>
14-
<PackageIconUrl>https://raw.githubusercontent.com/apolloconfig/apollo/master/apollo-portal/src/main/resources/static/img/config.png</PackageIconUrl>
1514
<PackageProjectUrl>$(RepositoryUrl)/$(MSBuildProjectName)</PackageProjectUrl>
1615
<PackageTags>$(PackageTags) ConfigurationBuilder ConfigurationManager</PackageTags>
1716
<RootNamespace>Com.Ctrip.Framework.Apollo</RootNamespace>
1817
<TargetFrameworks>net471;net45;net40;netstandard2.0;netstandard2.1</TargetFrameworks>
19-
<Version>$(ApolloVersion)</Version>
18+
<Version>$(ApolloVersion).1</Version>
2019
</PropertyGroup>
2120

2221
<ItemGroup>
@@ -36,7 +35,6 @@ $(PackageReleaseNotes)</Description>
3635

3736
<ItemGroup Condition="'$(TargetFramework)' != 'net471'">
3837
<Compile Remove="*Builder.cs" />
39-
<Compile Remove="XmlExtensions.cs" />
4038
</ItemGroup>
4139

4240
</Project>

0 commit comments

Comments
 (0)