From 438052c453cd84f8207b362013d4af6b5d36b8f6 Mon Sep 17 00:00:00 2001 From: Mike Danese Date: Thu, 5 Mar 2015 21:53:27 -0800 Subject: [PATCH] fix variable shadowing bug in etcd_tools.go --- pkg/tools/etcd_tools.go | 9 ++++----- pkg/tools/etcd_tools_test.go | 11 +++++++++++ pkg/tools/fake_etcd_client.go | 5 +++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pkg/tools/etcd_tools.go b/pkg/tools/etcd_tools.go index a7a467da2d..2af7eb3a03 100644 --- a/pkg/tools/etcd_tools.go +++ b/pkg/tools/etcd_tools.go @@ -329,15 +329,14 @@ func (h *EtcdHelper) SetObj(key string, obj, out runtime.Object, ttl uint64) err create := true if h.ResourceVersioner != nil { - version, err := h.ResourceVersioner.ResourceVersion(obj) - if err == nil && version != 0 { + if version, err := h.ResourceVersioner.ResourceVersion(obj); err == nil && version != 0 { create = false response, err = h.Client.CompareAndSwap(key, string(data), ttl, "", version) + if err != nil { + return err + } } } - if err != nil { - return err - } if create { // Create will fail if a key already exists. response, err = h.Client.Create(key, string(data), ttl) diff --git a/pkg/tools/etcd_tools_test.go b/pkg/tools/etcd_tools_test.go index 0f42f00bc9..821d8453e1 100644 --- a/pkg/tools/etcd_tools_test.go +++ b/pkg/tools/etcd_tools_test.go @@ -414,6 +414,17 @@ func TestSetObj(t *testing.T) { } } +func TestSetObjFailCAS(t *testing.T) { + obj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"}} + fakeClient := NewFakeEtcdClient(t) + fakeClient.CasErr = fakeClient.NewError(123) + helper := EtcdHelper{fakeClient, testapi.Codec(), versioner} + err := helper.SetObj("/some/key", obj, nil, 5) + if err == nil { + t.Errorf("Expecting error.") + } +} + func TestSetObjWithVersion(t *testing.T) { obj := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"}} fakeClient := NewFakeEtcdClient(t) diff --git a/pkg/tools/fake_etcd_client.go b/pkg/tools/fake_etcd_client.go index 3c26bd664e..12d4c0b0a0 100644 --- a/pkg/tools/fake_etcd_client.go +++ b/pkg/tools/fake_etcd_client.go @@ -47,6 +47,7 @@ type FakeEtcdClient struct { expectNotFoundGetSet map[string]struct{} sync.Mutex Err error + CasErr error t TestLogger Ix int TestIndex bool @@ -225,6 +226,10 @@ func (f *FakeEtcdClient) CompareAndSwap(key, value string, ttl uint64, prevValue f.t.Logf("c&s: returning err %v", f.Err) return nil, f.Err } + if f.CasErr != nil { + f.t.Logf("c&s: returning err %v", f.CasErr) + return nil, f.CasErr + } if !f.TestIndex { f.t.Errorf("Enable TestIndex for test involving CompareAndSwap")