diff --git a/controller/api_test.go b/controller/api_test.go index 8e987f47..535936a0 100644 --- a/controller/api_test.go +++ b/controller/api_test.go @@ -165,6 +165,10 @@ func TestHTTPTriggerApi(t *testing.T) { testTrigger.Metadata.Name = "yyy" m, err = g.client.HTTPTriggerCreate(testTrigger) + assert(err != nil, "duplicate trigger should not be allowed") + + testTrigger.UrlPattern = "/hi2" + m, err = g.client.HTTPTriggerCreate(testTrigger) panicIf(err) defer g.client.HTTPTriggerDelete(m) diff --git a/controller/httpTriggerApi.go b/controller/httpTriggerApi.go index 70a4ce00..59a5d710 100644 --- a/controller/httpTriggerApi.go +++ b/controller/httpTriggerApi.go @@ -56,6 +56,20 @@ func (api *API) HTTPTriggerApiCreate(w http.ResponseWriter, r *http.Request) { return } + triggers, err := api.HTTPTriggerStore.List() + if err != nil { + api.respondWithError(w, err) + return + } + for _, url := range triggers { + if url.UrlPattern == t.UrlPattern && url.Method == t.Method { + err = fission.MakeError(fission.ErrorNameExists, + "HTTPTrigger with same URL & method already exists") + api.respondWithError(w, err) + return + } + } + uid, err := api.HTTPTriggerStore.Create(&t) if err != nil { api.respondWithError(w, err)