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()
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
}

View File

@ -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)