mirror of
https://github.com/rclone/rclone.git
synced 2024-12-19 17:34:05 +08:00
360 lines
7.4 KiB
Go
360 lines
7.4 KiB
Go
package configmap
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var (
|
|
_ Mapper = Simple(nil)
|
|
_ Getter = Simple(nil)
|
|
_ Setter = Simple(nil)
|
|
)
|
|
|
|
func TestConfigMapGet(t *testing.T) {
|
|
m := New()
|
|
|
|
value, found := m.Get("config1")
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.Get("config2")
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
m1 := Simple{
|
|
"config1": "one",
|
|
}
|
|
|
|
m.AddGetter(m1, PriorityNormal)
|
|
|
|
value, found = m.Get("config1")
|
|
assert.Equal(t, "one", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.Get("config2")
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
m2 := Simple{
|
|
"config1": "one2",
|
|
"config2": "two2",
|
|
}
|
|
|
|
m.AddGetter(m2, PriorityNormal)
|
|
|
|
value, found = m.Get("config1")
|
|
assert.Equal(t, "one", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.Get("config2")
|
|
assert.Equal(t, "two2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
}
|
|
|
|
func TestConfigMapSet(t *testing.T) {
|
|
m := New()
|
|
|
|
m1 := Simple{
|
|
"config1": "one",
|
|
}
|
|
m2 := Simple{
|
|
"config1": "one2",
|
|
"config2": "two2",
|
|
}
|
|
|
|
m.AddSetter(m1).AddSetter(m2)
|
|
|
|
m.Set("config2", "potato")
|
|
|
|
assert.Equal(t, Simple{
|
|
"config1": "one",
|
|
"config2": "potato",
|
|
}, m1)
|
|
assert.Equal(t, Simple{
|
|
"config1": "one2",
|
|
"config2": "potato",
|
|
}, m2)
|
|
|
|
m.Set("config1", "beetroot")
|
|
|
|
assert.Equal(t, Simple{
|
|
"config1": "beetroot",
|
|
"config2": "potato",
|
|
}, m1)
|
|
assert.Equal(t, Simple{
|
|
"config1": "beetroot",
|
|
"config2": "potato",
|
|
}, m2)
|
|
|
|
m.ClearSetters()
|
|
|
|
// Check that nothing gets set
|
|
m.Set("config1", "BEETROOT")
|
|
|
|
assert.Equal(t, Simple{
|
|
"config1": "beetroot",
|
|
"config2": "potato",
|
|
}, m1)
|
|
assert.Equal(t, Simple{
|
|
"config1": "beetroot",
|
|
"config2": "potato",
|
|
}, m2)
|
|
|
|
}
|
|
|
|
func TestConfigMapGetPriority(t *testing.T) {
|
|
m := New()
|
|
|
|
value, found := m.GetPriority("config1", PriorityMax)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityMax)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
m1 := Simple{
|
|
"config1": "one",
|
|
"config3": "three",
|
|
}
|
|
|
|
m.AddGetter(m1, PriorityConfig)
|
|
|
|
value, found = m.GetPriority("config1", PriorityNormal)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityNormal)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config3", PriorityNormal)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config1", PriorityConfig)
|
|
assert.Equal(t, "one", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityConfig)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config3", PriorityConfig)
|
|
assert.Equal(t, "three", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config1", PriorityMax)
|
|
assert.Equal(t, "one", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityMax)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config3", PriorityMax)
|
|
assert.Equal(t, "three", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
m2 := Simple{
|
|
"config1": "one2",
|
|
"config2": "two2",
|
|
}
|
|
|
|
m.AddGetter(m2, PriorityNormal)
|
|
|
|
value, found = m.GetPriority("config1", PriorityNormal)
|
|
assert.Equal(t, "one2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityNormal)
|
|
assert.Equal(t, "two2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config3", PriorityNormal)
|
|
assert.Equal(t, "", value)
|
|
assert.Equal(t, false, found)
|
|
|
|
value, found = m.GetPriority("config1", PriorityConfig)
|
|
assert.Equal(t, "one2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityConfig)
|
|
assert.Equal(t, "two2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config3", PriorityConfig)
|
|
assert.Equal(t, "three", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config1", PriorityMax)
|
|
assert.Equal(t, "one2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config2", PriorityMax)
|
|
assert.Equal(t, "two2", value)
|
|
assert.Equal(t, true, found)
|
|
|
|
value, found = m.GetPriority("config3", PriorityMax)
|
|
assert.Equal(t, "three", value)
|
|
assert.Equal(t, true, found)
|
|
}
|
|
|
|
func TestConfigMapClearGetters(t *testing.T) {
|
|
m := New()
|
|
m1 := Simple{}
|
|
m2 := Simple{}
|
|
m3 := Simple{}
|
|
m.AddGetter(m1, PriorityNormal)
|
|
m.AddGetter(m2, PriorityDefault)
|
|
m.AddGetter(m3, PriorityConfig)
|
|
assert.Equal(t, []getprio{
|
|
{m1, PriorityNormal},
|
|
{m3, PriorityConfig},
|
|
{m2, PriorityDefault},
|
|
}, m.getters)
|
|
m.ClearGetters(PriorityConfig)
|
|
assert.Equal(t, []getprio{
|
|
{m1, PriorityNormal},
|
|
{m2, PriorityDefault},
|
|
}, m.getters)
|
|
m.ClearGetters(PriorityNormal)
|
|
assert.Equal(t, []getprio{
|
|
{m2, PriorityDefault},
|
|
}, m.getters)
|
|
m.ClearGetters(PriorityDefault)
|
|
assert.Equal(t, []getprio{}, m.getters)
|
|
m.ClearGetters(PriorityDefault)
|
|
assert.Equal(t, []getprio{}, m.getters)
|
|
}
|
|
|
|
func TestConfigMapClearSetters(t *testing.T) {
|
|
m := New()
|
|
m1 := Simple{}
|
|
m2 := Simple{}
|
|
m3 := Simple{}
|
|
m.AddSetter(m1)
|
|
m.AddSetter(m2)
|
|
m.AddSetter(m3)
|
|
assert.Equal(t, []Setter{m1, m2, m3}, m.setters)
|
|
m.ClearSetters()
|
|
assert.Equal(t, []Setter(nil), m.setters)
|
|
}
|
|
|
|
func TestSimpleString(t *testing.T) {
|
|
// Basic
|
|
assert.Equal(t, "", Simple(nil).String())
|
|
assert.Equal(t, "", Simple{}.String())
|
|
assert.Equal(t, "config1='one'", Simple{
|
|
"config1": "one",
|
|
}.String())
|
|
|
|
// Check ordering
|
|
assert.Equal(t, "config1='one',config2='two',config3='three',config4='four',config5='five'", Simple{
|
|
"config5": "five",
|
|
"config4": "four",
|
|
"config3": "three",
|
|
"config2": "two",
|
|
"config1": "one",
|
|
}.String())
|
|
|
|
// Check escaping
|
|
assert.Equal(t, "apple='',config1='o''n''e'", Simple{
|
|
"config1": "o'n'e",
|
|
"apple": "",
|
|
}.String())
|
|
}
|
|
|
|
func TestSimpleEncode(t *testing.T) {
|
|
for _, test := range []struct {
|
|
in Simple
|
|
want string
|
|
}{
|
|
{
|
|
in: Simple{},
|
|
want: "",
|
|
},
|
|
{
|
|
in: Simple{
|
|
"one": "potato",
|
|
},
|
|
want: "eyJvbmUiOiJwb3RhdG8ifQ",
|
|
},
|
|
{
|
|
in: Simple{
|
|
"one": "potato",
|
|
"two": "",
|
|
},
|
|
want: "eyJvbmUiOiJwb3RhdG8iLCJ0d28iOiIifQ",
|
|
},
|
|
} {
|
|
got, err := test.in.Encode()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, test.want, got)
|
|
gotM := Simple{}
|
|
err = gotM.Decode(got)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, test.in, gotM)
|
|
}
|
|
}
|
|
|
|
func TestSimpleDecode(t *testing.T) {
|
|
for _, test := range []struct {
|
|
in string
|
|
want Simple
|
|
wantErr string
|
|
}{
|
|
{
|
|
in: "",
|
|
want: Simple{},
|
|
},
|
|
{
|
|
in: "eyJvbmUiOiJwb3RhdG8ifQ",
|
|
want: Simple{
|
|
"one": "potato",
|
|
},
|
|
},
|
|
{
|
|
in: " e yJvbm UiOiJwb\r\n 3Rhd\tG8ifQ\n\n ",
|
|
want: Simple{
|
|
"one": "potato",
|
|
},
|
|
},
|
|
{
|
|
in: "eyJvbmUiOiJwb3RhdG8iLCJ0d28iOiIifQ",
|
|
want: Simple{
|
|
"one": "potato",
|
|
"two": "",
|
|
},
|
|
},
|
|
{
|
|
in: "!!!!!",
|
|
want: Simple{},
|
|
wantErr: "decode simple map",
|
|
},
|
|
{
|
|
in: base64.RawStdEncoding.EncodeToString([]byte(`null`)),
|
|
want: Simple{},
|
|
},
|
|
{
|
|
in: base64.RawStdEncoding.EncodeToString([]byte(`rubbish`)),
|
|
want: Simple{},
|
|
wantErr: "parse simple map",
|
|
},
|
|
} {
|
|
got := Simple{}
|
|
err := got.Decode(test.in)
|
|
assert.Equal(t, test.want, got, test.in)
|
|
if test.wantErr == "" {
|
|
require.NoError(t, err, test.in)
|
|
} else {
|
|
assert.Contains(t, err.Error(), test.wantErr, test.in)
|
|
}
|
|
}
|
|
}
|