Skip to content

Commit 27bbb23

Browse files
authored
Merge pull request #2161 from Ace-Tang/config
config: remove check unknow flag in config file
2 parents 10cb5da + b7e976c commit 27bbb23

3 files changed

Lines changed: 19 additions & 98 deletions

File tree

daemon/config/config.go

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,7 @@ func (cfg *Config) MergeConfigurations(flagSet *pflag.FlagSet) error {
165165
}
166166

167167
fileFlags := make(map[string]interface{}, 0)
168-
iterateConfig(origin, fileFlags)
169-
170-
// check if invalid or unknown flag exist in config file
171-
if err = getUnknownFlags(flagSet, fileFlags); err != nil {
172-
return err
173-
}
168+
flattenConfig(origin, fileFlags)
174169

175170
// check conflict in command line flags and config file
176171
if err = getConflictConfigurations(flagSet, fileFlags); err != nil {
@@ -225,35 +220,19 @@ func (cfg *Config) delValue(flagSet *pflag.FlagSet, fileFlags map[string]interfa
225220
return cfg
226221
}
227222

228-
// iterateConfig resolves key-value from config file iteratly.
229-
func iterateConfig(origin map[string]interface{}, config map[string]interface{}) {
223+
// flattenConfig flattens key-value config.
224+
func flattenConfig(origin map[string]interface{}, config map[string]interface{}) {
230225
for k, v := range origin {
231-
if c, ok := v.(map[string]interface{}); ok && k != "add-runtime" {
232-
iterateConfig(c, config)
226+
if c, ok := v.(map[string]interface{}); ok {
227+
for fk, fv := range c {
228+
config[fk] = fv
229+
}
233230
} else {
234231
config[k] = v
235232
}
236233
}
237234
}
238235

239-
// find unknown flag in config file
240-
func getUnknownFlags(flagSet *pflag.FlagSet, fileFlags map[string]interface{}) error {
241-
var unknownFlags []string
242-
243-
for k := range fileFlags {
244-
f := flagSet.Lookup(k)
245-
if f == nil {
246-
unknownFlags = append(unknownFlags, k)
247-
}
248-
}
249-
250-
if len(unknownFlags) > 0 {
251-
return fmt.Errorf("unknown flags: %s", strings.Join(unknownFlags, ", "))
252-
}
253-
254-
return nil
255-
}
256-
257236
// find conflict in command line flags and config file, note that if flag value
258237
// is slice type, we will skip it and merge it from flags and config file later.
259238
func getConflictConfigurations(flagSet *pflag.FlagSet, fileFlags map[string]interface{}) error {

daemon/config/config_test.go

Lines changed: 12 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/stretchr/testify/assert"
88
)
99

10-
func TestIterateConfig(t *testing.T) {
10+
func TestFlattenConfig(t *testing.T) {
1111
assert := assert.New(t)
1212
origin := map[string]interface{}{
1313
"a": "a",
@@ -26,22 +26,24 @@ func TestIterateConfig(t *testing.T) {
2626
}
2727

2828
expect := map[string]interface{}{
29-
"a": "a",
30-
"b": "b",
31-
"c": "c",
32-
"i1": "i1",
33-
"i2": "i2",
34-
"iii1": "iii1",
35-
"iii2": "iii2",
29+
"a": "a",
30+
"b": "b",
31+
"c": "c",
32+
"i1": "i1",
33+
"i2": "i2",
34+
"ii1": map[string]interface{}{
35+
"iii1": "iii1",
36+
"iii2": "iii2",
37+
},
3638
}
3739

3840
config := make(map[string]interface{})
39-
iterateConfig(origin, config)
41+
flattenConfig(origin, config)
4042
assert.Equal(config, expect)
4143

4244
// test nil map will not cause panic
4345
config = make(map[string]interface{})
44-
iterateConfig(nil, config)
46+
flattenConfig(nil, config)
4547
assert.Equal(config, map[string]interface{}{})
4648
}
4749

@@ -78,46 +80,3 @@ func TestGetConflictConfigurations(t *testing.T) {
7880
assert.Equal("found conflict flags in command line and config file: from flag: a1 and from config file: a1",
7981
getConflictConfigurations(flags, fileflags).Error())
8082
}
81-
82-
func TestGetUnknownFlags(t *testing.T) {
83-
84-
flagSet := new(pflag.FlagSet)
85-
flagSet.String("a", "a", "a")
86-
flagSet.Bool("b", false, "b")
87-
flagSet.Int("c", -500, "c")
88-
89-
flagSetNil := new(pflag.FlagSet)
90-
91-
assert := assert.New(t)
92-
93-
fileFlagsKnown := map[string]interface{}{
94-
"a": "a",
95-
"b": true,
96-
}
97-
98-
fileFlagsUnknown := map[string]interface{}{
99-
"c": 100,
100-
"d": "d",
101-
}
102-
103-
fileFlagsNil := map[string]interface{}{}
104-
105-
error := getUnknownFlags(flagSet, fileFlagsKnown)
106-
assert.Equal(error, nil)
107-
108-
error = getUnknownFlags(flagSet, fileFlagsUnknown)
109-
assert.NotNil(error)
110-
111-
error = getUnknownFlags(flagSet, fileFlagsNil)
112-
assert.Equal(error, nil)
113-
114-
error = getUnknownFlags(flagSetNil, fileFlagsUnknown)
115-
assert.NotNil(error)
116-
117-
error = getUnknownFlags(flagSetNil, fileFlagsKnown)
118-
assert.NotNil(error)
119-
120-
error = getUnknownFlags(flagSetNil, fileFlagsNil)
121-
assert.Equal(error, nil)
122-
123-
}

test/z_cli_daemon_test.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -182,23 +182,6 @@ func (suite *PouchDaemonSuite) TestDaemonSliceFlagNotConflict(c *check.C) {
182182
c.Assert(err, check.IsNil)
183183
}
184184

185-
// TestDaemonConfigFileUnknownFlag tests start daemon with unknown flags in configure file.
186-
func (suite *PouchDaemonSuite) TestDaemonConfigFileUnknownFlag(c *check.C) {
187-
path := "/tmp/pouch.json"
188-
cfg := struct {
189-
Adsj string `json:"adsj"`
190-
}{
191-
Adsj: "xxx",
192-
}
193-
err := CreateConfigFile(path, cfg)
194-
c.Assert(err, check.IsNil)
195-
defer os.Remove(path)
196-
197-
dcfg, err := StartDefaultDaemon("--debug", "--config-file="+path)
198-
c.Assert(err, check.NotNil)
199-
dcfg.KillDaemon()
200-
}
201-
202185
// TestDaemonConfigFileAndCli tests start daemon with configure file and CLI .
203186
func (suite *PouchDaemonSuite) TestDaemonConfigFileAndCli(c *check.C) {
204187
// Check default configure file could work

0 commit comments

Comments
 (0)