Better convey duplicate name errors to client (#116)
Motivation: Creating duplicate resources currently results in a 500 error being displayed by the client, with no information about the true nature of the failure. Modifications: * ResourceStore now converts any errors from the etcd client into fission errors, capturing the reason for the error in the case of a duplicate key (as ErrorNameExists) * ErrorNameExists errors are signaled to the client with a 409 (Conflict) HTTP status * MakeErrorFromHTTP() now reads the body of the error response to retrieve the actual error message instead of using the HTTP status message * the controller client now uses MakeErrorFromHTTP() to centralize status code -> error code mapping * tests for all of the resources now check that duplicate resources are reported properly Result: The client can now provide more context when a duplicate name is given related to #112
This commit is contained in:
committed by
Soam Vasani
parent
99d6a95bc1
commit
c8b5bb2972
@@ -36,6 +36,13 @@ var g struct {
|
||||
client *client.Client
|
||||
}
|
||||
|
||||
func assertNameReuseFails(err error, name string) {
|
||||
assert(err != nil, "recreating "+name+" with same name must fail")
|
||||
fe, ok := err.(fission.Error)
|
||||
assert(ok, "error must be a fission Error")
|
||||
assert(fe.Code == fission.ErrorNameExists, "error must be a name exists error")
|
||||
}
|
||||
|
||||
func TestFunctionApi(t *testing.T) {
|
||||
log.SetFormatter(&log.TextFormatter{DisableColors: true})
|
||||
|
||||
@@ -56,6 +63,9 @@ func TestFunctionApi(t *testing.T) {
|
||||
uid1 := m.Uid
|
||||
//log.Printf("Created function %v: %v", m.Name, m.Uid)
|
||||
|
||||
_, err = g.client.FunctionCreate(testFunc)
|
||||
assertNameReuseFails(err, "function")
|
||||
|
||||
code, err := g.client.FunctionGetRaw(m)
|
||||
panicIf(err)
|
||||
assert(string(code) == testFunc.Code, "code from FunctionGetRaw must match created function")
|
||||
@@ -123,6 +133,9 @@ func TestHTTPTriggerApi(t *testing.T) {
|
||||
panicIf(err)
|
||||
defer g.client.HTTPTriggerDelete(m)
|
||||
|
||||
_, err = g.client.HTTPTriggerCreate(testTrigger)
|
||||
assertNameReuseFails(err, "trigger")
|
||||
|
||||
tr, err := g.client.HTTPTriggerGet(m)
|
||||
panicIf(err)
|
||||
testTrigger.Metadata.Uid = m.Uid
|
||||
@@ -160,6 +173,9 @@ func TestEnvironmentApi(t *testing.T) {
|
||||
panicIf(err)
|
||||
defer g.client.EnvironmentDelete(m)
|
||||
|
||||
_, err = g.client.EnvironmentCreate(testEnv)
|
||||
assertNameReuseFails(err, "environment")
|
||||
|
||||
tr, err := g.client.EnvironmentGet(m)
|
||||
panicIf(err)
|
||||
testEnv.Metadata.Uid = m.Uid
|
||||
@@ -205,6 +221,9 @@ func TestWatchApi(t *testing.T) {
|
||||
panicIf(err)
|
||||
defer g.client.WatchDelete(m)
|
||||
|
||||
_, err = g.client.WatchCreate(testWatch)
|
||||
assertNameReuseFails(err, "watch")
|
||||
|
||||
w, err := g.client.WatchGet(m)
|
||||
panicIf(err)
|
||||
testWatch.Metadata.Uid = m.Uid
|
||||
|
||||
Reference in New Issue
Block a user