|
@@ -0,0 +1,91 @@
|
|
|
+package v2
|
|
|
+
|
|
|
+import (
|
|
|
+ "reflect"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestNewSettable(t *testing.T) {
|
|
|
+ contexts := []struct {
|
|
|
+ arg string
|
|
|
+ name string
|
|
|
+ field string
|
|
|
+ value string
|
|
|
+ err error
|
|
|
+ }{
|
|
|
+ {"name=value", "name", "", "value", nil},
|
|
|
+ {"name", "name", "", "", nil},
|
|
|
+ {"name.field=value", "name", "field", "value", nil},
|
|
|
+ {"name.field", "name", "field", "", nil},
|
|
|
+ {"=value", "", "", "", errInvalidFormat},
|
|
|
+ {"=", "", "", "", errInvalidFormat},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, c := range contexts {
|
|
|
+ s, err := newSettable(c.arg)
|
|
|
+ if err != c.err {
|
|
|
+ t.Fatalf("expected error to be %v, got %v", c.err, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if s.name != c.name {
|
|
|
+ t.Fatalf("expected name to be %q, got %q", c.name, s.name)
|
|
|
+ }
|
|
|
+
|
|
|
+ if s.field != c.field {
|
|
|
+ t.Fatalf("expected field to be %q, got %q", c.field, s.field)
|
|
|
+ }
|
|
|
+
|
|
|
+ if s.value != c.value {
|
|
|
+ t.Fatalf("expected value to be %q, got %q", c.value, s.value)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestIsSettable(t *testing.T) {
|
|
|
+ contexts := []struct {
|
|
|
+ allowedSettableFields []string
|
|
|
+ set settable
|
|
|
+ settable []string
|
|
|
+ result bool
|
|
|
+ err error
|
|
|
+ }{
|
|
|
+ {allowedSettableFieldsEnv, settable{}, []string{}, false, nil},
|
|
|
+ {allowedSettableFieldsEnv, settable{field: "value"}, []string{}, false, nil},
|
|
|
+ {allowedSettableFieldsEnv, settable{}, []string{"value"}, true, nil},
|
|
|
+ {allowedSettableFieldsEnv, settable{field: "value"}, []string{"value"}, true, nil},
|
|
|
+ {allowedSettableFieldsEnv, settable{field: "foo"}, []string{"value"}, false, nil},
|
|
|
+ {allowedSettableFieldsEnv, settable{field: "foo"}, []string{"foo"}, false, nil},
|
|
|
+ {allowedSettableFieldsEnv, settable{}, []string{"value1", "value2"}, false, errMultipleFields},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, c := range contexts {
|
|
|
+ if res, err := c.set.isSettable(c.allowedSettableFields, c.settable); res != c.result {
|
|
|
+ t.Fatalf("expected result to be %t, got %t", c.result, res)
|
|
|
+ } else if err != c.err {
|
|
|
+ t.Fatalf("expected error to be %v, got %v", c.err, err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestUpdateConfigEnv(t *testing.T) {
|
|
|
+ contexts := []struct {
|
|
|
+ env []string
|
|
|
+ set settable
|
|
|
+ newEnv []string
|
|
|
+ }{
|
|
|
+ {[]string{}, settable{name: "DEBUG", value: "1"}, []string{"DEBUG=1"}},
|
|
|
+ {[]string{"DEBUG=0"}, settable{name: "DEBUG", value: "1"}, []string{"DEBUG=1"}},
|
|
|
+ {[]string{"FOO=0"}, settable{name: "DEBUG", value: "1"}, []string{"FOO=0", "DEBUG=1"}},
|
|
|
+ {[]string{"FOO=0", "DEBUG=0"}, settable{name: "DEBUG", value: "1"}, []string{"FOO=0", "DEBUG=1"}},
|
|
|
+ {[]string{"FOO=0", "DEBUG=0", "BAR=1"}, settable{name: "DEBUG", value: "1"}, []string{"FOO=0", "DEBUG=1", "BAR=1"}},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, c := range contexts {
|
|
|
+ updateConfigEnv(&c.env, &c.set)
|
|
|
+
|
|
|
+ if !reflect.DeepEqual(c.env, c.newEnv) {
|
|
|
+ t.Fatalf("expected env to be %q, got %q", c.newEnv, c.env)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|