From 9e5db82cc9c1282cb435ce07362c3711567554f5 Mon Sep 17 00:00:00 2001 From: Kaustubh Phatak Date: Mon, 13 Feb 2017 15:58:19 -0800 Subject: [PATCH] Check for unique HTTP route & method (#102) (#111) Check for uniqueness in HTTP routes, returning error 409 when a route + method combination is duplicated. --- controller/api_test.go | 4 ++++ controller/httpTriggerApi.go | 14 ++++++++++++++ 2 files changed, 18 insertions(+) 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)