Use Decode/Encode in etcd_tools

This commit is contained in:
Brendan Burns 2014-07-22 15:05:43 -07:00 committed by Daniel Smith
parent d558a93a98
commit f1d6069b01
2 changed files with 17 additions and 17 deletions

View File

@ -112,7 +112,7 @@ func (h *EtcdHelper) ExtractList(key string, slicePtr interface{}) error {
v := pv.Elem() v := pv.Elem()
for _, node := range nodes { for _, node := range nodes {
obj := reflect.New(v.Type().Elem()) obj := reflect.New(v.Type().Elem())
err = json.Unmarshal([]byte(node.Value), obj.Interface()) err = api.DecodeInto([]byte(node.Value), obj.Interface())
if err != nil { if err != nil {
return err return err
} }
@ -146,7 +146,7 @@ func (h *EtcdHelper) bodyAndExtractObj(key string, objPtr interface{}, ignoreNot
return "", 0, fmt.Errorf("key '%v' found no nodes field: %#v", key, response) return "", 0, fmt.Errorf("key '%v' found no nodes field: %#v", key, response)
} }
body = response.Node.Value body = response.Node.Value
err = json.Unmarshal([]byte(body), objPtr) err = api.DecodeInto([]byte(body), objPtr)
if jsonBase, err := api.FindJSONBase(objPtr); err == nil { if jsonBase, err := api.FindJSONBase(objPtr); err == nil {
jsonBase.ResourceVersion = response.Node.ModifiedIndex jsonBase.ResourceVersion = response.Node.ModifiedIndex
// Note that err shadows the err returned below, so we won't // Note that err shadows the err returned below, so we won't
@ -159,7 +159,7 @@ func (h *EtcdHelper) bodyAndExtractObj(key string, objPtr interface{}, ignoreNot
// SetObj marshals obj via json, and stores under key. Will do an // SetObj marshals obj via json, and stores under key. Will do an
// atomic update if obj's ResourceVersion field is set. // atomic update if obj's ResourceVersion field is set.
func (h *EtcdHelper) SetObj(key string, obj interface{}) error { func (h *EtcdHelper) SetObj(key string, obj interface{}) error {
data, err := json.Marshal(obj) data, err := api.Encode(obj)
if err != nil { if err != nil {
return err return err
} }

View File

@ -45,10 +45,6 @@ func TestIsNotFoundErr(t *testing.T) {
try(fmt.Errorf("some other kind of error"), false) try(fmt.Errorf("some other kind of error"), false)
} }
type testMarshalType struct {
ID string `json:"id"`
}
func TestExtractList(t *testing.T) { func TestExtractList(t *testing.T) {
fakeClient := MakeFakeEtcdClient(t) fakeClient := MakeFakeEtcdClient(t)
fakeClient.Data["/some/key"] = EtcdResponseWithError{ fakeClient.Data["/some/key"] = EtcdResponseWithError{
@ -68,12 +64,12 @@ func TestExtractList(t *testing.T) {
}, },
}, },
} }
expect := []testMarshalType{ expect := []api.Pod{
{"foo"}, {JSONBase: api.JSONBase{ID: "foo"}},
{"bar"}, {JSONBase: api.JSONBase{ID: "bar"}},
{"baz"}, {JSONBase: api.JSONBase{ID: "baz"}},
} }
var got []testMarshalType var got []api.Pod
helper := EtcdHelper{fakeClient} helper := EtcdHelper{fakeClient}
err := helper.ExtractList("/some/key", &got) err := helper.ExtractList("/some/key", &got)
if err != nil { if err != nil {
@ -86,10 +82,10 @@ func TestExtractList(t *testing.T) {
func TestExtractObj(t *testing.T) { func TestExtractObj(t *testing.T) {
fakeClient := MakeFakeEtcdClient(t) fakeClient := MakeFakeEtcdClient(t)
expect := testMarshalType{ID: "foo"} expect := api.Pod{JSONBase: api.JSONBase{ID: "foo"}}
fakeClient.Set("/some/key", util.MakeJSONString(expect), 0) fakeClient.Set("/some/key", util.MakeJSONString(expect), 0)
helper := EtcdHelper{fakeClient} helper := EtcdHelper{fakeClient}
var got testMarshalType var got api.Pod
err := helper.ExtractObj("/some/key", &got, false) err := helper.ExtractObj("/some/key", &got, false)
if err != nil { if err != nil {
t.Errorf("Unexpected error %#v", err) t.Errorf("Unexpected error %#v", err)
@ -123,7 +119,7 @@ func TestExtractObjNotFoundErr(t *testing.T) {
} }
helper := EtcdHelper{fakeClient} helper := EtcdHelper{fakeClient}
try := func(key string) { try := func(key string) {
var got testMarshalType var got api.Pod
err := helper.ExtractObj(key, &got, false) err := helper.ExtractObj(key, &got, false)
if err == nil { if err == nil {
t.Errorf("%s: wanted error but didn't get one", key) t.Errorf("%s: wanted error but didn't get one", key)
@ -140,14 +136,18 @@ func TestExtractObjNotFoundErr(t *testing.T) {
} }
func TestSetObj(t *testing.T) { func TestSetObj(t *testing.T) {
obj := testMarshalType{ID: "foo"} obj := api.Pod{JSONBase: api.JSONBase{ID: "foo"}}
fakeClient := MakeFakeEtcdClient(t) fakeClient := MakeFakeEtcdClient(t)
helper := EtcdHelper{fakeClient} helper := EtcdHelper{fakeClient}
err := helper.SetObj("/some/key", obj) err := helper.SetObj("/some/key", obj)
if err != nil { if err != nil {
t.Errorf("Unexpected error %#v", err) t.Errorf("Unexpected error %#v", err)
} }
expect := util.MakeJSONString(obj) data, err := api.Encode(obj)
if err != nil {
t.Errorf("Unexpected error %#v", err)
}
expect := string(data)
got := fakeClient.Data["/some/key"].R.Node.Value got := fakeClient.Data["/some/key"].R.Node.Value
if expect != got { if expect != got {
t.Errorf("Wanted %v, got %v", expect, got) t.Errorf("Wanted %v, got %v", expect, got)