2015-02-09 04:38:37 +00:00
|
|
|
package config
|
|
|
|
|
2015-03-18 13:22:19 +00:00
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2016-09-18 23:33:22 +00:00
|
|
|
yaml "github.com/cloudfoundry-incubator/candiedyaml"
|
|
|
|
|
2015-10-12 11:50:17 +00:00
|
|
|
"github.com/rancher/os/util"
|
2015-07-29 06:52:15 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2015-03-18 13:22:19 +00:00
|
|
|
)
|
2015-07-29 06:52:15 +00:00
|
|
|
|
|
|
|
func TestFilterKey(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
data := map[interface{}]interface{}{
|
|
|
|
"ssh_authorized_keys": []string{"pubk1", "pubk2"},
|
|
|
|
"hostname": "ros-test",
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"ssh": map[interface{}]interface{}{
|
|
|
|
"keys": map[interface{}]interface{}{
|
|
|
|
"dsa": "dsa-test1",
|
|
|
|
"dsa-pub": "dsa-test2",
|
|
|
|
},
|
|
|
|
},
|
2015-09-11 09:10:50 +00:00
|
|
|
"docker": map[interface{}]interface{}{
|
2015-07-29 06:52:15 +00:00
|
|
|
"ca_key": "ca_key-test3",
|
|
|
|
"ca_cert": "ca_cert-test4",
|
|
|
|
"args": []string{"args_test5"},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
expectedFiltered := map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"ssh": map[interface{}]interface{}{
|
|
|
|
"keys": map[interface{}]interface{}{
|
|
|
|
"dsa": "dsa-test1",
|
|
|
|
"dsa-pub": "dsa-test2",
|
|
|
|
},
|
2015-02-09 04:38:37 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
2015-07-29 06:52:15 +00:00
|
|
|
expectedRest := map[interface{}]interface{}{
|
|
|
|
"ssh_authorized_keys": []string{"pubk1", "pubk2"},
|
|
|
|
"hostname": "ros-test",
|
|
|
|
"rancher": map[interface{}]interface{}{
|
2015-09-11 09:10:50 +00:00
|
|
|
"docker": map[interface{}]interface{}{
|
2015-07-29 06:52:15 +00:00
|
|
|
"ca_key": "ca_key-test3",
|
|
|
|
"ca_cert": "ca_cert-test4",
|
|
|
|
"args": []string{"args_test5"},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
filtered, rest := filterKey(data, []string{"rancher", "ssh"})
|
|
|
|
assert.Equal(expectedFiltered, filtered)
|
|
|
|
assert.Equal(expectedRest, rest)
|
|
|
|
}
|
2015-02-09 04:38:37 +00:00
|
|
|
|
2016-04-15 00:04:00 +00:00
|
|
|
func TestUnmarshalOrReturnString(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
|
|
|
|
assert.Equal("ab", unmarshalOrReturnString("ab"))
|
|
|
|
assert.Equal("a\nb", unmarshalOrReturnString("a\nb"))
|
|
|
|
assert.Equal("a\n", unmarshalOrReturnString("a\n"))
|
|
|
|
assert.Equal("\nb", unmarshalOrReturnString("\nb"))
|
|
|
|
assert.Equal("a,b", unmarshalOrReturnString("a,b"))
|
|
|
|
assert.Equal("a,", unmarshalOrReturnString("a,"))
|
|
|
|
assert.Equal(",b", unmarshalOrReturnString(",b"))
|
|
|
|
|
|
|
|
assert.Equal(int64(10), unmarshalOrReturnString("10"))
|
|
|
|
assert.Equal(true, unmarshalOrReturnString("true"))
|
|
|
|
assert.Equal(false, unmarshalOrReturnString("false"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a"}, unmarshalOrReturnString("[a]"))
|
|
|
|
assert.Equal([]interface{}{"a"}, unmarshalOrReturnString("[\"a\"]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a,"}, unmarshalOrReturnString("[\"a,\"]"))
|
|
|
|
assert.Equal([]interface{}{" a, "}, unmarshalOrReturnString("[\" a, \"]"))
|
|
|
|
assert.Equal([]interface{}{",a"}, unmarshalOrReturnString("[\",a\"]"))
|
|
|
|
assert.Equal([]interface{}{" ,a "}, unmarshalOrReturnString("[\" ,a \"]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a\n"}, unmarshalOrReturnString("[\"a\n\"]"))
|
|
|
|
assert.Equal([]interface{}{" a\n "}, unmarshalOrReturnString("[\" a\n \"]"))
|
|
|
|
assert.Equal([]interface{}{"\na"}, unmarshalOrReturnString("[\"\na\"]"))
|
|
|
|
assert.Equal([]interface{}{" \na "}, unmarshalOrReturnString("[\" \na \"]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a", "b"}, unmarshalOrReturnString("[a,b]"))
|
|
|
|
assert.Equal([]interface{}{"a", "b"}, unmarshalOrReturnString("[\"a\",\"b\"]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a,", "b"}, unmarshalOrReturnString("[\"a,\",b]"))
|
|
|
|
assert.Equal([]interface{}{"a", ",b"}, unmarshalOrReturnString("[a,\",b\"]"))
|
|
|
|
assert.Equal([]interface{}{" a, ", " ,b "}, unmarshalOrReturnString("[\" a, \",\" ,b \"]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a\n", "b"}, unmarshalOrReturnString("[\"a\n\",b]"))
|
|
|
|
assert.Equal([]interface{}{"a", "\nb"}, unmarshalOrReturnString("[a,\"\nb\"]"))
|
|
|
|
assert.Equal([]interface{}{" a\n ", " \nb "}, unmarshalOrReturnString("[\" a\n \",\" \nb \"]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a", int64(10)}, unmarshalOrReturnString("[a,10]"))
|
|
|
|
assert.Equal([]interface{}{int64(10), "a"}, unmarshalOrReturnString("[10,a]"))
|
|
|
|
|
|
|
|
assert.Equal([]interface{}{"a", true}, unmarshalOrReturnString("[a,true]"))
|
|
|
|
assert.Equal([]interface{}{false, "a"}, unmarshalOrReturnString("[false,a]"))
|
|
|
|
}
|
|
|
|
|
2015-07-29 06:52:15 +00:00
|
|
|
func TestParseCmdline(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
|
2016-09-18 23:33:22 +00:00
|
|
|
assert.Equal(map[interface{}]interface{}{
|
2015-07-29 06:52:15 +00:00
|
|
|
"rancher": map[interface{}]interface{}{
|
2016-09-18 23:33:22 +00:00
|
|
|
"key1": "value1",
|
|
|
|
"key2": "value2",
|
2015-07-29 06:52:15 +00:00
|
|
|
},
|
2016-09-18 23:33:22 +00:00
|
|
|
}, parseCmdline("a b rancher.key1=value1 c rancher.key2=value2"))
|
|
|
|
|
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key": "a,b",
|
|
|
|
},
|
|
|
|
}, parseCmdline("rancher.key=a,b"))
|
|
|
|
|
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key": "a\nb",
|
|
|
|
},
|
|
|
|
}, parseCmdline("rancher.key=a\nb"))
|
2015-07-29 06:52:15 +00:00
|
|
|
|
2016-09-18 23:35:32 +00:00
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key": "a:b",
|
|
|
|
},
|
|
|
|
}, parseCmdline("rancher.key=a:b"))
|
|
|
|
|
2016-09-18 23:33:22 +00:00
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key": int64(5),
|
|
|
|
},
|
|
|
|
}, parseCmdline("rancher.key=5"))
|
2015-07-29 06:52:15 +00:00
|
|
|
|
2016-09-18 23:33:22 +00:00
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"rescue": true,
|
|
|
|
},
|
|
|
|
}, parseCmdline("rancher.rescue"))
|
|
|
|
|
|
|
|
assert.Equal(map[interface{}]interface{}{
|
2015-07-29 06:52:15 +00:00
|
|
|
"rancher": map[interface{}]interface{}{
|
2016-04-15 00:04:00 +00:00
|
|
|
"keyArray": []interface{}{int64(1), int64(2)},
|
2015-07-29 06:52:15 +00:00
|
|
|
},
|
2016-09-18 23:33:22 +00:00
|
|
|
}, parseCmdline("rancher.keyArray=[1,2]"))
|
2015-07-29 06:52:15 +00:00
|
|
|
|
2016-09-18 23:33:22 +00:00
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
2017-01-05 00:34:40 +00:00
|
|
|
"strArray": []interface{}{"url:http://192.168.1.100/cloud-config?a=b"},
|
2016-09-18 23:33:22 +00:00
|
|
|
},
|
2017-01-05 00:34:40 +00:00
|
|
|
}, parseCmdline("rancher.strArray=[\"url:http://192.168.1.100/cloud-config?a=b\"]"))
|
2015-07-29 06:52:15 +00:00
|
|
|
|
2016-09-18 23:35:32 +00:00
|
|
|
assert.Equal(map[interface{}]interface{}{
|
|
|
|
"rancher": map[interface{}]interface{}{
|
2017-01-05 00:34:40 +00:00
|
|
|
"strArray": []interface{}{"url:http://192.168.1.100/cloud-config?a=b"},
|
2016-09-18 23:35:32 +00:00
|
|
|
},
|
2017-01-05 00:34:40 +00:00
|
|
|
}, parseCmdline("rancher.strArray=[url:http://192.168.1.100/cloud-config?a=b]"))
|
2015-03-15 04:27:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestGet(t *testing.T) {
|
2015-07-29 06:52:15 +00:00
|
|
|
assert := require.New(t)
|
|
|
|
|
2015-03-15 04:27:04 +00:00
|
|
|
data := map[interface{}]interface{}{
|
|
|
|
"key": "value",
|
2015-07-29 06:52:15 +00:00
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key2": map[interface{}]interface{}{
|
|
|
|
"subkey": "subvalue",
|
|
|
|
"subnum": 42,
|
|
|
|
},
|
2015-03-15 04:27:04 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
tests := map[string]interface{}{
|
2015-07-29 06:52:15 +00:00
|
|
|
"key": "value",
|
|
|
|
"rancher.key2.subkey": "subvalue",
|
|
|
|
"rancher.key2.subnum": 42,
|
|
|
|
"rancher.key2.subkey2": "",
|
|
|
|
"foo": "",
|
2015-03-15 04:27:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for k, v := range tests {
|
2015-09-23 11:36:28 +00:00
|
|
|
val, _ := getOrSetVal(k, data, nil)
|
|
|
|
assert.Equal(v, val)
|
2015-03-15 04:27:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSet(t *testing.T) {
|
2015-07-29 06:52:15 +00:00
|
|
|
assert := require.New(t)
|
|
|
|
|
2015-03-15 04:27:04 +00:00
|
|
|
data := map[interface{}]interface{}{
|
|
|
|
"key": "value",
|
2015-07-29 06:52:15 +00:00
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key2": map[interface{}]interface{}{
|
|
|
|
"subkey": "subvalue",
|
|
|
|
"subnum": 42,
|
|
|
|
},
|
2015-03-15 04:27:04 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := map[interface{}]interface{}{
|
|
|
|
"key": "value2",
|
2015-07-29 06:52:15 +00:00
|
|
|
"rancher": map[interface{}]interface{}{
|
|
|
|
"key2": map[interface{}]interface{}{
|
|
|
|
"subkey": "subvalue2",
|
|
|
|
"subkey2": "value",
|
|
|
|
"subkey3": 43,
|
|
|
|
"subnum": 42,
|
|
|
|
},
|
|
|
|
"key3": map[interface{}]interface{}{
|
|
|
|
"subkey3": 44,
|
|
|
|
},
|
2015-03-15 04:27:04 +00:00
|
|
|
},
|
|
|
|
"key4": "value4",
|
|
|
|
}
|
|
|
|
|
|
|
|
tests := map[string]interface{}{
|
2015-07-29 06:52:15 +00:00
|
|
|
"key": "value2",
|
|
|
|
"rancher.key2.subkey": "subvalue2",
|
|
|
|
"rancher.key2.subkey2": "value",
|
|
|
|
"rancher.key2.subkey3": 43,
|
|
|
|
"rancher.key3.subkey3": 44,
|
|
|
|
"key4": "value4",
|
2015-03-15 04:27:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for k, v := range tests {
|
2015-09-23 11:36:28 +00:00
|
|
|
_, tData := getOrSetVal(k, data, v)
|
|
|
|
val, _ := getOrSetVal(k, tData, nil)
|
|
|
|
data = tData
|
|
|
|
assert.Equal(v, val)
|
2015-03-15 04:27:04 +00:00
|
|
|
}
|
|
|
|
|
2015-07-29 06:52:15 +00:00
|
|
|
assert.Equal(expected, data)
|
2015-02-09 04:38:37 +00:00
|
|
|
}
|
2015-03-18 13:22:19 +00:00
|
|
|
|
|
|
|
type OuterData struct {
|
2016-09-15 23:49:39 +00:00
|
|
|
One Data `yaml:"one"`
|
2015-03-18 13:22:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type Data struct {
|
2016-09-15 23:49:39 +00:00
|
|
|
Two bool `yaml:"two"`
|
|
|
|
Three bool `yaml:"three"`
|
2015-03-18 13:22:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestMapMerge(t *testing.T) {
|
2015-11-26 12:41:42 +00:00
|
|
|
assert := require.New(t)
|
2015-03-18 13:22:19 +00:00
|
|
|
one := `
|
|
|
|
one:
|
|
|
|
two: true`
|
|
|
|
two := `
|
|
|
|
one:
|
|
|
|
three: true`
|
|
|
|
|
2015-11-26 12:41:42 +00:00
|
|
|
data := map[string]map[string]bool{}
|
|
|
|
yaml.Unmarshal([]byte(one), &data)
|
|
|
|
yaml.Unmarshal([]byte(two), &data)
|
2015-03-18 13:22:19 +00:00
|
|
|
|
2015-11-26 12:41:42 +00:00
|
|
|
assert.NotNil(data["one"])
|
|
|
|
assert.True(data["one"]["three"])
|
|
|
|
assert.False(data["one"]["two"])
|
2015-03-18 13:22:19 +00:00
|
|
|
|
|
|
|
data2 := &OuterData{}
|
|
|
|
yaml.Unmarshal([]byte(one), data2)
|
|
|
|
yaml.Unmarshal([]byte(two), data2)
|
|
|
|
|
2015-11-26 12:41:42 +00:00
|
|
|
assert.True(data2.One.Three)
|
|
|
|
assert.True(data2.One.Two)
|
2015-03-18 13:22:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestUserDocker(t *testing.T) {
|
2015-07-29 06:52:15 +00:00
|
|
|
assert := require.New(t)
|
|
|
|
|
|
|
|
config := &CloudConfig{
|
|
|
|
Rancher: RancherConfig{
|
2015-09-11 09:10:50 +00:00
|
|
|
Docker: DockerConfig{
|
2015-07-29 06:52:15 +00:00
|
|
|
TLS: true,
|
|
|
|
},
|
2015-03-18 13:22:19 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
bytes, err := yaml.Marshal(config)
|
2015-07-29 06:52:15 +00:00
|
|
|
assert.Nil(err)
|
2015-03-18 13:22:19 +00:00
|
|
|
|
2015-11-26 12:41:42 +00:00
|
|
|
config = &CloudConfig{}
|
|
|
|
assert.False(config.Rancher.Docker.TLS)
|
2015-03-18 13:22:19 +00:00
|
|
|
err = yaml.Unmarshal(bytes, config)
|
2015-07-29 06:52:15 +00:00
|
|
|
assert.Nil(err)
|
2015-11-26 12:41:42 +00:00
|
|
|
assert.True(config.Rancher.Docker.TLS)
|
2015-03-18 13:22:19 +00:00
|
|
|
|
2015-11-26 12:41:42 +00:00
|
|
|
data := map[interface{}]interface{}{}
|
|
|
|
err = util.Convert(config, &data)
|
|
|
|
assert.Nil(err)
|
2015-03-18 13:22:19 +00:00
|
|
|
|
2015-11-26 12:41:42 +00:00
|
|
|
val, ok := data["rancher"].(map[interface{}]interface{})["docker"]
|
2015-07-29 06:52:15 +00:00
|
|
|
assert.True(ok)
|
2015-03-18 13:22:19 +00:00
|
|
|
|
2015-07-29 06:52:15 +00:00
|
|
|
m, ok := val.(map[interface{}]interface{})
|
|
|
|
assert.True(ok)
|
|
|
|
v, ok := m["tls"]
|
|
|
|
assert.True(ok)
|
|
|
|
assert.True(v.(bool))
|
2015-03-18 13:22:19 +00:00
|
|
|
|
|
|
|
}
|