Report KeyNotFound from etcd as a 404 (#121)

This allows for proper classification of the error on the client side.
This commit is contained in:
Toby Crawley
2017-02-13 13:16:12 -08:00
committed by Soam Vasani
parent c8b5bb2972
commit 430639a1cf
2 changed files with 23 additions and 1 deletions
+18
View File
@@ -43,6 +43,13 @@ func assertNameReuseFails(err error, name string) {
assert(fe.Code == fission.ErrorNameExists, "error must be a name exists error") assert(fe.Code == fission.ErrorNameExists, "error must be a name exists error")
} }
func assertNotFoundFails(err error, name string) {
assert(err != nil, "requesting a non-existent "+name+" must fail")
fe, ok := err.(fission.Error)
assert(ok, "error must be a fission Error")
assert(fe.Code == fission.ErrorNotFound, "error must be a not found error")
}
func TestFunctionApi(t *testing.T) { func TestFunctionApi(t *testing.T) {
log.SetFormatter(&log.TextFormatter{DisableColors: true}) log.SetFormatter(&log.TextFormatter{DisableColors: true})
@@ -57,6 +64,8 @@ func TestFunctionApi(t *testing.T) {
}, },
Code: "code1", Code: "code1",
} }
_, err := g.client.FunctionGet(&fission.Metadata{Name: "foo"})
assertNotFoundFails(err, "function")
m, err := g.client.FunctionCreate(testFunc) m, err := g.client.FunctionCreate(testFunc)
panicIf(err) panicIf(err)
@@ -129,6 +138,9 @@ func TestHTTPTriggerApi(t *testing.T) {
Uid: "", Uid: "",
}, },
} }
_, err := g.client.HTTPTriggerGet(&fission.Metadata{Name: "foo"})
assertNotFoundFails(err, "trigger")
m, err := g.client.HTTPTriggerCreate(testTrigger) m, err := g.client.HTTPTriggerCreate(testTrigger)
panicIf(err) panicIf(err)
defer g.client.HTTPTriggerDelete(m) defer g.client.HTTPTriggerDelete(m)
@@ -169,6 +181,9 @@ func TestEnvironmentApi(t *testing.T) {
}, },
RunContainerImageUrl: "gcr.io/xyz", RunContainerImageUrl: "gcr.io/xyz",
} }
_, err := g.client.EnvironmentGet(&fission.Metadata{Name: "foo"})
assertNotFoundFails(err, "environment")
m, err := g.client.EnvironmentCreate(testEnv) m, err := g.client.EnvironmentCreate(testEnv)
panicIf(err) panicIf(err)
defer g.client.EnvironmentDelete(m) defer g.client.EnvironmentDelete(m)
@@ -217,6 +232,9 @@ func TestWatchApi(t *testing.T) {
}, },
Target: "", Target: "",
} }
_, err := g.client.WatchGet(&fission.Metadata{Name: "foo"})
assertNotFoundFails(err, "watch")
m, err := g.client.WatchCreate(testWatch) m, err := g.client.WatchCreate(testWatch)
panicIf(err) panicIf(err)
defer g.client.WatchDelete(m) defer g.client.WatchDelete(m)
+5 -1
View File
@@ -263,12 +263,16 @@ func handleEtcdError(e error) error {
} }
code := fission.ErrorInternal code := fission.ErrorInternal
msg := ee.Error() msg := ee.Error()
simpleMsg := fmt.Sprintf("%v (%v)", ee.Message, ee.Cause)
//TODO: handle any other etcd error codes we care about //TODO: handle any other etcd error codes we care about
switch ee.Code { switch ee.Code {
case client.ErrorCodeNodeExist: case client.ErrorCodeNodeExist:
code = fission.ErrorNameExists code = fission.ErrorNameExists
msg = fmt.Sprintf("%v (%v)", ee.Message, ee.Cause) msg = simpleMsg
case client.ErrorCodeKeyNotFound:
code = fission.ErrorNotFound
msg = simpleMsg
} }
return fission.MakeError(code, msg) return fission.MakeError(code, msg)
} }