diff --git a/api/datastore/internal/datastoretest/test.go b/api/datastore/internal/datastoretest/test.go index 144f50779..12780d284 100644 --- a/api/datastore/internal/datastoretest/test.go +++ b/api/datastore/internal/datastoretest/test.go @@ -363,7 +363,7 @@ func Test(t *testing.T, ds models.Datastore) { "THIRD": "3", }, Headers: http.Header{ - "First": []string{"test", "test2"}, + "First": []string{"test2"}, "Third": []string{"test", "test2"}, }, } diff --git a/api/models/route.go b/api/models/route.go index eb642e581..16262e7e7 100644 --- a/api/models/route.go +++ b/api/models/route.go @@ -150,9 +150,7 @@ func (r *Route) Update(new *Route) { if len(v) == 0 { r.Headers.Del(k) } else { - for _, val := range v { - r.Headers.Add(k, val) - } + r.Headers[k] = v } } } diff --git a/test/fn-api-tests/routes_test.go b/test/fn-api-tests/routes_test.go index 5b10f9a9e..70c77c319 100644 --- a/test/fn-api-tests/routes_test.go +++ b/test/fn-api-tests/routes_test.go @@ -6,6 +6,7 @@ import ( "github.com/fnproject/fn/api/id" "github.com/fnproject/fn_go/models" + "reflect" ) func TestRoutes(t *testing.T) { @@ -192,4 +193,19 @@ func TestRoutes(t *testing.T) { DeleteApp(t, s.Context, s.Client, s.AppName) }) + + t.Run("multiple-deploy-route-with-headers", func(T *testing.T) { + s := SetupDefaultSuite() + CreateApp(t, s.Context, s.Client, s.AppName, map[string]string{}) + routeHeaders := map[string][]string{} + routeHeaders["A"] = []string{"a"} + routeHeaders["B"] = []string{"b"} + DeployRoute(t, s.Context, s.Client, s.AppName, s.RoutePath, s.Image, s.RouteType, s.Format, s.RouteConfig, routeHeaders) + sameRoute := DeployRoute(t, s.Context, s.Client, s.AppName, s.RoutePath, s.Image, s.RouteType, s.Format, s.RouteConfig, routeHeaders) + if ok := reflect.DeepEqual(sameRoute.Headers, routeHeaders); !ok { + t.Error("Route headers should remain the same after multiple deploys with exact the same parameters") + } + DeleteApp(t, s.Context, s.Client, s.AppName) + }) + }