parent
53522c4098
commit
4e96e08471
@ -0,0 +1,128 @@ |
||||
package config |
||||
|
||||
import ( |
||||
"fmt" |
||||
"testing" |
||||
|
||||
"github.com/go-kratos/kratos/v2/encoding" |
||||
"github.com/stretchr/testify/assert" |
||||
) |
||||
|
||||
func TestReader_Merge(t *testing.T) { |
||||
var ( |
||||
err error |
||||
ok bool |
||||
) |
||||
opts := options{ |
||||
decoder: func(kv *KeyValue, v map[string]interface{}) error { |
||||
if codec := encoding.GetCodec(kv.Format); codec != nil { |
||||
return codec.Unmarshal(kv.Value, &v) |
||||
} |
||||
return fmt.Errorf("unsupported key: %s format: %s", kv.Key, kv.Format) |
||||
}, |
||||
} |
||||
r := newReader(opts) |
||||
err = r.Merge(&KeyValue{ |
||||
Key: "a", |
||||
Value: []byte("bad"), |
||||
Format: "json", |
||||
}) |
||||
assert.Error(t, err) |
||||
|
||||
err = r.Merge(&KeyValue{ |
||||
Key: "b", |
||||
Value: []byte(`{"nice": "boat", "x": 1}`), |
||||
Format: "json", |
||||
}) |
||||
assert.NoError(t, err) |
||||
vv, ok := r.Value("nice") |
||||
assert.True(t, ok) |
||||
vvv, err := vv.String() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, "boat", vvv) |
||||
|
||||
err = r.Merge(&KeyValue{ |
||||
Key: "b", |
||||
Value: []byte(`{"x": 2}`), |
||||
Format: "json", |
||||
}) |
||||
assert.NoError(t, err) |
||||
vv, ok = r.Value("x") |
||||
assert.True(t, ok) |
||||
vvx, err := vv.Int() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, int64(2), vvx) |
||||
} |
||||
|
||||
func TestReader_Value(t *testing.T) { |
||||
var ( |
||||
err error |
||||
ok bool |
||||
) |
||||
opts := options{ |
||||
decoder: func(kv *KeyValue, v map[string]interface{}) error { |
||||
if codec := encoding.GetCodec(kv.Format); codec != nil { |
||||
return codec.Unmarshal(kv.Value, &v) |
||||
} |
||||
return fmt.Errorf("unsupported key: %s format: %s", kv.Key, kv.Format) |
||||
}, |
||||
} |
||||
r := newReader(opts) |
||||
err = r.Merge(&KeyValue{ |
||||
Key: "b", |
||||
Value: []byte(`{"a": {"b": {"X": 1, "Y": "lol", "z": true}}}`), |
||||
Format: "json", |
||||
}) |
||||
assert.NoError(t, err) |
||||
vv, ok := r.Value("a.b.X") |
||||
assert.True(t, ok) |
||||
vvv, err := vv.Int() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, int64(1), vvv) |
||||
|
||||
assert.NoError(t, err) |
||||
vv, ok = r.Value("a.b.Y") |
||||
assert.True(t, ok) |
||||
vvy, err := vv.String() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, "lol", vvy) |
||||
|
||||
assert.NoError(t, err) |
||||
vv, ok = r.Value("a.b.z") |
||||
assert.True(t, ok) |
||||
vvz, err := vv.Bool() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, true, vvz) |
||||
|
||||
vv, ok = r.Value("aasasdg=234l.asdfk,") |
||||
assert.False(t, ok) |
||||
|
||||
vv, ok = r.Value("aas......asdg=234l.asdfk,") |
||||
assert.False(t, ok) |
||||
|
||||
vv, ok = r.Value("a.b.Y.") |
||||
assert.False(t, ok) |
||||
} |
||||
|
||||
func TestReader_Source(t *testing.T) { |
||||
var ( |
||||
err error |
||||
) |
||||
opts := options{ |
||||
decoder: func(kv *KeyValue, v map[string]interface{}) error { |
||||
if codec := encoding.GetCodec(kv.Format); codec != nil { |
||||
return codec.Unmarshal(kv.Value, &v) |
||||
} |
||||
return fmt.Errorf("unsupported key: %s format: %s", kv.Key, kv.Format) |
||||
}, |
||||
} |
||||
r := newReader(opts) |
||||
err = r.Merge(&KeyValue{ |
||||
Key: "b", |
||||
Value: []byte(`{"a": {"b": {"X": 1}}}`), |
||||
Format: "json", |
||||
}) |
||||
b, err := r.Source() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, []byte(`{"a":{"b":{"X":1}}}`), b) |
||||
} |
@ -0,0 +1,121 @@ |
||||
package config |
||||
|
||||
import ( |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/stretchr/testify/assert" |
||||
) |
||||
|
||||
func Test_atomicValue_Bool(t *testing.T) { |
||||
var vlist []interface{} |
||||
vlist = []interface{}{"1", "t", "T", "true", "TRUE", "True", true} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Bool() |
||||
assert.NoError(t, err, b) |
||||
assert.True(t, b, b) |
||||
} |
||||
|
||||
vlist = []interface{}{"0", "f", "F", "false", "FALSE", "False", false} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Bool() |
||||
assert.NoError(t, err, b) |
||||
assert.False(t, b, b) |
||||
} |
||||
|
||||
vlist = []interface{}{int32(1), 1, uint16(1), "bbb", "-1"} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Bool() |
||||
assert.Error(t, err, b) |
||||
} |
||||
} |
||||
|
||||
func Test_atomicValue_Int(t *testing.T) { |
||||
var vlist []interface{} |
||||
vlist = []interface{}{"123123", float64(123123), int64(123123)} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Int() |
||||
assert.NoError(t, err, b) |
||||
assert.Equal(t, int64(123123), b, b) |
||||
} |
||||
|
||||
vlist = []interface{}{int32(1123123), 123131, uint16(1), "bbb", "-x1"} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Int() |
||||
assert.Error(t, err, b) |
||||
} |
||||
} |
||||
|
||||
func Test_atomicValue_Float(t *testing.T) { |
||||
var vlist []interface{} |
||||
vlist = []interface{}{"123123.1", float64(123123.1)} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Float() |
||||
assert.NoError(t, err, b) |
||||
assert.Equal(t, float64(123123.1), b, b) |
||||
} |
||||
|
||||
vlist = []interface{}{float32(1123123), 123131, uint16(1), "bbb", "-x1"} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Float() |
||||
assert.Error(t, err, b) |
||||
} |
||||
} |
||||
|
||||
func Test_atomicValue_String(t *testing.T) { |
||||
var vlist []interface{} |
||||
vlist = []interface{}{"1", float64(1), int64(1)} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.String() |
||||
assert.NoError(t, err, b) |
||||
assert.Equal(t, "1", b, b) |
||||
} |
||||
|
||||
v := atomicValue{} |
||||
v.Store(true) |
||||
b, err := v.String() |
||||
assert.NoError(t, err, b) |
||||
assert.Equal(t, "true", b, b) |
||||
} |
||||
|
||||
func Test_atomicValue_Duration(t *testing.T) { |
||||
var vlist []interface{} |
||||
vlist = []interface{}{int64(5)} |
||||
for _, x := range vlist { |
||||
v := atomicValue{} |
||||
v.Store(x) |
||||
b, err := v.Duration() |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, time.Duration(5), b) |
||||
} |
||||
} |
||||
|
||||
func Test_atomicValue_Scan(t *testing.T) { |
||||
var err error |
||||
v := atomicValue{} |
||||
err = v.Scan(&struct { |
||||
A string `json:"a"` |
||||
}{"a"}) |
||||
assert.NoError(t, err) |
||||
|
||||
err = v.Scan(&struct { |
||||
A string `json:"a"` |
||||
}{"a"}) |
||||
assert.NoError(t, err) |
||||
} |
Loading…
Reference in new issue