config: tests for WatchConfig
This commit is contained in:
parent
c1afc0d510
commit
760bcac716
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package config_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"git.st8l.com/luxolus/kdnotify/config"
|
||||||
|
"git.st8l.com/luxolus/kdnotify/schema/notify/state"
|
||||||
|
"git.st8l.com/luxolus/kdnotify/schema/notify/ty"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_WatchConfig(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
cases := []struct {
|
||||||
|
Name string
|
||||||
|
Yaml string
|
||||||
|
Expected config.WatchConfig
|
||||||
|
ShouldError bool
|
||||||
|
CompareFunc func(t *testing.T, expected, actual config.WatchConfig) bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Name: "Empty",
|
||||||
|
Yaml: "{}",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "EmptyWithKey",
|
||||||
|
Yaml: "{ watch: {} }",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Minimal",
|
||||||
|
Yaml: `
|
||||||
|
watch:
|
||||||
|
rules:
|
||||||
|
- exec: /bin/echo hello test
|
||||||
|
`,
|
||||||
|
Expected: config.WatchConfig{
|
||||||
|
Rules: []config.WatchRule{
|
||||||
|
{
|
||||||
|
Exec: s2t("/bin/echo hello test"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompareFunc: CompareWatchConfig,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "StringArgs",
|
||||||
|
Yaml: `
|
||||||
|
watch:
|
||||||
|
rules:
|
||||||
|
- exec: /bin/echo hello test
|
||||||
|
type: INSTANCE
|
||||||
|
state: STOP
|
||||||
|
instance: foo_instance
|
||||||
|
`,
|
||||||
|
Expected: config.WatchConfig{
|
||||||
|
Rules: []config.WatchRule{
|
||||||
|
{
|
||||||
|
Exec: s2t("/bin/echo hello test"),
|
||||||
|
Type: ty.INSTANCE,
|
||||||
|
State: state.STOP,
|
||||||
|
Instance: []string{"foo_instance"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompareFunc: CompareWatchConfig,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "ArrayArgs",
|
||||||
|
Yaml: `
|
||||||
|
watch:
|
||||||
|
rules:
|
||||||
|
- exec: /bin/echo hello test
|
||||||
|
type: [INSTANCE, GROUP]
|
||||||
|
state: [MASTER]
|
||||||
|
instance: [foo_instance, bar_instance]
|
||||||
|
`,
|
||||||
|
Expected: config.WatchConfig{
|
||||||
|
Rules: []config.WatchRule{
|
||||||
|
{
|
||||||
|
Exec: s2t("/bin/echo hello test"),
|
||||||
|
Type: ty.INSTANCE | ty.GROUP,
|
||||||
|
State: state.MASTER,
|
||||||
|
Instance: []string{"foo_instance", "bar_instance"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompareFunc: CompareWatchConfig,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, test := range cases {
|
||||||
|
test := test // Avoid closure capture by ref
|
||||||
|
tname := fmt.Sprintf("%s@%d:%d", test.Name, i+1, len(cases))
|
||||||
|
|
||||||
|
t.Run(tname, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
cfg, err := config.WatchConfigFromYAML([]byte(test.Yaml))
|
||||||
|
if !test.ShouldError && assert.NoError(t, err, "failed to unmarshal yaml") {
|
||||||
|
if test.CompareFunc != nil {
|
||||||
|
test.CompareFunc(t, test.Expected, cfg)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func CompareWatchConfig(t *testing.T, expected, actual config.WatchConfig) bool {
|
||||||
|
return assert.Equal(t, expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
func s2t(str string) *template.Template {
|
||||||
|
return template.Must(template.New("WatchRule").Parse(str))
|
||||||
|
}
|
Loading…
Reference in New Issue