webhookd/pkg/config/flag/test/bind_test.go

43 lines
1.6 KiB
Go

package test
import (
"flag"
"testing"
"time"
"github.com/ncarlier/webhookd/pkg/assert"
configflag "github.com/ncarlier/webhookd/pkg/config/flag"
)
type sampleConfig struct {
Label string `flag:"label" desc:"String parameter" default:"foo"`
Override string `flag:"override" desc:"String parameter to override" default:"bar"`
Count int `flag:"count" desc:"Number parameter" default:"2"`
Debug bool `flag:"debug" desc:"Boolean parameter" default:"false"`
Timer time.Duration `flag:"timer" desc:"Duration parameter" default:"30s"`
Array []string `flag:"array" desc:"Array parameter" default:"foo,bar"`
OverrideArray []string `flag:"override-array" desc:"Array parameter to override" default:"foo"`
Obj objConfig `flag:"obj"`
}
type objConfig struct {
Name string `flag:"name" desc:"Object name" default:"none"`
}
func TestFlagBinding(t *testing.T) {
conf := &sampleConfig{}
err := configflag.Bind(conf, "FOO")
flag.CommandLine.Parse([]string{"-override", "test", "-override-array", "a", "-override-array", "b", "-obj-name", "foo"})
assert.Nil(t, err, "error should be nil")
assert.Equal(t, "foo", conf.Label, "")
assert.Equal(t, "test", conf.Override, "")
assert.Equal(t, 2, conf.Count, "")
assert.Equal(t, false, conf.Debug, "")
assert.Equal(t, time.Second*30, conf.Timer, "")
assert.Equal(t, 2, len(conf.Array), "")
assert.Equal(t, "foo", conf.Array[0], "")
assert.Equal(t, 2, len(conf.OverrideArray), "")
assert.Equal(t, "a", conf.OverrideArray[0], "")
assert.Equal(t, "foo", conf.Obj.Name, "")
}