From d196bb28568e59a14e4c4b11e7e4e2de41eb4488 Mon Sep 17 00:00:00 2001 From: Yuval Kohavi Date: Wed, 24 Apr 2019 16:00:55 -0400 Subject: [PATCH] e2e test --- .circleci/config.yml | 2 +- pkg/router/supergloo.go | 60 +++++++++++++++++++++++++++++++++++++++-- test/e2e-supergloo.sh | 8 +++++- test/e2e-tests.sh | 4 +++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 08edb14c..4d5a4ada 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,7 +16,7 @@ jobs: - run: test/e2e-kind.sh - run: test/e2e-supergloo.sh - run: test/e2e-build.sh supergloo:supergloo-system.test - - run: test/e2e-tests.sh + - run: test/e2e-tests.sh canary workflows: version: 2 diff --git a/pkg/router/supergloo.go b/pkg/router/supergloo.go index 259a7637..3f812a31 100644 --- a/pkg/router/supergloo.go +++ b/pkg/router/supergloo.go @@ -74,12 +74,22 @@ func (sr *SuperglooRouter) Reconcile(canary *flaggerv1.Canary) error { if err := sr.setRetries(canary); err != nil { return err } + if err := sr.setHeaders(canary); err != nil { + return err + } if err := sr.setCors(canary); err != nil { return err } - return sr.SetRoutes(canary, 100, 0) - + // do we have routes already? + if _, _, err := sr.GetRoutes(canary); err == nil { + // we have routes, no need to do anything else + return nil + } else if solokiterror.IsNotExist(err) { + return sr.SetRoutes(canary, 100, 0) + } else { + return err + } } func (sr *SuperglooRouter) setRetries(canary *flaggerv1.Canary) error { @@ -98,6 +108,52 @@ func (sr *SuperglooRouter) setRetries(canary *flaggerv1.Canary) error { return sr.writeRuleForCanary(canary, rule) } +func (sr *SuperglooRouter) setHeaders(canary *flaggerv1.Canary) error { + if canary.Spec.Service.Headers == nil { + return nil + } + headerManipulation, err := convertHeaders(canary.Spec.Service.Headers) + if err != nil { + return err + } + if headerManipulation == nil { + return nil + } + rule := sr.createRule(canary, "headers", &supergloov1.RoutingRuleSpec{ + RuleType: &supergloov1.RoutingRuleSpec_HeaderManipulation{ + HeaderManipulation: headerManipulation, + }, + }) + + return sr.writeRuleForCanary(canary, rule) +} + +func convertHeaders(headers *istiov1alpha3.Headers) (*supergloov1.HeaderManipulation, error) { + var headersMaipulation *supergloov1.HeaderManipulation + + if headers.Request != nil { + headersMaipulation = &supergloov1.HeaderManipulation{} + + headersMaipulation.RemoveRequestHeaders = headers.Request.Remove + headersMaipulation.AppendRequestHeaders = make(map[string]string) + for k, v := range headers.Request.Add { + headersMaipulation.AppendRequestHeaders[k] = v + } + } + if headers.Response != nil { + if headersMaipulation == nil { + headersMaipulation = &supergloov1.HeaderManipulation{} + } + + headersMaipulation.RemoveResponseHeaders = headers.Response.Remove + headersMaipulation.AppendResponseHeaders = make(map[string]string) + for k, v := range headers.Response.Add { + headersMaipulation.AppendResponseHeaders[k] = v + } + } + + return headersMaipulation, nil +} func convertRetries(retries *istiov1alpha3.HTTPRetry) (*supergloov1.RetryPolicy, error) { perTryTimeout, err := time.ParseDuration(retries.PerTryTimeout) diff --git a/test/e2e-supergloo.sh b/test/e2e-supergloo.sh index 3123b45c..428b9232 100755 --- a/test/e2e-supergloo.sh +++ b/test/e2e-supergloo.sh @@ -14,7 +14,7 @@ echo ">>> Installing Supergloo" ./supergloo-cli init echo ">>> Installing Istio ${ISTIO_VER}" kubectl create ns istio-system -./supergloo-cli install istio --name test --namespace supergloo-system --auto-inject true --installation-namespace istio-system --mtls false --prometheus true --version ${ISTIO_VER} +./supergloo-cli install istio --name test --namespace supergloo-system --auto-inject=true --installation-namespace istio-system --mtls=false --prometheus=true --version ${ISTIO_VER} echo '>>> Waiting for Istio to be ready' until kubectl -n supergloo-system get mesh test @@ -25,4 +25,10 @@ done # add rbac rules kubectl create clusterrolebinding flagger-supergloo --clusterrole=mesh-discovery --serviceaccount=istio-system:flagger +kubectl -n istio-system rollout status deployment/istio-pilot +kubectl -n istio-system rollout status deployment/istio-policy +kubectl -n istio-system rollout status deployment/istio-sidecar-injector +kubectl -n istio-system rollout status deployment/istio-telemetry +kubectl -n istio-system rollout status deployment/prometheus + kubectl -n istio-system get all diff --git a/test/e2e-tests.sh b/test/e2e-tests.sh index 2ef1b7bc..043d2cc9 100755 --- a/test/e2e-tests.sh +++ b/test/e2e-tests.sh @@ -125,6 +125,10 @@ done echo '✔ Canary promotion test passed' +if [ "$1" = "canary" ]; then + exit 0 +fi + cat <