This is an automated email from the ASF dual-hosted git repository.

kvn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new e1d496dd e2e-test: add e2e tests and CRDs for ApisixConsumer v2 (#1044)
e1d496dd is described below

commit e1d496dd074eb19982b9e198370440ebd0d16f87
Author: Sarasa Kisaragi <[email protected]>
AuthorDate: Wed Jun 1 18:43:46 2022 +0800

    e2e-test: add e2e tests and CRDs for ApisixConsumer v2 (#1044)
---
 samples/deploy/crd/v1/ApisixConsumer.yaml   |  168 ++++
 test/e2e/scaffold/consumer.go               |   55 +-
 test/e2e/scaffold/scaffold.go               |   15 +
 test/e2e/suite-annotations/authorization.go |  339 ++++----
 test/e2e/suite-features/consumer.go         | 1126 +++++++++++++--------------
 5 files changed, 951 insertions(+), 752 deletions(-)

diff --git a/samples/deploy/crd/v1/ApisixConsumer.yaml 
b/samples/deploy/crd/v1/ApisixConsumer.yaml
index 32498386..90346304 100644
--- a/samples/deploy/crd/v1/ApisixConsumer.yaml
+++ b/samples/deploy/crd/v1/ApisixConsumer.yaml
@@ -31,6 +31,174 @@ spec:
   preserveUnknownFields: false
   versions:
     - name: v2beta3
+      served: true
+      storage: false
+      subresources:
+        status: {}
+      schema:
+        openAPIV3Schema:
+          type: object
+          properties:
+            spec:
+              type: object
+              required:
+                - authParameter
+              properties:
+                authParameter:
+                  type: object
+                  oneOf:
+                    - required: ["basicAuth"]
+                    - required: ["keyAuth"]
+                    - required: ["wolfRBAC"]
+                    - required: ["jwtAuth"]
+                    - required: ["hmacAuth"]
+                  properties:
+                    basicAuth:
+                      type: object
+                      oneOf:
+                        - required: ["value"]
+                        - required: ["secretRef"]
+                      properties:
+                        value:
+                          type: object
+                          properties:
+                            username:
+                              type: string
+                              minLength: 1
+                            password:
+                              type: string
+                              minLength: 1
+                          required:
+                            - username
+                            - password
+                        secretRef:
+                          type: object
+                          properties:
+                            name:
+                              type: string
+                              minLength: 1
+                          required:
+                            - name
+                    keyAuth:
+                      type: object
+                      oneOf:
+                        - required: ["value"]
+                        - required: ["secretRef"]
+                      properties:
+                        value:
+                          type: object
+                          properties:
+                            key:
+                              type: string
+                              minLength: 1
+                          required:
+                            - key
+                        secretRef:
+                          type: object
+                          properties:
+                            name:
+                              type: string
+                              minLength: 1
+                          required:
+                            - name
+                    jwtAuth:
+                      type: object
+                      oneOf:
+                        - required: ["value"]
+                        - required: ["secretRef"]
+                      properties:
+                        value:
+                          type: object
+                          properties:
+                            key:
+                              type: string
+                              minLength: 1
+                            secret:
+                              type: string
+                            public_key:
+                              type: string
+                            private_key:
+                              type: string
+                            algorithm:
+                              type: string
+                            exp:
+                              type: integer
+                            base64_secret:
+                              type: boolean
+                          required:
+                            - key
+                        secretRef:
+                          type: object
+                          properties:
+                            name:
+                              type: string
+                              minLength: 1
+                          required:
+                            - name
+                    wolfRBAC:
+                      type: object
+                      oneOf:
+                        - required: ["value"]
+                        - required: ["secretRef"]
+                      properties:
+                        value:
+                          type: object
+                          properties:
+                            server:
+                              type: string
+                            appid:
+                              type: string
+                            header_prefix:
+                              type: string
+                        secretRef:
+                          type: object
+                          properties:
+                            name:
+                              type: string
+                              minLength: 1
+                          required:
+                            - name
+                    hmacAuth:
+                      type: object
+                      oneOf:
+                        - required: ["value"]
+                        - required: ["secretRef"]
+                      properties:
+                        value:
+                          type: object
+                          properties:
+                            access_key:
+                              type: string
+                            secret_key:
+                              type: string
+                            algorithm:
+                              type: string
+                            clock_skew:
+                              type: integer
+                            signed_headers:
+                              type: array
+                              items:
+                                type: string
+                            keep_headers:
+                              type: boolean
+                            encode_uri_params:
+                              type: boolean
+                            validate_request_body:
+                              type: boolean
+                            max_req_body:
+                              type: integer
+                          required:
+                            - access_key
+                            - secret_key
+                        secretRef:
+                          type: object
+                          properties:
+                            name:
+                              type: string
+                              minLength: 1
+                          required:
+                            - name
+    - name: v2
       served: true
       storage: true
       subresources:
diff --git a/test/e2e/scaffold/consumer.go b/test/e2e/scaffold/consumer.go
index 5cee9b24..5aac1455 100644
--- a/test/e2e/scaffold/consumer.go
+++ b/test/e2e/scaffold/consumer.go
@@ -14,11 +14,15 @@
 // limitations under the License.
 package scaffold
 
-import "fmt"
+import (
+       "errors"
+       "fmt"
+       "strings"
+)
 
 var (
        _apisixConsumerBasicAuth = `
-apiVersion: apisix.apache.org/v2beta3
+apiVersion: %s
 kind: ApisixConsumer
 metadata:
   name: %s
@@ -28,9 +32,20 @@ spec:
       value:
         username: %s
         password: %s
+`
+       _apisixConsumerBasicAuthSecret = `
+apiVersion: %s
+kind: ApisixConsumer
+metadata:
+  name: %s
+spec:
+  authParameter:
+    basicAuth:
+      secretRef:
+        name: %s
 `
        _apisixConsumerKeyAuth = `
-  apiVersion: apisix.apache.org/v2beta3
+  apiVersion: %s
   kind: ApisixConsumer
   metadata:
     name: %s
@@ -39,15 +54,45 @@ spec:
       keyAuth:
         value:
           key: %s
+  `
+       _apisixConsumerKeyAuthSecret = `
+  apiVersion: %s
+  kind: ApisixConsumer
+  metadata:
+    name: %s
+  spec:
+    authParameter:
+      keyAuth:
+        secretRef:
+          name: %s
   `
 )
 
 func (s *Scaffold) ApisixConsumerBasicAuthCreated(name, username, password 
string) error {
-       ac := fmt.Sprintf(_apisixConsumerBasicAuth, name, username, password)
+       ac := fmt.Sprintf(_apisixConsumerBasicAuth, 
s.opts.APISIXConsumerVersion, name, username, password)
+       return s.CreateResourceFromString(ac)
+}
+
+func (s *Scaffold) ApisixConsumerBasicAuthSecretCreated(name, secret string) 
error {
+       ac := fmt.Sprintf(_apisixConsumerBasicAuthSecret, 
s.opts.APISIXConsumerVersion, name, secret)
        return s.CreateResourceFromString(ac)
 }
 
 func (s *Scaffold) ApisixConsumerKeyAuthCreated(name, key string) error {
-       ac := fmt.Sprintf(_apisixConsumerKeyAuth, name, key)
+       ac := fmt.Sprintf(_apisixConsumerKeyAuth, s.opts.APISIXConsumerVersion, 
name, key)
+       return s.CreateResourceFromString(ac)
+}
+
+func (s *Scaffold) ApisixConsumerKeyAuthSecretCreated(name, secret string) 
error {
+       ac := fmt.Sprintf(_apisixConsumerKeyAuthSecret, 
s.opts.APISIXConsumerVersion, name, secret)
+       return s.CreateResourceFromString(ac)
+}
+
+func (s *Scaffold) CreateVersionedApisixConsumer(yml string) error {
+       if !strings.Contains(yml, "kind: ApisixConsumer") {
+               return errors.New("not a ApisixConsumer")
+       }
+
+       ac := s.replaceApiVersion(yml, s.opts.APISIXConsumerVersion)
        return s.CreateResourceFromString(ac)
 }
diff --git a/test/e2e/scaffold/scaffold.go b/test/e2e/scaffold/scaffold.go
index 9a47eb00..32c27387 100644
--- a/test/e2e/scaffold/scaffold.go
+++ b/test/e2e/scaffold/scaffold.go
@@ -28,6 +28,7 @@ import (
        "os/exec"
        "os/user"
        "path/filepath"
+       "regexp"
        "strings"
        "text/template"
        "time"
@@ -52,6 +53,7 @@ type Options struct {
        HTTPBinServicePort         int
        APISIXRouteVersion         string
        APISIXTlsVersion           string
+       APISIXConsumerVersion      string
        APISIXClusterConfigVersion string
        APISIXAdminAPIKey          string
        EnableWebhooks             bool
@@ -110,6 +112,9 @@ func NewScaffold(o *Options) *Scaffold {
        if o.APISIXTlsVersion == "" {
                o.APISIXTlsVersion = config.ApisixV2beta3
        }
+       if o.APISIXConsumerVersion == "" {
+               o.APISIXConsumerVersion = config.ApisixV2beta3
+       }
        if o.APISIXClusterConfigVersion == "" {
                o.APISIXClusterConfigVersion = config.ApisixV2beta3
        }
@@ -139,6 +144,7 @@ func NewDefaultScaffold() *Scaffold {
                HTTPBinServicePort:         80,
                APISIXRouteVersion:         kube.ApisixRouteV2beta3,
                APISIXTlsVersion:           config.ApisixV2beta3,
+               APISIXConsumerVersion:      config.ApisixV2beta3,
                APISIXClusterConfigVersion: config.ApisixV2beta3,
                EnableWebhooks:             false,
                APISIXPublishAddress:       "",
@@ -156,6 +162,7 @@ func NewDefaultV2Scaffold() *Scaffold {
                HTTPBinServicePort:         80,
                APISIXRouteVersion:         kube.ApisixRouteV2,
                APISIXTlsVersion:           config.ApisixV2,
+               APISIXConsumerVersion:      config.ApisixV2,
                APISIXClusterConfigVersion: config.ApisixV2,
                EnableWebhooks:             false,
                APISIXPublishAddress:       "",
@@ -491,6 +498,14 @@ func (s *Scaffold) FormatNamespaceLabel(label string) 
string {
        return label
 }
 
+var (
+       versionRegex = regexp.MustCompile(`apiVersion: apisix.apache.org/.*?\n`)
+)
+
+func (s *Scaffold) replaceApiVersion(yml, ver string) string {
+       return versionRegex.ReplaceAllString(yml, "apiVersion: "+ver+"\n")
+}
+
 func (s *Scaffold) DisableNamespaceSelector() {
        s.opts.disableNamespaceSelector = true
 }
diff --git a/test/e2e/suite-annotations/authorization.go 
b/test/e2e/suite-annotations/authorization.go
index d1818651..13fad3e5 100644
--- a/test/e2e/suite-annotations/authorization.go
+++ b/test/e2e/suite-annotations/authorization.go
@@ -26,17 +26,18 @@ import (
 )
 
 var _ = ginkgo.Describe("suite-annotations: authorization annotations", func() 
{
-       s := scaffold.NewDefaultScaffold()
+       suites := func(scaffoldFunc func() *scaffold.Scaffold) {
+               s := scaffoldFunc()
 
-       ginkgo.It("enable keyAuth in ingress networking/v1", func() {
-               err := s.ApisixConsumerKeyAuthCreated("foo", "bar")
-               assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
+               ginkgo.It("enable keyAuth in ingress networking/v1", func() {
+                       err := s.ApisixConsumerKeyAuthCreated("foo", "bar")
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
 
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
 
-               backendSvc, backendPort := s.DefaultHTTPBackend()
-               ing := fmt.Sprintf(`
+                       backendSvc, backendPort := s.DefaultHTTPBackend()
+                       ing := fmt.Sprintf(`
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
@@ -57,34 +58,34 @@ spec:
             port:
               number: %d
 `, backendSvc, backendPort[0])
-               err = s.CreateResourceFromString(ing)
-               assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
-               time.Sleep(5 * time.Second)
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing API key 
found in request")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("apikey", "bar").
-                       Expect().
-                       Status(http.StatusOK)
-       })
-
-       ginkgo.It("enable keyAuth in ingress networking/v1beta1", func() {
-               err := s.ApisixConsumerKeyAuthCreated("foo", "bar")
-               assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               backendSvc, backendPort := s.DefaultHTTPBackend()
-               ing := fmt.Sprintf(`
+                       err = s.CreateResourceFromString(ing)
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
+                       time.Sleep(5 * time.Second)
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing API 
key found in request")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("apikey", "bar").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+
+               ginkgo.It("enable keyAuth in ingress networking/v1beta1", 
func() {
+                       err := s.ApisixConsumerKeyAuthCreated("foo", "bar")
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       backendSvc, backendPort := s.DefaultHTTPBackend()
+                       ing := fmt.Sprintf(`
 apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
@@ -103,34 +104,34 @@ spec:
           serviceName: %s
           servicePort: %d
 `, backendSvc, backendPort[0])
-               err = s.CreateResourceFromString(ing)
-               assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
-               time.Sleep(5 * time.Second)
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing API key 
found in request")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("apikey", "bar").
-                       Expect().
-                       Status(http.StatusOK)
-       })
-
-       ginkgo.It("enable keyAuth in ingress extensions/v1beta1", func() {
-               err := s.ApisixConsumerKeyAuthCreated("foo", "bar")
-               assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               backendSvc, backendPort := s.DefaultHTTPBackend()
-               ing := fmt.Sprintf(`
+                       err = s.CreateResourceFromString(ing)
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
+                       time.Sleep(5 * time.Second)
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing API 
key found in request")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("apikey", "bar").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+
+               ginkgo.It("enable keyAuth in ingress extensions/v1beta1", 
func() {
+                       err := s.ApisixConsumerKeyAuthCreated("foo", "bar")
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       backendSvc, backendPort := s.DefaultHTTPBackend()
+                       ing := fmt.Sprintf(`
 apiVersion: extensions/v1beta1
 kind: Ingress
 metadata:
@@ -149,34 +150,34 @@ spec:
           serviceName: %s
           servicePort: %d
 `, backendSvc, backendPort[0])
-               err = s.CreateResourceFromString(ing)
-               assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
-               time.Sleep(5 * time.Second)
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing API key 
found in request")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("apikey", "bar").
-                       Expect().
-                       Status(http.StatusOK)
-       })
-
-       ginkgo.It("enable basicAuth in ingress networking/v1", func() {
-               err := s.ApisixConsumerBasicAuthCreated("jack1", 
"jack1-username", "jack1-password")
-               assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               backendSvc, backendPort := s.DefaultHTTPBackend()
-               ing := fmt.Sprintf(`
+                       err = s.CreateResourceFromString(ing)
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
+                       time.Sleep(5 * time.Second)
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing API 
key found in request")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("apikey", "bar").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+
+               ginkgo.It("enable basicAuth in ingress networking/v1", func() {
+                       err := s.ApisixConsumerBasicAuthCreated("jack1", 
"jack1-username", "jack1-password")
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       backendSvc, backendPort := s.DefaultHTTPBackend()
+                       ing := fmt.Sprintf(`
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
@@ -197,34 +198,34 @@ spec:
             port:
               number: %d
 `, backendSvc, backendPort[0])
-               err = s.CreateResourceFromString(ing)
-               assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
-               time.Sleep(5 * time.Second)
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing 
authorization in request")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", "Basic 
amFjazEtdXNlcm5hbWU6amFjazEtcGFzc3dvcmQ=").
-                       Expect().
-                       Status(http.StatusOK)
-       })
-
-       ginkgo.It("enable basicAuth in ingress networking/v1beta1", func() {
-               err := s.ApisixConsumerBasicAuthCreated("jack1", 
"jack1-username", "jack1-password")
-               assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               backendSvc, backendPort := s.DefaultHTTPBackend()
-               ing := fmt.Sprintf(`
+                       err = s.CreateResourceFromString(ing)
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
+                       time.Sleep(5 * time.Second)
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing 
authorization in request")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", "Basic 
amFjazEtdXNlcm5hbWU6amFjazEtcGFzc3dvcmQ=").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+
+               ginkgo.It("enable basicAuth in ingress networking/v1beta1", 
func() {
+                       err := s.ApisixConsumerBasicAuthCreated("jack1", 
"jack1-username", "jack1-password")
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       backendSvc, backendPort := s.DefaultHTTPBackend()
+                       ing := fmt.Sprintf(`
 apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
@@ -243,34 +244,34 @@ spec:
           serviceName: %s
           servicePort: %d
 `, backendSvc, backendPort[0])
-               err = s.CreateResourceFromString(ing)
-               assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
-               time.Sleep(5 * time.Second)
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing 
authorization in request")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", "Basic 
amFjazEtdXNlcm5hbWU6amFjazEtcGFzc3dvcmQ=").
-                       Expect().
-                       Status(http.StatusOK)
-       })
-
-       ginkgo.It("enable basicAuth in ingress networking/v1beta1", func() {
-               err := s.ApisixConsumerBasicAuthCreated("jack1", 
"jack1-username", "jack1-password")
-               assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               backendSvc, backendPort := s.DefaultHTTPBackend()
-               ing := fmt.Sprintf(`
+                       err = s.CreateResourceFromString(ing)
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
+                       time.Sleep(5 * time.Second)
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing 
authorization in request")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", "Basic 
amFjazEtdXNlcm5hbWU6amFjazEtcGFzc3dvcmQ=").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+
+               ginkgo.It("enable basicAuth in ingress networking/v1beta1", 
func() {
+                       err := s.ApisixConsumerBasicAuthCreated("jack1", 
"jack1-username", "jack1-password")
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       backendSvc, backendPort := s.DefaultHTTPBackend()
+                       ing := fmt.Sprintf(`
 apiVersion: extensions/v1beta1
 kind: Ingress
 metadata:
@@ -289,22 +290,30 @@ spec:
           serviceName: %s
           servicePort: %d
 `, backendSvc, backendPort[0])
-               err = s.CreateResourceFromString(ing)
-               assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
-               time.Sleep(5 * time.Second)
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing 
authorization in request")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", "Basic 
amFjazEtdXNlcm5hbWU6amFjazEtcGFzc3dvcmQ=").
-                       Expect().
-                       Status(http.StatusOK)
+                       err = s.CreateResourceFromString(ing)
+                       assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
+                       time.Sleep(5 * time.Second)
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing 
authorization in request")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", "Basic 
amFjazEtdXNlcm5hbWU6amFjazEtcGFzc3dvcmQ=").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+       }
+
+       ginkgo.Describe("suite-annotations: scaffold v2beta3", func() {
+               suites(scaffold.NewDefaultScaffold)
+       })
+       ginkgo.Describe("suite-annotations: scaffold v2", func() {
+               suites(scaffold.NewDefaultV2Scaffold)
        })
 })
diff --git a/test/e2e/suite-features/consumer.go 
b/test/e2e/suite-features/consumer.go
index 599e0063..d6fd80b0 100644
--- a/test/e2e/suite-features/consumer.go
+++ b/test/e2e/suite-features/consumer.go
@@ -28,38 +28,27 @@ import (
 )
 
 var _ = ginkgo.Describe("suite-features: ApisixConsumer", func() {
-       s := scaffold.NewDefaultScaffold()
-
-       ginkgo.It("ApisixRoute with basicAuth consumer", func() {
-               ac := `
-apiVersion: apisix.apache.org/v2beta3
-kind: ApisixConsumer
-metadata:
-  name: basicvalue
-spec:
-  authParameter:
-    basicAuth:
-      value:
-        username: foo
-        password: bar
-`
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating basicAuth ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               basicAuth, _ := grs[0].Plugins["basic-auth"]
-               assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
-                       "username": "foo",
-                       "password": "bar",
-               })
-
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+       suites := func(scaffoldFunc func() *scaffold.Scaffold) {
+               s := scaffoldFunc()
+
+               ginkgo.It("ApisixRoute with basicAuth consumer", func() {
+                       assert.Nil(ginkgo.GinkgoT(), 
s.ApisixConsumerBasicAuthCreated("basicvalue", "foo", "bar"), "creating 
basicAuth ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       basicAuth, _ := grs[0].Plugins["basic-auth"]
+                       assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
+                               "username": "foo",
+                               "password": "bar",
+                       })
+
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -85,39 +74,39 @@ spec:
      enable: true
      type: basicAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute with basicAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       WithHeader("Authorization", "Basic Zm9vOmJhcg==").
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "Missing authorization 
in request")
-
-               msg = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "baz").
-                       WithHeader("Authorization", "Basic Zm9vOmJhcg==").
-                       Expect().
-                       Status(http.StatusNotFound).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not Found")
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute with basicAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               WithHeader("Authorization", "Basic 
Zm9vOmJhcg==").
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "Missing 
authorization in request")
+
+                       msg = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "baz").
+                               WithHeader("Authorization", "Basic 
Zm9vOmJhcg==").
+                               Expect().
+                               Status(http.StatusNotFound).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not 
Found")
+               })
 
-       ginkgo.It("ApisixRoute with basicAuth consumer using secret", func() {
-               secret := `
+               ginkgo.It("ApisixRoute with basicAuth consumer using secret", 
func() {
+                       secret := `
 apiVersion: v1
 kind: Secret
 metadata:
@@ -126,36 +115,24 @@ data:
   password: YmFy
   username: Zm9v
 `
-               assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating basic secret for ApisixConsumer")
-
-               ac := `
-apiVersion: apisix.apache.org/v2beta3
-kind: ApisixConsumer
-metadata:
-  name: basicvalue
-spec:
-  authParameter:
-    basicAuth:
-      secretRef:
-        name: basic
-`
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating basicAuth ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               basicAuth, _ := grs[0].Plugins["basic-auth"]
-               assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
-                       "username": "foo",
-                       "password": "bar",
-               })
-
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating basic secret for ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.ApisixConsumerBasicAuthSecretCreated("basicvalue", "basic"), "creating 
basicAuth ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       basicAuth, _ := grs[0].Plugins["basic-auth"]
+                       assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
+                               "username": "foo",
+                               "password": "bar",
+                       })
+
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -181,65 +158,54 @@ spec:
      enable: true
      type: basicAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute with basicAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       WithHeader("Authorization", "Basic Zm9vOmJhcg==").
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "Missing authorization 
in request")
-
-               msg = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "baz").
-                       WithHeader("Authorization", "Basic Zm9vOmJhcg==").
-                       Expect().
-                       Status(http.StatusNotFound).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not Found")
-       })
-
-       ginkgo.It("ApisixRoute with keyAuth consumer", func() {
-               ac := `
-apiVersion: apisix.apache.org/v2beta3
-kind: ApisixConsumer
-metadata:
-  name: keyvalue
-spec:
-  authParameter:
-    keyAuth:
-      value:
-        key: foo
-`
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating keyAuth ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               basicAuth, _ := grs[0].Plugins["key-auth"]
-               assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
-                       "key": "foo",
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute with basicAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               WithHeader("Authorization", "Basic 
Zm9vOmJhcg==").
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "Missing 
authorization in request")
+
+                       msg = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "baz").
+                               WithHeader("Authorization", "Basic 
Zm9vOmJhcg==").
+                               Expect().
+                               Status(http.StatusNotFound).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not 
Found")
                })
 
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+               ginkgo.It("ApisixRoute with keyAuth consumer", func() {
+                       assert.Nil(ginkgo.GinkgoT(), 
s.ApisixConsumerKeyAuthCreated("keyvalue", "foo"), "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       basicAuth, _ := grs[0].Plugins["key-auth"]
+                       assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
+                               "key": "foo",
+                       })
+
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -265,39 +231,39 @@ spec:
      enable: true
      type: keyAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute with keyAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       WithHeader("apikey", "foo").
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "Missing API key found 
in request")
-
-               msg = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "baz").
-                       WithHeader("apikey", "baz").
-                       Expect().
-                       Status(http.StatusNotFound).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not Found")
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute with keyAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               WithHeader("apikey", "foo").
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "Missing API key 
found in request")
+
+                       msg = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "baz").
+                               WithHeader("apikey", "baz").
+                               Expect().
+                               Status(http.StatusNotFound).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not 
Found")
+               })
 
-       ginkgo.It("ApisixRoute with keyAuth consumer using secret", func() {
-               secret := `
+               ginkgo.It("ApisixRoute with keyAuth consumer using secret", 
func() {
+                       secret := `
 apiVersion: v1
 kind: Secret
 metadata:
@@ -305,35 +271,23 @@ metadata:
 data:
   key: Zm9v
 `
-               assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating keyauth secret for 
ApisixConsumer")
-
-               ac := `
-apiVersion: apisix.apache.org/v2beta3
-kind: ApisixConsumer
-metadata:
-  name: keyvalue
-spec:
-  authParameter:
-    keyAuth:
-      secretRef:
-        name: keyauth
-`
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating keyAuth ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               basicAuth, _ := grs[0].Plugins["key-auth"]
-               assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
-                       "key": "foo",
-               })
-
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating keyauth secret for 
ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.ApisixConsumerKeyAuthSecretCreated("keyvalue", "keyauth"), "creating keyAuth 
ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       basicAuth, _ := grs[0].Plugins["key-auth"]
+                       assert.Equal(ginkgo.GinkgoT(), basicAuth, 
map[string]interface{}{
+                               "key": "foo",
+                       })
+
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -359,44 +313,44 @@ spec:
      enable: true
      type: keyAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute with keyAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       WithHeader("apikey", "foo").
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "Missing API key found 
in request")
-
-               msg = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "baz").
-                       WithHeader("apikey", "baz").
-                       Expect().
-                       Status(http.StatusNotFound).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not Found")
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute with keyAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               WithHeader("apikey", "foo").
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "Missing API key 
found in request")
+
+                       msg = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "baz").
+                               WithHeader("apikey", "baz").
+                               Expect().
+                               Status(http.StatusNotFound).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not 
Found")
+               })
 
-       ginkgo.It("ApisixRoute with wolfRBAC consumer", func() {
-               _ = s.StartWolfRBACServer()
-               wolfSvr, err := s.GetWolfRBACServerURL()
-               assert.Nil(ginkgo.GinkgoT(), err, "checking wolf-server")
-               defer s.StopWolfRBACServer()
+               ginkgo.It("ApisixRoute with wolfRBAC consumer", func() {
+                       _ = s.StartWolfRBACServer()
+                       wolfSvr, err := s.GetWolfRBACServerURL()
+                       assert.Nil(ginkgo.GinkgoT(), err, "checking 
wolf-server")
+                       defer s.StopWolfRBACServer()
 
-               ac := fmt.Sprintf(`
+                       ac := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixConsumer
 metadata:
@@ -409,23 +363,23 @@ spec:
         appid: "test-app"
         header_prefix: "X-"
 `, wolfSvr)
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating wolfRBAC ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               wolfRBAC, _ := 
grs[0].Plugins["wolf-rbac"].(map[string]interface{})
-               assert.Equal(ginkgo.GinkgoT(), wolfRBAC, map[string]interface{}{
-                       "server":        wolfSvr,
-                       "appid":         "test-app",
-                       "header_prefix": "X-",
-               })
-               adminSvc, adminPort := s.ApisixAdminServiceAndPort()
-               ar1 := fmt.Sprintf(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixConsumer(ac), "creating wolfRBAC ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       wolfRBAC, _ := 
grs[0].Plugins["wolf-rbac"].(map[string]interface{})
+                       assert.Equal(ginkgo.GinkgoT(), wolfRBAC, 
map[string]interface{}{
+                               "server":        wolfSvr,
+                               "appid":         "test-app",
+                               "header_prefix": "X-",
+                       })
+                       adminSvc, adminPort := s.ApisixAdminServiceAndPort()
+                       ar1 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -443,12 +397,12 @@ spec:
     - name: public-api
       enable: true
 `, adminSvc, adminPort)
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar1), 
"creating ApisixRoute")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar1), "creating ApisixRoute")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
 
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar2 := fmt.Sprintf(`
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar2 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -468,10 +422,10 @@ spec:
      enable: true
      type: wolfRBAC
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar2), 
"creating ApisixRoute")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(2), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
-               payload := []byte(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar2), "creating ApisixRoute")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(2), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
+                       payload := []byte(`
 {
        "appid": "test-app",
        "username": "test",
@@ -479,42 +433,42 @@ spec:
        "authType": 1
 }
                `)
-               body := 
s.NewAPISIXClient().POST("/apisix/plugin/wolf-rbac/login").
-                       WithHeader("Content-Type", "application/json").
-                       WithBytes(payload).
-                       Expect().
-                       Status(http.StatusOK).
-                       Body().
-                       Contains("rbac_token").
-                       Raw()
-
-               data := struct {
-                       Token string `json:"rbac_token"`
-               }{}
-               _ = json.Unmarshal([]byte(body), &data)
-
-               _ = s.NewAPISIXClient().GET("").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", data.Token).
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg401 := s.NewAPISIXClient().GET("").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing rbac token 
in request")
-       })
+                       body := 
s.NewAPISIXClient().POST("/apisix/plugin/wolf-rbac/login").
+                               WithHeader("Content-Type", "application/json").
+                               WithBytes(payload).
+                               Expect().
+                               Status(http.StatusOK).
+                               Body().
+                               Contains("rbac_token").
+                               Raw()
+
+                       data := struct {
+                               Token string `json:"rbac_token"`
+                       }{}
+                       _ = json.Unmarshal([]byte(body), &data)
+
+                       _ = s.NewAPISIXClient().GET("").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", data.Token).
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg401 := s.NewAPISIXClient().GET("").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing rbac 
token in request")
+               })
 
-       ginkgo.It("ApisixRoute with wolfRBAC consumer using secret", func() {
-               _ = s.StartWolfRBACServer()
-               wolfSvr, err := s.GetWolfRBACServerURL()
-               assert.Nil(ginkgo.GinkgoT(), err, "checking wolf-server")
-               defer s.StopWolfRBACServer()
+               ginkgo.It("ApisixRoute with wolfRBAC consumer using secret", 
func() {
+                       _ = s.StartWolfRBACServer()
+                       wolfSvr, err := s.GetWolfRBACServerURL()
+                       assert.Nil(ginkgo.GinkgoT(), err, "checking 
wolf-server")
+                       defer s.StopWolfRBACServer()
 
-               secret := fmt.Sprintf(`
+                       secret := fmt.Sprintf(`
 apiVersion: v1
 kind: Secret
 metadata:
@@ -524,9 +478,9 @@ data:
   appid: dGVzdC1hcHA=
   header_prefix: WC0=
 `, base64.StdEncoding.EncodeToString([]byte(wolfSvr)))
-               assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating wolfRBAC secret for 
ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating wolfRBAC secret for 
ApisixConsumer")
 
-               ac := `
+                       ac := `
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixConsumer
 metadata:
@@ -537,23 +491,23 @@ spec:
       secretRef:
         name: rbac
 `
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating wolfRBAC ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               wolfRBAC, _ := 
grs[0].Plugins["wolf-rbac"].(map[string]interface{})
-               assert.Equal(ginkgo.GinkgoT(), wolfRBAC, map[string]interface{}{
-                       "server":        wolfSvr,
-                       "appid":         "test-app",
-                       "header_prefix": "X-",
-               })
-               adminSvc, adminPort := s.ApisixAdminServiceAndPort()
-               ar1 := fmt.Sprintf(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixConsumer(ac), "creating wolfRBAC ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       wolfRBAC, _ := 
grs[0].Plugins["wolf-rbac"].(map[string]interface{})
+                       assert.Equal(ginkgo.GinkgoT(), wolfRBAC, 
map[string]interface{}{
+                               "server":        wolfSvr,
+                               "appid":         "test-app",
+                               "header_prefix": "X-",
+                       })
+                       adminSvc, adminPort := s.ApisixAdminServiceAndPort()
+                       ar1 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -571,12 +525,12 @@ spec:
     - name: public-api
       enable: true
 `, adminSvc, adminPort)
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar1), 
"creating ApisixRoute")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar1), "creating ApisixRoute")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
 
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar2 := fmt.Sprintf(`
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar2 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -596,10 +550,10 @@ spec:
      enable: true
      type: wolfRBAC
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar2), 
"creating ApisixRoute")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(2), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
-               payload := []byte(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar2), "creating ApisixRoute")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(2), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
+                       payload := []byte(`
 {
        "appid": "test-app",
        "username": "test",
@@ -607,37 +561,37 @@ spec:
        "authType": 1
 }
                `)
-               body := 
s.NewAPISIXClient().POST("/apisix/plugin/wolf-rbac/login").
-                       WithHeader("Content-Type", "application/json").
-                       WithBytes(payload).
-                       Expect().
-                       Status(http.StatusOK).
-                       Body().
-                       Contains("rbac_token").
-                       Raw()
-
-               data := struct {
-                       Token string `json:"rbac_token"`
-               }{}
-               _ = json.Unmarshal([]byte(body), &data)
-
-               _ = s.NewAPISIXClient().GET("").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", data.Token).
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg401 := s.NewAPISIXClient().GET("").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing rbac token 
in request")
-       })
+                       body := 
s.NewAPISIXClient().POST("/apisix/plugin/wolf-rbac/login").
+                               WithHeader("Content-Type", "application/json").
+                               WithBytes(payload).
+                               Expect().
+                               Status(http.StatusOK).
+                               Body().
+                               Contains("rbac_token").
+                               Raw()
+
+                       data := struct {
+                               Token string `json:"rbac_token"`
+                       }{}
+                       _ = json.Unmarshal([]byte(body), &data)
+
+                       _ = s.NewAPISIXClient().GET("").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", data.Token).
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg401 := s.NewAPISIXClient().GET("").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing rbac 
token in request")
+               })
 
-       ginkgo.It("ApisixRoute with hmacAuth consumer", func() {
-               ac := `
+               ginkgo.It("ApisixRoute with hmacAuth consumer", func() {
+                       ac := `
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixConsumer
 metadata:
@@ -651,23 +605,23 @@ spec:
         algorithm: "hmac-sha256"
         clock_skew: 0
 `
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating hmacAuth ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               hmacAuth, _ := 
grs[0].Plugins["hmac-auth"].(map[string]interface{})
-               assert.Equal(ginkgo.GinkgoT(), "papa", hmacAuth["access_key"])
-               assert.Equal(ginkgo.GinkgoT(), "fatpa", hmacAuth["secret_key"])
-               assert.Equal(ginkgo.GinkgoT(), "hmac-sha256", 
hmacAuth["algorithm"])
-               assert.Equal(ginkgo.GinkgoT(), float64(0), 
hmacAuth["clock_skew"])
-
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixConsumer(ac), "creating hmacAuth ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       hmacAuth, _ := 
grs[0].Plugins["hmac-auth"].(map[string]interface{})
+                       assert.Equal(ginkgo.GinkgoT(), "papa", 
hmacAuth["access_key"])
+                       assert.Equal(ginkgo.GinkgoT(), "fatpa", 
hmacAuth["secret_key"])
+                       assert.Equal(ginkgo.GinkgoT(), "hmac-sha256", 
hmacAuth["algorithm"])
+                       assert.Equal(ginkgo.GinkgoT(), float64(0), 
hmacAuth["clock_skew"])
+
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -693,47 +647,47 @@ spec:
      enable: true
      type: hmacAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute with hmacAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       WithHeader("X-HMAC-SIGNATURE", 
"l3Uka7E1kxPA/owQ2+OqJUmflRppjD5q8xPcWbyKKrg=").
-                       WithHeader("X-HMAC-ACCESS-KEY", "papa").
-                       WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
-                       WithHeader("X-HMAC-SIGNED-HEADERS", "User-Agent;X-Foo").
-                       WithHeader("User-Agent", "curl/7.29.0").
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "access key or signature 
missing")
-
-               msg = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "baz").
-                       WithHeader("X-HMAC-SIGNATURE", 
"MhGJMkEYFD+98qtvoDPlvCGIUSmmUaw0In/D0vt2Z4E=").
-                       WithHeader("X-HMAC-ACCESS-KEY", "papa").
-                       WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
-                       WithHeader("X-HMAC-SIGNED-HEADERS", "User-Agent;X-Foo").
-                       WithHeader("User-Agent", "curl/7.29.0").
-                       Expect().
-                       Status(http.StatusNotFound).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not Found")
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute with hmacAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               WithHeader("X-HMAC-SIGNATURE", 
"l3Uka7E1kxPA/owQ2+OqJUmflRppjD5q8xPcWbyKKrg=").
+                               WithHeader("X-HMAC-ACCESS-KEY", "papa").
+                               WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
+                               WithHeader("X-HMAC-SIGNED-HEADERS", 
"User-Agent;X-Foo").
+                               WithHeader("User-Agent", "curl/7.29.0").
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "access key or 
signature missing")
+
+                       msg = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "baz").
+                               WithHeader("X-HMAC-SIGNATURE", 
"MhGJMkEYFD+98qtvoDPlvCGIUSmmUaw0In/D0vt2Z4E=").
+                               WithHeader("X-HMAC-ACCESS-KEY", "papa").
+                               WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
+                               WithHeader("X-HMAC-SIGNED-HEADERS", 
"User-Agent;X-Foo").
+                               WithHeader("User-Agent", "curl/7.29.0").
+                               Expect().
+                               Status(http.StatusNotFound).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not 
Found")
+               })
 
-       ginkgo.It("ApisixRoute with hmacAuth consumer using secret", func() {
-               secret := `
+               ginkgo.It("ApisixRoute with hmacAuth consumer using secret", 
func() {
+                       secret := `
 apiVersion: v1
 kind: Secret
 metadata:
@@ -744,9 +698,9 @@ data:
   algorithm: aG1hYy1zaGEyNTY=
   clock_skew: MA==
 `
-               assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating hmac secret for ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating hmac secret for ApisixConsumer")
 
-               ac := `
+                       ac := `
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixConsumer
 metadata:
@@ -757,23 +711,23 @@ spec:
       secretRef:
         name: hmac
 `
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating hmacAuth ApisixConsumer")
-
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
-
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               hmacAuth, _ := 
grs[0].Plugins["hmac-auth"].(map[string]interface{})
-               assert.Equal(ginkgo.GinkgoT(), "papa", hmacAuth["access_key"])
-               assert.Equal(ginkgo.GinkgoT(), "fatpa", hmacAuth["secret_key"])
-               assert.Equal(ginkgo.GinkgoT(), "hmac-sha256", 
hmacAuth["algorithm"])
-               assert.Equal(ginkgo.GinkgoT(), float64(0), 
hmacAuth["clock_skew"])
-
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixConsumer(ac), "creating hmacAuth ApisixConsumer")
+
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
+
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       hmacAuth, _ := 
grs[0].Plugins["hmac-auth"].(map[string]interface{})
+                       assert.Equal(ginkgo.GinkgoT(), "papa", 
hmacAuth["access_key"])
+                       assert.Equal(ginkgo.GinkgoT(), "fatpa", 
hmacAuth["secret_key"])
+                       assert.Equal(ginkgo.GinkgoT(), "hmac-sha256", 
hmacAuth["algorithm"])
+                       assert.Equal(ginkgo.GinkgoT(), float64(0), 
hmacAuth["clock_skew"])
+
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -799,47 +753,47 @@ spec:
      enable: true
      type: hmacAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute with hmacAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       WithHeader("X-HMAC-SIGNATURE", 
"l3Uka7E1kxPA/owQ2+OqJUmflRppjD5q8xPcWbyKKrg=").
-                       WithHeader("X-HMAC-ACCESS-KEY", "papa").
-                       WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
-                       WithHeader("X-HMAC-SIGNED-HEADERS", "User-Agent;X-Foo").
-                       WithHeader("User-Agent", "curl/7.29.0").
-                       Expect().
-                       Status(http.StatusOK)
-
-               msg := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "access key or signature 
missing")
-
-               msg = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "baz").
-                       WithHeader("X-HMAC-SIGNATURE", 
"MhGJMkEYFD+98qtvoDPlvCGIUSmmUaw0In/D0vt2Z4E=").
-                       WithHeader("X-HMAC-ACCESS-KEY", "papa").
-                       WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
-                       WithHeader("X-HMAC-SIGNED-HEADERS", "User-Agent;X-Foo").
-                       WithHeader("User-Agent", "curl/7.29.0").
-                       Expect().
-                       Status(http.StatusNotFound).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not Found")
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute with hmacAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               WithHeader("X-HMAC-SIGNATURE", 
"l3Uka7E1kxPA/owQ2+OqJUmflRppjD5q8xPcWbyKKrg=").
+                               WithHeader("X-HMAC-ACCESS-KEY", "papa").
+                               WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
+                               WithHeader("X-HMAC-SIGNED-HEADERS", 
"User-Agent;X-Foo").
+                               WithHeader("User-Agent", "curl/7.29.0").
+                               Expect().
+                               Status(http.StatusOK)
+
+                       msg := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "access key or 
signature missing")
+
+                       msg = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "baz").
+                               WithHeader("X-HMAC-SIGNATURE", 
"MhGJMkEYFD+98qtvoDPlvCGIUSmmUaw0In/D0vt2Z4E=").
+                               WithHeader("X-HMAC-ACCESS-KEY", "papa").
+                               WithHeader("X-HMAC-ALGORITHM", "hmac-sha256").
+                               WithHeader("X-HMAC-SIGNED-HEADERS", 
"User-Agent;X-Foo").
+                               WithHeader("User-Agent", "curl/7.29.0").
+                               Expect().
+                               Status(http.StatusNotFound).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg, "404 Route Not 
Found")
+               })
 
-       ginkgo.It("ApisixRoute with jwtAuth consumer", func() {
-               ac := `
+               ginkgo.It("ApisixRoute with jwtAuth consumer", func() {
+                       ac := `
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixConsumer
 metadata:
@@ -850,20 +804,20 @@ spec:
       value:
         key: foo-key
 `
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating jwtAuth ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixConsumer(ac), "creating jwtAuth ApisixConsumer")
 
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
 
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               jwtAuth, _ := 
grs[0].Plugins["jwt-auth"].(map[string]interface{})
-               assert.Equal(ginkgo.GinkgoT(), jwtAuth["key"], "foo-key")
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       jwtAuth, _ := 
grs[0].Plugins["jwt-auth"].(map[string]interface{})
+                       assert.Equal(ginkgo.GinkgoT(), jwtAuth["key"], 
"foo-key")
 
-               adminSvc, adminPort := s.ApisixAdminServiceAndPort()
-               ar1 := fmt.Sprintf(`
+                       adminSvc, adminPort := s.ApisixAdminServiceAndPort()
+                       ar1 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -881,12 +835,12 @@ spec:
     - name: public-api
       enable: true
 `, adminSvc, adminPort)
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar1), 
"creating ApisixRoute")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar1), "creating ApisixRoute")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
 
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar2 := fmt.Sprintf(`
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar2 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -906,35 +860,35 @@ spec:
      enable: true
      type: jwtAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar2), 
"Creating ApisixRoute with jwtAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(2), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing JWT token in 
request")
-
-               token := s.NewAPISIXClient().GET("/apisix/plugin/jwt/sign").
-                       WithQuery("key", "foo-key").
-                       Expect().
-                       Status(http.StatusOK).
-                       Body().
-                       NotEmpty().
-                       Raw()
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", string(token)).
-                       Expect().
-                       Status(http.StatusOK)
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar2), "Creating ApisixRoute with jwtAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(2), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing JWT 
token in request")
+
+                       token := 
s.NewAPISIXClient().GET("/apisix/plugin/jwt/sign").
+                               WithQuery("key", "foo-key").
+                               Expect().
+                               Status(http.StatusOK).
+                               Body().
+                               NotEmpty().
+                               Raw()
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", string(token)).
+                               Expect().
+                               Status(http.StatusOK)
+               })
 
-       ginkgo.It("ApisixRoute with jwtAuth consumer using secret", func() {
-               secret := `
+               ginkgo.It("ApisixRoute with jwtAuth consumer using secret", 
func() {
+                       secret := `
 apiVersion: v1
 kind: Secret
 metadata:
@@ -942,9 +896,9 @@ metadata:
 data:
   key: Zm9vLWtleQ==
 `
-               assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating jwtAuth secret for 
ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(secret), "creating jwtAuth secret for 
ApisixConsumer")
 
-               ac := `
+                       ac := `
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixConsumer
 metadata:
@@ -955,20 +909,20 @@ spec:
       secretRef:
         name: jwt
 `
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ac), 
"creating jwtAuth ApisixConsumer")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixConsumer(ac), "creating jwtAuth ApisixConsumer")
 
-               // Wait until the ApisixConsumer create event was delivered.
-               time.Sleep(6 * time.Second)
+                       // Wait until the ApisixConsumer create event was 
delivered.
+                       time.Sleep(6 * time.Second)
 
-               grs, err := s.ListApisixConsumers()
-               assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
-               assert.Len(ginkgo.GinkgoT(), grs, 1)
-               assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
-               jwtAuth, _ := 
grs[0].Plugins["jwt-auth"].(map[string]interface{})
-               assert.Equal(ginkgo.GinkgoT(), jwtAuth["key"], "foo-key")
+                       grs, err := s.ListApisixConsumers()
+                       assert.Nil(ginkgo.GinkgoT(), err, "listing consumer")
+                       assert.Len(ginkgo.GinkgoT(), grs, 1)
+                       assert.Len(ginkgo.GinkgoT(), grs[0].Plugins, 1)
+                       jwtAuth, _ := 
grs[0].Plugins["jwt-auth"].(map[string]interface{})
+                       assert.Equal(ginkgo.GinkgoT(), jwtAuth["key"], 
"foo-key")
 
-               adminSvc, adminPort := s.ApisixAdminServiceAndPort()
-               ar1 := fmt.Sprintf(`
+                       adminSvc, adminPort := s.ApisixAdminServiceAndPort()
+                       ar1 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -986,12 +940,12 @@ spec:
     - name: public-api
       enable: true
 `, adminSvc, adminPort)
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar1), 
"creating ApisixRoute")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar1), "creating ApisixRoute")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
 
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar2 := fmt.Sprintf(`
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar2 := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -1011,36 +965,36 @@ spec:
      enable: true
      type: jwtAuth
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar2), 
"Creating ApisixRoute with jwtAuth")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(2), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
-
-               msg401 := s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       Expect().
-                       Status(http.StatusUnauthorized).
-                       Body().
-                       Raw()
-               assert.Contains(ginkgo.GinkgoT(), msg401, "Missing JWT token in 
request")
-
-               token := s.NewAPISIXClient().GET("/apisix/plugin/jwt/sign").
-                       WithQuery("key", "foo-key").
-                       Expect().
-                       Status(http.StatusOK).
-                       Body().
-                       NotEmpty().
-                       Raw()
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("Authorization", string(token)).
-                       Expect().
-                       Status(http.StatusOK)
-       })
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar2), "Creating ApisixRoute with jwtAuth")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(2), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(2), "Checking number of upstreams")
+
+                       msg401 := s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               Expect().
+                               Status(http.StatusUnauthorized).
+                               Body().
+                               Raw()
+                       assert.Contains(ginkgo.GinkgoT(), msg401, "Missing JWT 
token in request")
+
+                       token := 
s.NewAPISIXClient().GET("/apisix/plugin/jwt/sign").
+                               WithQuery("key", "foo-key").
+                               Expect().
+                               Status(http.StatusOK).
+                               Body().
+                               NotEmpty().
+                               Raw()
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("Authorization", string(token)).
+                               Expect().
+                               Status(http.StatusOK)
+               })
 
-       ginkgo.It("ApisixRoute without authentication", func() {
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
-               ar := fmt.Sprintf(`
+               ginkgo.It("ApisixRoute without authentication", func() {
+                       backendSvc, backendPorts := s.DefaultHTTPBackend()
+                       ar := fmt.Sprintf(`
 apiVersion: apisix.apache.org/v2beta3
 kind: ApisixRoute
 metadata:
@@ -1065,14 +1019,22 @@ spec:
    authentication:
      enable: false
 `, backendSvc, backendPorts[0])
-               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ar), 
"creating ApisixRoute without authentication")
-               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1), 
"Checking number of routes")
-               assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
-
-               _ = s.NewAPISIXClient().GET("/ip").
-                       WithHeader("Host", "httpbin.org").
-                       WithHeader("X-Foo", "bar").
-                       Expect().
-                       Status(http.StatusOK)
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateResourceFromString(ar), "creating ApisixRoute without authentication")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixRoutesCreated(1), "Checking number of routes")
+                       assert.Nil(ginkgo.GinkgoT(), 
s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstreams")
+
+                       _ = s.NewAPISIXClient().GET("/ip").
+                               WithHeader("Host", "httpbin.org").
+                               WithHeader("X-Foo", "bar").
+                               Expect().
+                               Status(http.StatusOK)
+               })
+       }
+
+       ginkgo.Describe("suite-features: scaffold v2beta3", func() {
+               suites(scaffold.NewDefaultScaffold)
+       })
+       ginkgo.Describe("suite-features: scaffold v2", func() {
+               suites(scaffold.NewDefaultV2Scaffold)
        })
 })

Reply via email to