From 3844017bb91edfe6b1495ea76e7b6a907d81a059 Mon Sep 17 00:00:00 2001 From: Qianglin Li Date: Fri, 24 Mar 2023 17:46:20 +0800 Subject: [PATCH] add e2e test for canary weight (#245) Signed-off-by: charlie Co-authored-by: Xunzhuo --- .../tests/httproute-canary-weight.go | 78 +++++++++++++++ .../tests/httproute-canary-weight.yaml | 97 +++++++++++++++++++ test/ingress/e2e_test.go | 1 + 3 files changed, 176 insertions(+) create mode 100644 test/ingress/conformance/tests/httproute-canary-weight.go create mode 100644 test/ingress/conformance/tests/httproute-canary-weight.yaml diff --git a/test/ingress/conformance/tests/httproute-canary-weight.go b/test/ingress/conformance/tests/httproute-canary-weight.go new file mode 100644 index 000000000..cc8fdb743 --- /dev/null +++ b/test/ingress/conformance/tests/httproute-canary-weight.go @@ -0,0 +1,78 @@ +// Copyright (c) 2022 Alibaba Group Holding Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tests + +import ( + "testing" + + "github.com/alibaba/higress/test/ingress/conformance/utils/http" + "github.com/alibaba/higress/test/ingress/conformance/utils/suite" +) + +func init() { + HigressConformanceTests = append(HigressConformanceTests, HTTPRouteCanaryWeight) +} + +var HTTPRouteCanaryWeight = suite.ConformanceTest{ + ShortName: "HTTPRouteCanaryWeight", + Description: "The Ingress in the higress-conformance-infra namespace uses the canary weight traffic split.", + Manifests: []string{"tests/httproute-canary-weight.yaml"}, + Test: func(t *testing.T, suite *suite.ConformanceTestSuite) { + testcases := []http.Assertion{ + // test if the weight is 0 + { + Meta: http.AssertionMeta{ + TargetBackend: "infra-backend-v1", + TargetNamespace: "higress-conformance-infra", + }, + Request: http.AssertionRequest{ + ActualRequest: http.Request{ + Path: "/weight-0", + Host: "canary.higress.io", + }, + }, + Response: http.AssertionResponse{ + ExpectedResponse: http.Response{ + StatusCode: 200, + }, + }, + }, + // test if the weight is 100 + { + Meta: http.AssertionMeta{ + TargetBackend: "infra-backend-v2", + TargetNamespace: "higress-conformance-infra", + }, + Request: http.AssertionRequest{ + ActualRequest: http.Request{ + Path: "/weight-100", + Host: "canary.higress.io", + }, + }, + Response: http.AssertionResponse{ + ExpectedResponse: http.Response{ + StatusCode: 200, + }, + }, + }, + } + + t.Run("Canary HTTPRoute Traffic Split", func(t *testing.T) { + for _, testcase := range testcases { + http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, suite.GatewayAddress, testcase) + } + }) + }, +} diff --git a/test/ingress/conformance/tests/httproute-canary-weight.yaml b/test/ingress/conformance/tests/httproute-canary-weight.yaml new file mode 100644 index 000000000..49f2134cb --- /dev/null +++ b/test/ingress/conformance/tests/httproute-canary-weight.yaml @@ -0,0 +1,97 @@ +# Copyright (c) 2022 Alibaba Group Holding Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Test if the weight is 0 +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + nginx.ingress.kubernetes.io/canary: "true" + nginx.ingress.kubernetes.io/canary-weight: "0" + name: ingress-echo-canary-weight-0 + namespace: higress-conformance-infra +spec: + ingressClassName: higress + rules: + - host: canary.higress.io + http: + paths: + - path: /weight-0 + pathType: Exact + backend: + service: + name: infra-backend-v3 + port: + number: 8080 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-echo-weight-0 + namespace: higress-conformance-infra +spec: + ingressClassName: higress + rules: + - host: canary.higress.io + http: + paths: + - path: /weight-0 + pathType: Exact + backend: + service: + name: infra-backend-v1 + port: + number: 8080 +--- +# Test if the weight is 100 +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + nginx.ingress.kubernetes.io/canary: "true" + nginx.ingress.kubernetes.io/canary-weight: "100" + name: ingress-echo-canary-weight-100 + namespace: higress-conformance-infra +spec: + ingressClassName: higress + rules: + - host: canary.higress.io + http: + paths: + - path: /weight-100 + pathType: Exact + backend: + service: + name: infra-backend-v2 + port: + number: 8080 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-echo-weight-100 + namespace: higress-conformance-infra +spec: + ingressClassName: higress + rules: + - host: canary.higress.io + http: + paths: + - path: /weight-100 + pathType: Exact + backend: + service: + name: infra-backend-v1 + port: + number: 8080 diff --git a/test/ingress/e2e_test.go b/test/ingress/e2e_test.go index 219e8f754..b7672069b 100644 --- a/test/ingress/e2e_test.go +++ b/test/ingress/e2e_test.go @@ -68,6 +68,7 @@ func TestHigressConformanceTests(t *testing.T) { tests.HTTPRouteSameHostAndPath, tests.HTTPRouteCanaryHeaderWithCustomizedHeader, tests.HTTPRouteWhitelistSourceRange, + tests.HTTPRouteCanaryWeight, } cSuite.Run(t, higressTests)