2
2
// SPDX-License-Identifier: LGPL-3.0-only
3
3
4
4
using System ;
5
+ using System . Collections ;
5
6
using System . Collections . Generic ;
6
7
using NSubstitute ;
7
8
using NUnit . Framework ;
8
9
9
10
namespace Nethermind . Config . Test ;
10
11
11
- [ TestFixture ]
12
+ [ FixtureLifeCycle ( LifeCycle . InstancePerTestCase ) ]
12
13
[ Parallelizable ( ParallelScope . All ) ]
13
14
public class ConfigProvider_FindIncorrectSettings_Tests
14
15
{
16
+ private IEnvironment _env ;
17
+
18
+ [ SetUp ]
19
+ public void Initialize ( )
20
+ {
21
+ _env = Substitute . For < IEnvironment > ( ) ;
22
+ _env . GetEnvironmentVariable ( Arg . Any < string > ( ) )
23
+ . Returns ( call =>
24
+ {
25
+ IDictionary vars = _env . GetEnvironmentVariables ( ) ;
26
+ var key = call . Arg < string > ( ) ;
27
+
28
+ return vars . Contains ( key ) ? vars [ key ] : null ;
29
+ } ) ;
30
+ }
31
+
15
32
[ Test ]
16
33
public void CorrectSettingNames_CaseInsensitive ( )
17
34
{
18
35
JsonConfigSource ? jsonSource = new ( "SampleJson/CorrectSettingNames.json" ) ;
19
36
20
- IEnvironment ? env = Substitute . For < IEnvironment > ( ) ;
21
- env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) { { "NETHERMIND_NETWORKCONFIG_MAXCANDIDATEPEERCOUNT" , "500" } } ) ;
22
- EnvConfigSource ? envSource = new ( env ) ;
37
+ Dictionary < string , string > envVars = new ( ) { { "NETHERMIND_NETWORKCONFIG_MAXCANDIDATEPEERCOUNT" , "500" } } ;
38
+
39
+ _env . GetEnvironmentVariables ( ) . Returns ( envVars ) ;
40
+ EnvConfigSource ? envSource = new ( _env ) ;
23
41
24
42
ArgsConfigSource ? argsSource = new ( new Dictionary < string , string > ( ) {
25
43
{ "DiscoveryConfig.BucketSize" , "10" } ,
@@ -33,20 +51,19 @@ public void CorrectSettingNames_CaseInsensitive()
33
51
configProvider . Initialize ( ) ;
34
52
( _ , IList < ( IConfigSource Source , string Category , string Name ) > Errors ) = configProvider . FindIncorrectSettings ( ) ;
35
53
36
- Assert . That ( Errors . Count , Is . EqualTo ( 0 ) ) ;
54
+ Assert . That ( Errors , Is . Empty ) ;
37
55
}
38
56
39
57
[ Test ]
40
58
public void NoCategorySettings ( )
41
59
{
42
- IEnvironment ? env = Substitute . For < IEnvironment > ( ) ;
43
- env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) {
60
+ _env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) {
44
61
{ "NETHERMIND_CLI_SWITCH_LOCAL" , "http://localhost:80" } ,
45
62
{ "NETHERMIND_CONFIG" , "test2.json" } ,
46
63
{ "NETHERMIND_XYZ" , "xyz" } , // not existing, should get error
47
64
{ "QWER" , "qwerty" } // not Nethermind setting, no error
48
65
} ) ;
49
- EnvConfigSource ? envSource = new ( env ) ;
66
+ EnvConfigSource ? envSource = new ( _env ) ;
50
67
51
68
ConfigProvider ? configProvider = new ( ) ;
52
69
configProvider . AddSource ( envSource ) ;
@@ -55,22 +72,23 @@ public void NoCategorySettings()
55
72
56
73
( string ErrorMsg , IList < ( IConfigSource Source , string Category , string Name ) > Errors ) = configProvider . FindIncorrectSettings ( ) ;
57
74
58
- Assert . That ( Errors . Count , Is . EqualTo ( 1 ) ) ;
59
- Assert . That ( Errors [ 0 ] . Name , Is . EqualTo ( "XYZ" ) ) ;
60
- Assert . That ( ErrorMsg , Is . EqualTo ( $ "ConfigType:EnvironmentVariable(NETHERMIND_*)|Category:|Name:XYZ") ) ;
61
-
75
+ Assert . That ( Errors , Has . Count . EqualTo ( 1 ) ) ;
76
+ Assert . Multiple ( ( ) =>
77
+ {
78
+ Assert . That ( Errors [ 0 ] . Name , Is . EqualTo ( "XYZ" ) ) ;
79
+ Assert . That ( ErrorMsg , Is . EqualTo ( $ "ConfigType:EnvironmentVariable(NETHERMIND_*)|Category:|Name:XYZ") ) ;
80
+ } ) ;
62
81
}
63
82
64
83
[ Test ]
65
84
public void SettingWithTypos ( )
66
85
{
67
86
JsonConfigSource ? jsonSource = new ( "SampleJson/ConfigWithTypos.json" ) ;
68
87
69
- IEnvironment ? env = Substitute . For < IEnvironment > ( ) ;
70
- env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) {
88
+ _env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) {
71
89
{ "NETHERMIND_NETWORKCONFIG_MAXCANDIDATEPERCOUNT" , "500" } // incorrect, should be NETHERMIND_NETWORKCONFIG_MAXCANDIDATEPEERCOUNT
72
90
} ) ;
73
- EnvConfigSource ? envSource = new ( env ) ;
91
+ EnvConfigSource ? envSource = new ( _env ) ;
74
92
75
93
ConfigProvider ? configProvider = new ( ) ;
76
94
configProvider . AddSource ( jsonSource ) ;
@@ -80,21 +98,23 @@ public void SettingWithTypos()
80
98
81
99
( string ErrorMsg , IList < ( IConfigSource Source , string Category , string Name ) > Errors ) = configProvider . FindIncorrectSettings ( ) ;
82
100
83
- Assert . That ( Errors . Count , Is . EqualTo ( 3 ) ) ;
84
- Assert . That ( Errors [ 0 ] . Name , Is . EqualTo ( "Concurrenc" ) ) ;
85
- Assert . That ( Errors [ 1 ] . Category , Is . EqualTo ( "BlomConfig" ) ) ;
86
- Assert . That ( Errors [ 2 ] . Name , Is . EqualTo ( "MAXCANDIDATEPERCOUNT" ) ) ;
87
- Assert . That ( ErrorMsg , Is . EqualTo ( $ "ConfigType:JsonConfigFile|Category:DiscoveRyConfig|Name:Concurrenc{ Environment . NewLine } ConfigType:JsonConfigFile|Category:BlomConfig|Name:IndexLevelBucketSizes{ Environment . NewLine } ConfigType:EnvironmentVariable(NETHERMIND_*)|Category:NETWORKCONFIG|Name:MAXCANDIDATEPERCOUNT") ) ;
101
+ Assert . That ( Errors , Has . Count . EqualTo ( 3 ) ) ;
102
+ Assert . Multiple ( ( ) =>
103
+ {
104
+ Assert . That ( Errors [ 0 ] . Name , Is . EqualTo ( "Concurrenc" ) ) ;
105
+ Assert . That ( Errors [ 1 ] . Category , Is . EqualTo ( "BlomConfig" ) ) ;
106
+ Assert . That ( Errors [ 2 ] . Name , Is . EqualTo ( "MAXCANDIDATEPERCOUNT" ) ) ;
107
+ Assert . That ( ErrorMsg , Is . EqualTo ( $ "ConfigType:JsonConfigFile|Category:DiscoveRyConfig|Name:Concurrenc{ Environment . NewLine } ConfigType:JsonConfigFile|Category:BlomConfig|Name:IndexLevelBucketSizes{ Environment . NewLine } ConfigType:EnvironmentVariable(NETHERMIND_*)|Category:NETWORKCONFIG|Name:MAXCANDIDATEPERCOUNT") ) ;
108
+ } ) ;
88
109
}
89
110
90
111
[ Test ]
91
112
public void IncorrectFormat ( )
92
113
{
93
- IEnvironment ? env = Substitute . For < IEnvironment > ( ) ;
94
- env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) {
114
+ _env . GetEnvironmentVariables ( ) . Returns ( new Dictionary < string , string > ( ) {
95
115
{ "NETHERMIND_NETWORKCONFIGMAXCANDIDATEPEERCOUNT" , "500" } // incorrect, should be NETHERMIND_NETWORKCONFIG_MAXCANDIDATEPEERCOUNT
96
116
} ) ;
97
- EnvConfigSource ? envSource = new ( env ) ;
117
+ EnvConfigSource ? envSource = new ( _env ) ;
98
118
99
119
ConfigProvider ? configProvider = new ( ) ;
100
120
configProvider . AddSource ( envSource ) ;
@@ -103,9 +123,68 @@ public void IncorrectFormat()
103
123
104
124
( string ErrorMsg , IList < ( IConfigSource Source , string Category , string Name ) > Errors ) = configProvider . FindIncorrectSettings ( ) ;
105
125
106
- Assert . That ( Errors . Count , Is . EqualTo ( 1 ) ) ;
107
- Assert . That ( Errors [ 0 ] . Name , Is . EqualTo ( "NETWORKCONFIGMAXCANDIDATEPEERCOUNT" ) ) ;
108
- Assert . That ( ErrorMsg , Is . EqualTo ( $ "ConfigType:EnvironmentVariable(NETHERMIND_*)|Category:|Name:NETWORKCONFIGMAXCANDIDATEPEERCOUNT") ) ;
126
+ Assert . That ( Errors , Has . Count . EqualTo ( 1 ) ) ;
127
+ Assert . Multiple ( ( ) =>
128
+ {
129
+ Assert . That ( Errors [ 0 ] . Name , Is . EqualTo ( "NETWORKCONFIGMAXCANDIDATEPEERCOUNT" ) ) ;
130
+ Assert . That ( ErrorMsg , Is . EqualTo ( $ "ConfigType:EnvironmentVariable(NETHERMIND_*)|Category:|Name:NETWORKCONFIGMAXCANDIDATEPEERCOUNT") ) ;
131
+ } ) ;
132
+ }
133
+
134
+ [ Test ]
135
+ public void Should_keep_blank_string_values ( )
136
+ {
137
+ Dictionary < string , string > envVars = new ( )
138
+ {
139
+ { "NETHERMIND_BLOCKSCONFIG_EXTRADATA" , "" }
140
+ } ;
141
+
142
+ _env . GetEnvironmentVariables ( ) . Returns ( envVars ) ;
143
+ EnvConfigSource ? envSource = new ( _env ) ;
144
+
145
+ ConfigProvider ? configProvider = new ( ) ;
146
+ configProvider . AddSource ( envSource ) ;
147
+
148
+ ( bool isSet , object value ) = envSource . GetValue ( typeof ( string ) , "BlocksConfig" , "ExtraData" ) ;
149
+
150
+ Assert . Multiple ( ( ) =>
151
+ {
152
+ Assert . That ( isSet , Is . True ) ;
153
+ Assert . That ( value , Is . Empty ) ;
154
+ } ) ;
109
155
}
110
156
157
+ [ Test ]
158
+ public void Should_ignore_blank_nonstring_values ( )
159
+ {
160
+ Dictionary < string , string > envVars = new ( )
161
+ {
162
+ { "NETHERMIND_BLOOMCONFIG_INDEX" , " " } ,
163
+ { "NETHERMIND_BLOOMCONFIG_MIGRATION" , "" }
164
+ } ;
165
+
166
+ _env . GetEnvironmentVariables ( ) . Returns ( envVars ) ;
167
+ EnvConfigSource ? envSource = new ( _env ) ;
168
+
169
+ ConfigProvider ? configProvider = new ( ) ;
170
+ configProvider . AddSource ( envSource ) ;
171
+
172
+ Assert . DoesNotThrow ( configProvider . Initialize ) ;
173
+
174
+ ( bool isSet , object value ) = envSource . GetValue ( typeof ( bool ) , "BloomConfig" , "Index" ) ;
175
+
176
+ Assert . Multiple ( ( ) =>
177
+ {
178
+ Assert . That ( isSet , Is . False ) ;
179
+ Assert . That ( ( ( ValueTuple < bool , object > ) value ) . Item2 , Is . False ) ;
180
+ } ) ;
181
+
182
+ ( isSet , value ) = envSource . GetValue ( typeof ( bool ) , "BloomConfig" , "Migration" ) ;
183
+
184
+ Assert . Multiple ( ( ) =>
185
+ {
186
+ Assert . That ( isSet , Is . False ) ;
187
+ Assert . That ( ( ( ValueTuple < bool , object > ) value ) . Item2 , Is . False ) ;
188
+ } ) ;
189
+ }
111
190
}
0 commit comments