Merge pull request #855 from ironcladlou/resource-versioning-fix

Apply resource versioning to list extractions from etcd
This commit is contained in:
Daniel Smith 2014-08-11 14:33:03 -07:00
commit 86667818bc
2 changed files with 16 additions and 5 deletions

View File

@ -140,6 +140,10 @@ func (h *EtcdHelper) ExtractList(key string, slicePtr interface{}) error {
for _, node := range nodes { for _, node := range nodes {
obj := reflect.New(v.Type().Elem()) obj := reflect.New(v.Type().Elem())
err = h.Codec.DecodeInto([]byte(node.Value), obj.Interface()) err = h.Codec.DecodeInto([]byte(node.Value), obj.Interface())
if h.ResourceVersioner != nil {
_ = h.ResourceVersioner.SetResourceVersion(obj.Interface(), node.ModifiedIndex)
// being unable to set the version does not prevent the object from being extracted
}
if err != nil { if err != nil {
return err return err
} }

View File

@ -70,30 +70,37 @@ func TestExtractList(t *testing.T) {
Nodes: []*etcd.Node{ Nodes: []*etcd.Node{
{ {
Value: `{"id":"foo"}`, Value: `{"id":"foo"}`,
ModifiedIndex: 1,
}, },
{ {
Value: `{"id":"bar"}`, Value: `{"id":"bar"}`,
ModifiedIndex: 2,
}, },
{ {
Value: `{"id":"baz"}`, Value: `{"id":"baz"}`,
ModifiedIndex: 3,
}, },
}, },
}, },
}, },
} }
expect := []api.Pod{ expect := []api.Pod{
{JSONBase: api.JSONBase{ID: "foo"}}, {JSONBase: api.JSONBase{ID: "foo", ResourceVersion: 1}},
{JSONBase: api.JSONBase{ID: "bar"}}, {JSONBase: api.JSONBase{ID: "bar", ResourceVersion: 2}},
{JSONBase: api.JSONBase{ID: "baz"}}, {JSONBase: api.JSONBase{ID: "baz", ResourceVersion: 3}},
} }
var got []api.Pod var got []api.Pod
helper := EtcdHelper{fakeClient, codec, versioner} helper := EtcdHelper{fakeClient, codec, versioner}
err := helper.ExtractList("/some/key", &got) err := helper.ExtractList("/some/key", &got)
if err != nil { if err != nil {
t.Errorf("Unexpected error %#v", err) t.Errorf("Unexpected error %#v", err)
} }
if !reflect.DeepEqual(got, expect) {
t.Errorf("Wanted %#v, got %#v", expect, got) for i := 0; i < len(expect); i++ {
if !reflect.DeepEqual(got[i], expect[i]) {
t.Errorf("\nWanted:\n%#v\nGot:\n%#v\n", expect[i], got[i])
}
} }
} }