Check whetehr the 1st level encoded json is array or not, to support 1st level array in consul config. During debug, i suspected the incapability of arrray is caused by json reader, so i added test for array. I think it makes no harm to also check that in.
		
			
				
	
	
		
			86 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package json
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/micro/go-micro/config/source"
 | 
						|
)
 | 
						|
 | 
						|
func TestValues(t *testing.T) {
 | 
						|
	emptyStr := ""
 | 
						|
	testData := []struct {
 | 
						|
		csdata   []byte
 | 
						|
		path     []string
 | 
						|
		accepter interface{}
 | 
						|
		value    interface{}
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			[]byte(`{"foo": "bar", "baz": {"bar": "cat"}}`),
 | 
						|
			[]string{"foo"},
 | 
						|
			emptyStr,
 | 
						|
			"bar",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			[]byte(`{"foo": "bar", "baz": {"bar": "cat"}}`),
 | 
						|
			[]string{"baz", "bar"},
 | 
						|
			emptyStr,
 | 
						|
			"cat",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for idx, test := range testData {
 | 
						|
		values, err := newValues(&source.ChangeSet{
 | 
						|
			Data: test.csdata,
 | 
						|
		})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		err = values.Get(test.path...).Scan(&test.accepter)
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
		if test.accepter != test.value {
 | 
						|
			t.Fatalf("No.%d Expected %v got %v for path %v", idx, test.value, test.accepter, test.path)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestStructArray(t *testing.T) {
 | 
						|
	type T struct {
 | 
						|
		Foo string
 | 
						|
	}
 | 
						|
 | 
						|
	emptyTSlice := []T{}
 | 
						|
 | 
						|
	testData := []struct {
 | 
						|
		csdata   []byte
 | 
						|
		accepter []T
 | 
						|
		value    []T
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			[]byte(`[{"foo": "bar"}]`),
 | 
						|
			emptyTSlice,
 | 
						|
			[]T{T{Foo: "bar"}},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for idx, test := range testData {
 | 
						|
		values, err := newValues(&source.ChangeSet{
 | 
						|
			Data: test.csdata,
 | 
						|
		})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		err = values.Get().Scan(&test.accepter)
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
		if !reflect.DeepEqual(test.accepter, test.value) {
 | 
						|
			t.Fatalf("No.%d Expected %v got %v", idx, test.value, test.accepter)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |