diff --git a/pkg/tools/etcd_tools.go b/pkg/tools/etcd_tools.go index 39539e1289c..8320511bed6 100644 --- a/pkg/tools/etcd_tools.go +++ b/pkg/tools/etcd_tools.go @@ -112,7 +112,7 @@ func (h *EtcdHelper) ExtractList(key string, slicePtr interface{}) error { v := pv.Elem() for _, node := range nodes { 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 { 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) } body = response.Node.Value - err = json.Unmarshal([]byte(body), objPtr) + err = api.DecodeInto([]byte(body), objPtr) if jsonBase, err := api.FindJSONBase(objPtr); err == nil { jsonBase.ResourceVersion = response.Node.ModifiedIndex // 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 // atomic update if obj's ResourceVersion field is set. func (h *EtcdHelper) SetObj(key string, obj interface{}) error { - data, err := json.Marshal(obj) + data, err := api.Encode(obj) if err != nil { return err } diff --git a/pkg/tools/etcd_tools_test.go b/pkg/tools/etcd_tools_test.go index 0796bbb8773..905e5091b48 100644 --- a/pkg/tools/etcd_tools_test.go +++ b/pkg/tools/etcd_tools_test.go @@ -45,10 +45,6 @@ func TestIsNotFoundErr(t *testing.T) { try(fmt.Errorf("some other kind of error"), false) } -type testMarshalType struct { - ID string `json:"id"` -} - func TestExtractList(t *testing.T) { fakeClient := MakeFakeEtcdClient(t) fakeClient.Data["/some/key"] = EtcdResponseWithError{ @@ -68,12 +64,12 @@ func TestExtractList(t *testing.T) { }, }, } - expect := []testMarshalType{ - {"foo"}, - {"bar"}, - {"baz"}, + expect := []api.Pod{ + {JSONBase: api.JSONBase{ID: "foo"}}, + {JSONBase: api.JSONBase{ID: "bar"}}, + {JSONBase: api.JSONBase{ID: "baz"}}, } - var got []testMarshalType + var got []api.Pod helper := EtcdHelper{fakeClient} err := helper.ExtractList("/some/key", &got) if err != nil { @@ -86,10 +82,10 @@ func TestExtractList(t *testing.T) { func TestExtractObj(t *testing.T) { fakeClient := MakeFakeEtcdClient(t) - expect := testMarshalType{ID: "foo"} + expect := api.Pod{JSONBase: api.JSONBase{ID: "foo"}} fakeClient.Set("/some/key", util.MakeJSONString(expect), 0) helper := EtcdHelper{fakeClient} - var got testMarshalType + var got api.Pod err := helper.ExtractObj("/some/key", &got, false) if err != nil { t.Errorf("Unexpected error %#v", err) @@ -123,7 +119,7 @@ func TestExtractObjNotFoundErr(t *testing.T) { } helper := EtcdHelper{fakeClient} try := func(key string) { - var got testMarshalType + var got api.Pod err := helper.ExtractObj(key, &got, false) if err == nil { 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) { - obj := testMarshalType{ID: "foo"} + obj := api.Pod{JSONBase: api.JSONBase{ID: "foo"}} fakeClient := MakeFakeEtcdClient(t) helper := EtcdHelper{fakeClient} err := helper.SetObj("/some/key", obj) if err != nil { 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 if expect != got { t.Errorf("Wanted %v, got %v", expect, got)