From 8062625d753ac634872b50b894013f57ee4575da Mon Sep 17 00:00:00 2001 From: Xunzhuo Date: Tue, 19 Sep 2023 11:53:06 +0800 Subject: [PATCH] feat: add features to conformance and do some refactors (#532) Signed-off-by: bitliu --- .github/workflows/build-and-test.yaml | 6 +- plugins/wasm-cpp/README_EN.md | 13 +- ...p-basic-auth.go => cpp-wasm-basic-auth.go} | 5 +- ...sic-auth.yaml => cpp-wasm-basic-auth.yaml} | 0 .../{cpp-key_auth.go => cpp-wasm-key-auth.go} | 5 +- ...p-key_auth.yaml => cpp-wasm-key-auth.yaml} | 0 ...est_block.go => cpp-wasm-request-block.go} | 5 +- ...block.yaml => cpp-wasm-request-block.yaml} | 0 .../{basic-auth.go => go-wasm-basic-auth.go} | 5 +- ...asic-auth.yaml => go-wasm-basic-auth.yaml} | 0 .../{jwt-auth.go => go-wasm-jwt-auth.go} | 5 +- .../{jwt-auth.yaml => go-wasm-jwt-auth.yaml} | 0 ...uest-block.go => go-wasm-request-block.go} | 5 +- ...-block.yaml => go-wasm-request-block.yaml} | 0 .../conformance/tests/httproute-app-root.go | 3 +- ...te-canary-header-with-customized-header.go | 3 +- .../tests/httproute-canary-header.go | 3 +- .../tests/httproute-canary-weight.go | 3 +- .../tests/httproute-consul-httpbin.go | 3 +- .../tests/httproute-downstream-encryption.go | 3 +- .../tests/httproute-enable-cors.go | 3 +- .../tests/httproute-enable-ignore-case.go | 3 +- .../tests/httproute-eureka-registry.go | 3 +- .../tests/httproute-force-redirect-https.go | 3 +- .../tests/httproute-full-path-regex.go | 3 +- .../httproute-hostname-same-namespace.go | 3 +- .../conformance/tests/httproute-http2rpc.go | 5 +- .../tests/httproute-match-headers.go | 3 +- .../tests/httproute-match-methods.go | 3 +- .../conformance/tests/httproute-match-path.go | 3 +- .../tests/httproute-match-query-params.go | 3 +- .../httproute-permanent-redirect-code.go | 3 +- .../tests/httproute-permanent-redirect.go | 3 +- .../tests/httproute-redirect-as-https.go | 3 +- .../tests/httproute-request-header-control.go | 3 +- .../tests/httproute-rewrite-host.go | 3 +- .../tests/httproute-rewrite-path.go | 3 +- .../tests/httproute-same-host-and-path.go | 3 +- .../tests/httproute-simple-same-namespace.go | 3 +- .../tests/httproute-temporal-redirect.go | 3 +- .../tests/httproute-whitelist-source-range.go | 3 +- .../conformance/tests/{main.go => tests.go} | 9 +- test/e2e/conformance/utils/flags/flags.go | 3 + .../e2e/conformance/utils/kubernetes/apply.go | 14 +-- .../conformance/utils/kubernetes/helpers.go | 18 +-- test/e2e/conformance/utils/suite/features.go | 45 +++++++ test/e2e/conformance/utils/suite/suite.go | 117 +++++++++++++----- test/e2e/e2e_test.go | 66 ++-------- tools/hack/build-wasm-plugins.sh | 18 ++- 49 files changed, 260 insertions(+), 162 deletions(-) rename test/e2e/conformance/tests/{cpp-basic-auth.go => cpp-wasm-basic-auth.go} (96%) rename test/e2e/conformance/tests/{cpp-basic-auth.yaml => cpp-wasm-basic-auth.yaml} (100%) rename test/e2e/conformance/tests/{cpp-key_auth.go => cpp-wasm-key-auth.go} (93%) rename test/e2e/conformance/tests/{cpp-key_auth.yaml => cpp-wasm-key-auth.yaml} (100%) rename test/e2e/conformance/tests/{cpp-request_block.go => cpp-wasm-request-block.go} (91%) rename test/e2e/conformance/tests/{cpp-request_block.yaml => cpp-wasm-request-block.yaml} (100%) rename test/e2e/conformance/tests/{basic-auth.go => go-wasm-basic-auth.go} (96%) rename test/e2e/conformance/tests/{basic-auth.yaml => go-wasm-basic-auth.yaml} (100%) rename test/e2e/conformance/tests/{jwt-auth.go => go-wasm-jwt-auth.go} (91%) rename test/e2e/conformance/tests/{jwt-auth.yaml => go-wasm-jwt-auth.yaml} (100%) rename test/e2e/conformance/tests/{request-block.go => go-wasm-request-block.go} (91%) rename test/e2e/conformance/tests/{request-block.yaml => go-wasm-request-block.yaml} (100%) rename test/e2e/conformance/tests/{main.go => tests.go} (73%) create mode 100644 test/e2e/conformance/utils/suite/features.go diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index ca8af647a..a595138e5 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -147,6 +147,10 @@ jobs: higress-wasmplugin-test: runs-on: ubuntu-latest needs: [build] + strategy: + matrix: + # TODO(Xunzhuo): Enable C WASM Filters in CI + wasmPluginType: [ GO ] steps: - uses: actions/checkout@v3 @@ -179,7 +183,7 @@ jobs: - run: git stash # restore patch - name: "Run Ingress WasmPlugins Tests" - run: GOPROXY="https://proxy.golang.org,direct" make higress-wasmplugin-test + run: GOPROXY="https://proxy.golang.org,direct" PLUGIN_TYPE=${{ matrix.wasmPluginType }} make higress-wasmplugin-test publish: runs-on: ubuntu-latest diff --git a/plugins/wasm-cpp/README_EN.md b/plugins/wasm-cpp/README_EN.md index 2aa863944..9039ca7c9 100644 --- a/plugins/wasm-cpp/README_EN.md +++ b/plugins/wasm-cpp/README_EN.md @@ -13,6 +13,7 @@ $ PLUGIN_NAME=request_block make build
Output

+
 DOCKER_BUILDKIT=1 docker build --build-arg PLUGIN_NAME=request_block \
                                     -t request_block:20230721-141120-aa17e95 \
                                     --output extensions/request_block \
@@ -106,16 +107,17 @@ spec:
 
 The rules will be matched in the order of configuration. If one match is found, it will stop, and the matching configuration will take effect.
 
-
 ## E2E test
 
 When you complete a GO plug-in function, you can create associated e2e test cases at the same time, and complete the test verification of the plug-in function locally.
 
 ### step1. write test cases
+
 In the directory of `./ test/e2e/conformance/tests/`, add the xxx.yaml file and xxx.go file. Such as test for `request-block` wasm-plugin,
 
 ./test/e2e/conformance/tests/request-block.yaml
-```
+
+``` yaml
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 ...
@@ -126,16 +128,18 @@ spec:
     - "swagger.html"
   url: file:///opt/plugins/wasm-go/extensions/request-block/plugin.wasm
 ```
+
 `Above of the url, the name of after extensions indicates the name of the folder where the plug-in resides.`
 
 ./test/e2e/conformance/tests/request-block.go
 
 ### step2. add test cases
+
 Add the test cases written above to the e2e test list,
 
 ./test/e2e/e2e_test.go
 
-```
+```go
 ...
 cSuite.Setup(t)
 	var higressTests []suite.ConformanceTest
@@ -160,8 +164,9 @@ cSuite.Setup(t)
 ```
 
 ### step3. compile and run test cases
+
 Considering that building wasm locally is time-consuming, we support building only the plug-ins that need to be tested (at the same time, you can also temporarily modify the list of test cases in the second small step above, and only execute your newly written cases).
 
 ```bash
 PLUGIN_TYPE=CPP PLUGIN_NAME=request_block make higress-wasmplugin-test
-```
\ No newline at end of file
+```
diff --git a/test/e2e/conformance/tests/cpp-basic-auth.go b/test/e2e/conformance/tests/cpp-wasm-basic-auth.go
similarity index 96%
rename from test/e2e/conformance/tests/cpp-basic-auth.go
rename to test/e2e/conformance/tests/cpp-wasm-basic-auth.go
index c7dc44490..75d9753f6 100644
--- a/test/e2e/conformance/tests/cpp-basic-auth.go
+++ b/test/e2e/conformance/tests/cpp-wasm-basic-auth.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, CPPWasmPluginsBasicAuth)
+	Register(CPPWasmPluginsBasicAuth)
 }
 
 var CPPWasmPluginsBasicAuth = suite.ConformanceTest{
 	ShortName:   "CPPWasmPluginsBasicAuth",
 	Description: "The Ingress in the higress-conformance-infra namespace test the CPP basic-auth WASM plugin.",
-	Manifests:   []string{"tests/cpp-basic-auth.yaml"},
+	Manifests:   []string{"tests/cpp-wasm-basic-auth.yaml"},
+	Features:    []suite.SupportedFeature{suite.WASMCPPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/cpp-basic-auth.yaml b/test/e2e/conformance/tests/cpp-wasm-basic-auth.yaml
similarity index 100%
rename from test/e2e/conformance/tests/cpp-basic-auth.yaml
rename to test/e2e/conformance/tests/cpp-wasm-basic-auth.yaml
diff --git a/test/e2e/conformance/tests/cpp-key_auth.go b/test/e2e/conformance/tests/cpp-wasm-key-auth.go
similarity index 93%
rename from test/e2e/conformance/tests/cpp-key_auth.go
rename to test/e2e/conformance/tests/cpp-wasm-key-auth.go
index bbcaa8cd2..1aeaa36dc 100644
--- a/test/e2e/conformance/tests/cpp-key_auth.go
+++ b/test/e2e/conformance/tests/cpp-wasm-key-auth.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, CPPWasmPluginsKeyAuth)
+	Register(CPPWasmPluginsKeyAuth)
 }
 
 var CPPWasmPluginsKeyAuth = suite.ConformanceTest{
 	ShortName:   "CPPWasmPluginsKeyAuth",
 	Description: "The Ingress in the higress-conformance-infra namespace test the CPP key_auth wasmplugins.",
-	Manifests:   []string{"tests/cpp-key_auth.yaml"},
+	Manifests:   []string{"tests/cpp-wasm-key-auth.yaml"},
+	Features:    []suite.SupportedFeature{suite.WASMCPPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/cpp-key_auth.yaml b/test/e2e/conformance/tests/cpp-wasm-key-auth.yaml
similarity index 100%
rename from test/e2e/conformance/tests/cpp-key_auth.yaml
rename to test/e2e/conformance/tests/cpp-wasm-key-auth.yaml
diff --git a/test/e2e/conformance/tests/cpp-request_block.go b/test/e2e/conformance/tests/cpp-wasm-request-block.go
similarity index 91%
rename from test/e2e/conformance/tests/cpp-request_block.go
rename to test/e2e/conformance/tests/cpp-wasm-request-block.go
index f9aeb8734..e00eba30f 100644
--- a/test/e2e/conformance/tests/cpp-request_block.go
+++ b/test/e2e/conformance/tests/cpp-wasm-request-block.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, CPPWasmPluginsRequestBlock)
+	Register(CPPWasmPluginsRequestBlock)
 }
 
 var CPPWasmPluginsRequestBlock = suite.ConformanceTest{
 	ShortName:   "CPPWasmPluginsRequestBlock",
 	Description: "The Ingress in the higress-conformance-infra namespace test the cpp request-block wasmplugins.",
-	Manifests:   []string{"tests/cpp-request_block.yaml"},
+	Manifests:   []string{"tests/cpp-wasm-request-block.yaml"},
+	Features:    []suite.SupportedFeature{suite.WASMCPPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/cpp-request_block.yaml b/test/e2e/conformance/tests/cpp-wasm-request-block.yaml
similarity index 100%
rename from test/e2e/conformance/tests/cpp-request_block.yaml
rename to test/e2e/conformance/tests/cpp-wasm-request-block.yaml
diff --git a/test/e2e/conformance/tests/basic-auth.go b/test/e2e/conformance/tests/go-wasm-basic-auth.go
similarity index 96%
rename from test/e2e/conformance/tests/basic-auth.go
rename to test/e2e/conformance/tests/go-wasm-basic-auth.go
index 7ee86d097..3a67f6176 100644
--- a/test/e2e/conformance/tests/basic-auth.go
+++ b/test/e2e/conformance/tests/go-wasm-basic-auth.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, WasmPluginsBasicAuth)
+	Register(WasmPluginsBasicAuth)
 }
 
 var WasmPluginsBasicAuth = suite.ConformanceTest{
 	ShortName:   "WasmPluginsBasicAuth",
 	Description: "The Ingress in the higress-conformance-infra namespace test the basic-auth WASM plugin.",
-	Manifests:   []string{"tests/basic-auth.yaml"},
+	Manifests:   []string{"tests/go-wasm-basic-auth.yaml"},
+	Features:    []suite.SupportedFeature{suite.WASMGoConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/basic-auth.yaml b/test/e2e/conformance/tests/go-wasm-basic-auth.yaml
similarity index 100%
rename from test/e2e/conformance/tests/basic-auth.yaml
rename to test/e2e/conformance/tests/go-wasm-basic-auth.yaml
diff --git a/test/e2e/conformance/tests/jwt-auth.go b/test/e2e/conformance/tests/go-wasm-jwt-auth.go
similarity index 91%
rename from test/e2e/conformance/tests/jwt-auth.go
rename to test/e2e/conformance/tests/go-wasm-jwt-auth.go
index fa98134f5..87af20deb 100644
--- a/test/e2e/conformance/tests/jwt-auth.go
+++ b/test/e2e/conformance/tests/go-wasm-jwt-auth.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, WasmPluginsJwtAuth)
+	Register(WasmPluginsJwtAuth)
 }
 
 var WasmPluginsJwtAuth = suite.ConformanceTest{
 	ShortName:   "WasmPluginsJwtAuth",
 	Description: "The Ingress in the higress-conformance-infra namespace test the jwt-auth wasmplugins.",
-	Manifests:   []string{"tests/jwt-auth.yaml"},
+	Manifests:   []string{"tests/go-wasm-jwt-auth.yaml"},
+	Features:    []suite.SupportedFeature{suite.WASMGoConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/jwt-auth.yaml b/test/e2e/conformance/tests/go-wasm-jwt-auth.yaml
similarity index 100%
rename from test/e2e/conformance/tests/jwt-auth.yaml
rename to test/e2e/conformance/tests/go-wasm-jwt-auth.yaml
diff --git a/test/e2e/conformance/tests/request-block.go b/test/e2e/conformance/tests/go-wasm-request-block.go
similarity index 91%
rename from test/e2e/conformance/tests/request-block.go
rename to test/e2e/conformance/tests/go-wasm-request-block.go
index 52e9e5e2b..2501d8ee4 100644
--- a/test/e2e/conformance/tests/request-block.go
+++ b/test/e2e/conformance/tests/go-wasm-request-block.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, WasmPluginsRequestBlock)
+	Register(WasmPluginsRequestBlock)
 }
 
 var WasmPluginsRequestBlock = suite.ConformanceTest{
 	ShortName:   "WasmPluginsRequestBlock",
 	Description: "The Ingress in the higress-conformance-infra namespace test the request-block wasmplugins.",
-	Manifests:   []string{"tests/request-block.yaml"},
+	Manifests:   []string{"tests/go-wasm-request-block.yaml"},
+	Features:    []suite.SupportedFeature{suite.WASMGoConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/request-block.yaml b/test/e2e/conformance/tests/go-wasm-request-block.yaml
similarity index 100%
rename from test/e2e/conformance/tests/request-block.yaml
rename to test/e2e/conformance/tests/go-wasm-request-block.yaml
diff --git a/test/e2e/conformance/tests/httproute-app-root.go b/test/e2e/conformance/tests/httproute-app-root.go
index 30ae6ab07..e7dbb4b01 100644
--- a/test/e2e/conformance/tests/httproute-app-root.go
+++ b/test/e2e/conformance/tests/httproute-app-root.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteAppRoot)
+	Register(HTTPRouteAppRoot)
 }
 
 var HTTPRouteAppRoot = suite.ConformanceTest{
 	ShortName:   "HTTPRouteAppRoot",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the app root.",
 	Manifests:   []string{"tests/httproute-app-root.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-canary-header-with-customized-header.go b/test/e2e/conformance/tests/httproute-canary-header-with-customized-header.go
index 48444f390..e09f7e160 100644
--- a/test/e2e/conformance/tests/httproute-canary-header-with-customized-header.go
+++ b/test/e2e/conformance/tests/httproute-canary-header-with-customized-header.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteCanaryHeaderWithCustomizedHeader)
+	Register(HTTPRouteCanaryHeaderWithCustomizedHeader)
 }
 
 var HTTPRouteCanaryHeaderWithCustomizedHeader = suite.ConformanceTest{
 	ShortName:   "HTTPRouteCanaryHeaderWithCustomizedHeader",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the canary header traffic split when same host and path but different header",
 	Manifests:   []string{"tests/httproute-canary-header-with-customized-header.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-canary-header.go b/test/e2e/conformance/tests/httproute-canary-header.go
index a47e03f72..9b952f051 100644
--- a/test/e2e/conformance/tests/httproute-canary-header.go
+++ b/test/e2e/conformance/tests/httproute-canary-header.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteCanaryHeader)
+	Register(HTTPRouteCanaryHeader)
 }
 
 var HTTPRouteCanaryHeader = suite.ConformanceTest{
 	ShortName:   "HTTPRouteCanaryHeader",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the canary header traffic split.",
 	Manifests:   []string{"tests/httproute-canary-header.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-canary-weight.go b/test/e2e/conformance/tests/httproute-canary-weight.go
index 2bcdd9920..6768b3a61 100644
--- a/test/e2e/conformance/tests/httproute-canary-weight.go
+++ b/test/e2e/conformance/tests/httproute-canary-weight.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteCanaryWeight)
+	Register(HTTPRouteCanaryWeight)
 }
 
 var HTTPRouteCanaryWeight = suite.ConformanceTest{
 	ShortName:   "HTTPRouteCanaryWeight",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the canary weight traffic split.",
 	Manifests:   []string{"tests/httproute-canary-weight.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			// test if the weight is 0
diff --git a/test/e2e/conformance/tests/httproute-consul-httpbin.go b/test/e2e/conformance/tests/httproute-consul-httpbin.go
index 2c283fdaa..6f0e87cfc 100644
--- a/test/e2e/conformance/tests/httproute-consul-httpbin.go
+++ b/test/e2e/conformance/tests/httproute-consul-httpbin.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteConsulHttpBin)
+	Register(HTTPRouteConsulHttpBin)
 }
 
 var HTTPRouteConsulHttpBin = suite.ConformanceTest{
 	ShortName:   "HTTPRouteConsulHttpBin",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the consul service registry.",
 	Manifests:   []string{"tests/httproute-consul-httpbin.yaml"},
+	Features:    []suite.SupportedFeature{suite.ConsulConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-downstream-encryption.go b/test/e2e/conformance/tests/httproute-downstream-encryption.go
index f7936f1d4..4695c4d38 100644
--- a/test/e2e/conformance/tests/httproute-downstream-encryption.go
+++ b/test/e2e/conformance/tests/httproute-downstream-encryption.go
@@ -27,13 +27,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteDownstreamEncryption)
+	Register(HTTPRouteDownstreamEncryption)
 }
 
 var HTTPRouteDownstreamEncryption = suite.ConformanceTest{
 	ShortName:   "HTTPRouteDownstreamEncryption",
 	Description: "A single Ingress in the higress-conformance-infra namespace for downstream encryption.",
 	Manifests:   []string{"tests/httproute-downstream-encryption.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		// Prepare certificates and secrets for testcases
 		caCertOut, _, caCert, caKey := cert.MustGenerateCaCert(t)
diff --git a/test/e2e/conformance/tests/httproute-enable-cors.go b/test/e2e/conformance/tests/httproute-enable-cors.go
index 028d443fa..3c3a9daab 100644
--- a/test/e2e/conformance/tests/httproute-enable-cors.go
+++ b/test/e2e/conformance/tests/httproute-enable-cors.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteEnableCors)
+	Register(HTTPRouteEnableCors)
 }
 
 var HTTPRouteEnableCors = suite.ConformanceTest{
 	ShortName:   "HTTPRouteEnableCors",
 	Description: "A single Ingress in the higress-conformance-infra namespace demonstrates enable cors ability.",
 	Manifests:   []string{"tests/httproute-enable-cors.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-enable-ignore-case.go b/test/e2e/conformance/tests/httproute-enable-ignore-case.go
index 4b0e1d62c..bda8359f6 100644
--- a/test/e2e/conformance/tests/httproute-enable-ignore-case.go
+++ b/test/e2e/conformance/tests/httproute-enable-ignore-case.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteEnableIgnoreCase)
+	Register(HTTPRouteEnableIgnoreCase)
 }
 
 var HTTPRouteEnableIgnoreCase = suite.ConformanceTest{
 	ShortName:   "HTTPRouteEnableIgnoreCase",
 	Description: "A Ingress in the higress-conformance-infra namespace that ignores URI case in HTTP match.",
 	Manifests:   []string{"tests/httproute-enable-ignore-case.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-eureka-registry.go b/test/e2e/conformance/tests/httproute-eureka-registry.go
index ef15d88cb..8409b8c56 100644
--- a/test/e2e/conformance/tests/httproute-eureka-registry.go
+++ b/test/e2e/conformance/tests/httproute-eureka-registry.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteEurekaRegistry)
+	Register(HTTPRouteEurekaRegistry)
 }
 
 var HTTPRouteEurekaRegistry = suite.ConformanceTest{
 	ShortName:   "HTTPRouteEurekaRegistry",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the eureka service registry.",
 	Manifests:   []string{"tests/httproute-eureka-registry.yaml"},
+	Features:    []suite.SupportedFeature{suite.EurekaConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-force-redirect-https.go b/test/e2e/conformance/tests/httproute-force-redirect-https.go
index 7e25948e7..ed5e6f085 100644
--- a/test/e2e/conformance/tests/httproute-force-redirect-https.go
+++ b/test/e2e/conformance/tests/httproute-force-redirect-https.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HttpForceRedirectHttps)
+	Register(HttpForceRedirectHttps)
 }
 
 var HttpForceRedirectHttps = suite.ConformanceTest{
 	ShortName:   "HttpForceRedirectHttps",
 	Description: " The ingress in the higress-conformance-infra namespace enforces server-side HTTPS with forced redirection.",
 	Manifests:   []string{"tests/httproute-force-redirect-https.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-full-path-regex.go b/test/e2e/conformance/tests/httproute-full-path-regex.go
index 26948c70d..b36b3fe3b 100644
--- a/test/e2e/conformance/tests/httproute-full-path-regex.go
+++ b/test/e2e/conformance/tests/httproute-full-path-regex.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteFullPathRegex)
+	Register(HTTPRouteFullPathRegex)
 }
 
 var HTTPRouteFullPathRegex = suite.ConformanceTest{
 	ShortName:   "HTTPRouteFullPathRegex",
 	Description: "test for 'higress.io/full-path-regex' annotation",
 	Manifests:   []string{"tests/httproute-full-path-regex.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testCases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-hostname-same-namespace.go b/test/e2e/conformance/tests/httproute-hostname-same-namespace.go
index b87106178..de8a2d989 100644
--- a/test/e2e/conformance/tests/httproute-hostname-same-namespace.go
+++ b/test/e2e/conformance/tests/httproute-hostname-same-namespace.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteHostNameSameNamespace)
+	Register(HTTPRouteHostNameSameNamespace)
 }
 
 var HTTPRouteHostNameSameNamespace = suite.ConformanceTest{
 	ShortName:   "HTTPRouteHostNameSameNamespace",
 	Description: "A Ingress in the higress-conformance-infra namespace demonstrates host match ability.",
 	Manifests:   []string{"tests/httproute-hostname-same-namespace.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-http2rpc.go b/test/e2e/conformance/tests/httproute-http2rpc.go
index a0a3e13a5..f34a0d8cc 100644
--- a/test/e2e/conformance/tests/httproute-http2rpc.go
+++ b/test/e2e/conformance/tests/httproute-http2rpc.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteHttp2Rpc)
+	Register(HTTPRouteHttp2Rpc)
 }
 
 var HTTPRouteHttp2Rpc = suite.ConformanceTest{
 	ShortName:   "HTTPRouteHttp2Rpc",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the http2rpc.",
 	Manifests:   []string{"tests/httproute-http2rpc.yaml"},
+	Features:    []suite.SupportedFeature{suite.DubboConformanceFeature, suite.NacosConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
@@ -47,7 +48,7 @@ var HTTPRouteHttp2Rpc = suite.ConformanceTest{
 				},
 			},
 		}
-		t.Run("HTTPRoute app root", func(t *testing.T) {
+		t.Run("HTTPRoute uses HTTP to RPC", func(t *testing.T) {
 			for _, testcase := range testcases {
 				http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, suite.GatewayAddress, testcase)
 			}
diff --git a/test/e2e/conformance/tests/httproute-match-headers.go b/test/e2e/conformance/tests/httproute-match-headers.go
index 00160e11e..3be9ae370 100644
--- a/test/e2e/conformance/tests/httproute-match-headers.go
+++ b/test/e2e/conformance/tests/httproute-match-headers.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteMatchHeaders)
+	Register(HTTPRouteMatchHeaders)
 }
 
 var HTTPRouteMatchHeaders = suite.ConformanceTest{
 	ShortName:   "HTTPRouteMatchHeaders",
 	Description: "A single Ingress in the higress-conformance-infra namespace uses the match headers.",
 	Manifests:   []string{"tests/httproute-match-headers.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-match-methods.go b/test/e2e/conformance/tests/httproute-match-methods.go
index 7c0d03a21..b295163bf 100644
--- a/test/e2e/conformance/tests/httproute-match-methods.go
+++ b/test/e2e/conformance/tests/httproute-match-methods.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteMatchMethods)
+	Register(HTTPRouteMatchMethods)
 }
 
 var HTTPRouteMatchMethods = suite.ConformanceTest{
 	ShortName:   "HTTPRouteMatchMethods",
 	Description: "A single Ingress in the higress-conformance-infra namespace uses the match methods.",
 	Manifests:   []string{"tests/httproute-match-methods.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-match-path.go b/test/e2e/conformance/tests/httproute-match-path.go
index 3ae943659..9e2fe53a3 100644
--- a/test/e2e/conformance/tests/httproute-match-path.go
+++ b/test/e2e/conformance/tests/httproute-match-path.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteMatchPath)
+	Register(HTTPRouteMatchPath)
 }
 
 var HTTPRouteMatchPath = suite.ConformanceTest{
 	ShortName:   "HTTPRouteMatchPath",
 	Description: "A Ingress in the higress-conformance-infra namespace that match different path.",
 	Manifests:   []string{"tests/httproute-match-path.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-match-query-params.go b/test/e2e/conformance/tests/httproute-match-query-params.go
index 6910f0b6b..041868f1c 100644
--- a/test/e2e/conformance/tests/httproute-match-query-params.go
+++ b/test/e2e/conformance/tests/httproute-match-query-params.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteMatchQueryParams)
+	Register(HTTPRouteMatchQueryParams)
 }
 
 var HTTPRouteMatchQueryParams = suite.ConformanceTest{
 	ShortName:   "HTTPRouteMatchQueryParams",
 	Description: "A single Ingress in the higress-conformance-infra namespace uses the match queryParams.",
 	Manifests:   []string{"tests/httproute-match-query-params.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-permanent-redirect-code.go b/test/e2e/conformance/tests/httproute-permanent-redirect-code.go
index ef92b612f..72e711b5f 100644
--- a/test/e2e/conformance/tests/httproute-permanent-redirect-code.go
+++ b/test/e2e/conformance/tests/httproute-permanent-redirect-code.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRoutePermanentRedirectCode)
+	Register(HTTPRoutePermanentRedirectCode)
 }
 
 var HTTPRoutePermanentRedirectCode = suite.ConformanceTest{
 	ShortName:   "HTTPRoutePermanentRedirectCode",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the permanent redirect code header.",
 	Manifests:   []string{"tests/httproute-permanent-redirect-code.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-permanent-redirect.go b/test/e2e/conformance/tests/httproute-permanent-redirect.go
index 11b49364d..c535b6df7 100644
--- a/test/e2e/conformance/tests/httproute-permanent-redirect.go
+++ b/test/e2e/conformance/tests/httproute-permanent-redirect.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRoutePermanentRedirect)
+	Register(HTTPRoutePermanentRedirect)
 }
 
 var HTTPRoutePermanentRedirect = suite.ConformanceTest{
 	ShortName:   "HTTPRoutePermanentRedirect",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the permanent redirect header.",
 	Manifests:   []string{"tests/httproute-permanent-redirect.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-redirect-as-https.go b/test/e2e/conformance/tests/httproute-redirect-as-https.go
index 6b15eb3e0..bf2404aaa 100644
--- a/test/e2e/conformance/tests/httproute-redirect-as-https.go
+++ b/test/e2e/conformance/tests/httproute-redirect-as-https.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HttpRedirectAsHttps)
+	Register(HttpRedirectAsHttps)
 }
 
 var HttpRedirectAsHttps = suite.ConformanceTest{
 	ShortName:   "HttpRedirectAsHttps",
 	Description: "The Ingress in the higress-conformance-infra namespace Server-side HTTPS enforcement through redirect.",
 	Manifests:   []string{"tests/httproute-redirct-as-https.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-request-header-control.go b/test/e2e/conformance/tests/httproute-request-header-control.go
index 31baefd2c..d3f5788a8 100644
--- a/test/e2e/conformance/tests/httproute-request-header-control.go
+++ b/test/e2e/conformance/tests/httproute-request-header-control.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteRequestHeaderControl)
+	Register(HTTPRouteRequestHeaderControl)
 }
 
 var HTTPRouteRequestHeaderControl = suite.ConformanceTest{
 	ShortName:   "HTTPRouteRequestHeaderControl",
 	Description: "A single Ingress in the higress-conformance-infra namespace controls the request header.",
 	Manifests:   []string{"tests/httproute-request-header-control.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-rewrite-host.go b/test/e2e/conformance/tests/httproute-rewrite-host.go
index a97ccf9f2..8536ce9ab 100644
--- a/test/e2e/conformance/tests/httproute-rewrite-host.go
+++ b/test/e2e/conformance/tests/httproute-rewrite-host.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteRewriteHost)
+	Register(HTTPRouteRewriteHost)
 }
 
 var HTTPRouteRewriteHost = suite.ConformanceTest{
 	ShortName:   "HTTPRouteRewriteHost",
 	Description: "A single Ingress in the higress-conformance-infra namespace uses the rewrite host.",
 	Manifests:   []string{"tests/httproute-rewrite-host.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-rewrite-path.go b/test/e2e/conformance/tests/httproute-rewrite-path.go
index 2ec0145ec..21678b653 100644
--- a/test/e2e/conformance/tests/httproute-rewrite-path.go
+++ b/test/e2e/conformance/tests/httproute-rewrite-path.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteRewritePath)
+	Register(HTTPRouteRewritePath)
 }
 
 var HTTPRouteRewritePath = suite.ConformanceTest{
 	ShortName:   "HTTPRouteRewritePath",
 	Description: "A single Ingress in the higress-conformance-infra namespace uses the rewrite path.",
 	Manifests:   []string{"tests/httproute-rewrite-path.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testCases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-same-host-and-path.go b/test/e2e/conformance/tests/httproute-same-host-and-path.go
index 46a88f125..f01a644d8 100644
--- a/test/e2e/conformance/tests/httproute-same-host-and-path.go
+++ b/test/e2e/conformance/tests/httproute-same-host-and-path.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteSameHostAndPath)
+	Register(HTTPRouteSameHostAndPath)
 }
 
 var HTTPRouteSameHostAndPath = suite.ConformanceTest{
 	ShortName:   "HTTPRouteSameHostAndPath",
 	Description: "A single Ingress in the higress-conformance-infra namespace demonstrates the situation with same path and host",
 	Manifests:   []string{"tests/httproute-same-host-and-path.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-simple-same-namespace.go b/test/e2e/conformance/tests/httproute-simple-same-namespace.go
index 9e4cd50a0..017af776d 100644
--- a/test/e2e/conformance/tests/httproute-simple-same-namespace.go
+++ b/test/e2e/conformance/tests/httproute-simple-same-namespace.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteSimpleSameNamespace)
+	Register(HTTPRouteSimpleSameNamespace)
 }
 
 var HTTPRouteSimpleSameNamespace = suite.ConformanceTest{
 	ShortName:   "HTTPRouteSimpleSameNamespace",
 	Description: "A single Ingress in the higress-conformance-infra namespace demonstrates basic routing ability.",
 	Manifests:   []string{"tests/httproute-simple-same-namespace.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		t.Run("Simple HTTP request should reach infra-backend", func(t *testing.T) {
 			http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, suite.GatewayAddress, http.Assertion{
diff --git a/test/e2e/conformance/tests/httproute-temporal-redirect.go b/test/e2e/conformance/tests/httproute-temporal-redirect.go
index f7236eba0..c77537e00 100644
--- a/test/e2e/conformance/tests/httproute-temporal-redirect.go
+++ b/test/e2e/conformance/tests/httproute-temporal-redirect.go
@@ -23,13 +23,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteTemporalRedirect)
+	Register(HTTPRouteTemporalRedirect)
 }
 
 var HTTPRouteTemporalRedirect = suite.ConformanceTest{
 	ShortName:   "HTTPRouteTemporalRedirect",
 	Description: "The Ingress in the higress-conformance-infra namespace uses the temporal redirect header.",
 	Manifests:   []string{"tests/httproute-temporal-redirect.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/httproute-whitelist-source-range.go b/test/e2e/conformance/tests/httproute-whitelist-source-range.go
index 71b2fab2a..98742acbf 100644
--- a/test/e2e/conformance/tests/httproute-whitelist-source-range.go
+++ b/test/e2e/conformance/tests/httproute-whitelist-source-range.go
@@ -22,13 +22,14 @@ import (
 )
 
 func init() {
-	HigressConformanceTests = append(HigressConformanceTests, HTTPRouteWhitelistSourceRange)
+	Register(HTTPRouteWhitelistSourceRange)
 }
 
 var HTTPRouteWhitelistSourceRange = suite.ConformanceTest{
 	ShortName:   "HTTPRouteWhitelistSourceRange",
 	Description: "A single Ingress in the higress-conformance-infra namespace demonstrates ip access control",
 	Manifests:   []string{"tests/httproute-whitelist-source-range.yaml"},
+	Features:    []suite.SupportedFeature{suite.HTTPConformanceFeature},
 	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
 		testcases := []http.Assertion{
 			{
diff --git a/test/e2e/conformance/tests/main.go b/test/e2e/conformance/tests/tests.go
similarity index 73%
rename from test/e2e/conformance/tests/main.go
rename to test/e2e/conformance/tests/tests.go
index 10a5c79cd..19facdb26 100644
--- a/test/e2e/conformance/tests/main.go
+++ b/test/e2e/conformance/tests/tests.go
@@ -16,4 +16,11 @@ package tests
 
 import "github.com/alibaba/higress/test/e2e/conformance/utils/suite"
 
-var HigressConformanceTests []suite.ConformanceTest
+func Register(testcase suite.ConformanceTest) {
+	if len(testcase.Features) == 0 {
+		panic("must set at least one feature of the test case")
+	}
+	ConformanceTests = append(ConformanceTests, testcase)
+}
+
+var ConformanceTests []suite.ConformanceTest
diff --git a/test/e2e/conformance/utils/flags/flags.go b/test/e2e/conformance/utils/flags/flags.go
index aa0368713..9c2f42567 100644
--- a/test/e2e/conformance/utils/flags/flags.go
+++ b/test/e2e/conformance/utils/flags/flags.go
@@ -23,4 +23,7 @@ var (
 	CleanupBaseResources = flag.Bool("cleanup-base-resources", true, "Whether to cleanup base test resources after the run")
 	SupportedFeatures    = flag.String("supported-features", "", "Supported features included in conformance tests suites")
 	ExemptFeatures       = flag.String("exempt-features", "", "Exempt Features excluded from conformance tests suites")
+	IsWasmPluginTest     = flag.Bool("isWasmPluginTest", false, "Determine if run wasm plugin conformance test")
+	WasmPluginType       = flag.String("wasmPluginType", "GO", "Define wasm plugin type, currently supports GO, CPP")
+	WasmPluginName       = flag.String("wasmPluginName", "", "Define wasm plugin name")
 )
diff --git a/test/e2e/conformance/utils/kubernetes/apply.go b/test/e2e/conformance/utils/kubernetes/apply.go
index f54358a45..a42065ff1 100644
--- a/test/e2e/conformance/utils/kubernetes/apply.go
+++ b/test/e2e/conformance/utils/kubernetes/apply.go
@@ -97,7 +97,7 @@ func (a Applier) MustApplyObjectsWithCleanup(t *testing.T, c client.Client, time
 		ctx, cancel := context.WithTimeout(context.Background(), timeoutConfig.CreateTimeout)
 		defer cancel()
 
-		t.Logf("Creating %s %s", resource.GetName(), resource.GetObjectKind().GroupVersionKind().Kind)
+		t.Logf("🏗 Creating %s %s", resource.GetName(), resource.GetObjectKind().GroupVersionKind().Kind)
 
 		err := c.Create(ctx, resource)
 		if err != nil {
@@ -110,7 +110,7 @@ func (a Applier) MustApplyObjectsWithCleanup(t *testing.T, c client.Client, time
 			t.Cleanup(func() {
 				ctx, cancel = context.WithTimeout(context.Background(), timeoutConfig.DeleteTimeout)
 				defer cancel()
-				t.Logf("Deleting %s %s", resource.GetName(), resource.GetObjectKind().GroupVersionKind().Kind)
+				t.Logf("🚮 Deleting %s %s", resource.GetName(), resource.GetObjectKind().GroupVersionKind().Kind)
 				err = c.Delete(ctx, resource)
 				require.NoErrorf(t, err, "error deleting resource")
 			})
@@ -129,7 +129,7 @@ func (a Applier) MustApplyWithCleanup(t *testing.T, c client.Client, timeoutConf
 
 	resources, err := a.prepareResources(t, decoder)
 	if err != nil {
-		t.Logf("manifest: %s", data.String())
+		t.Logf("🧳 Manifest: %s", data.String())
 		require.NoErrorf(t, err, "error parsing manifest")
 	}
 
@@ -146,7 +146,7 @@ func (a Applier) MustApplyWithCleanup(t *testing.T, c client.Client, timeoutConf
 			if !apierrors.IsNotFound(err) {
 				require.NoErrorf(t, err, "error getting resource")
 			}
-			t.Logf("Creating %s %s", uObj.GetName(), uObj.GetKind())
+			t.Logf("🏗 Creating %s %s", uObj.GetName(), uObj.GetKind())
 			err = c.Create(ctx, uObj)
 			require.NoErrorf(t, err, "error creating resource")
 
@@ -154,7 +154,7 @@ func (a Applier) MustApplyWithCleanup(t *testing.T, c client.Client, timeoutConf
 				t.Cleanup(func() {
 					ctx, cancel = context.WithTimeout(context.Background(), timeoutConfig.DeleteTimeout)
 					defer cancel()
-					t.Logf("Deleting %s %s", uObj.GetName(), uObj.GetKind())
+					t.Logf("🚮 Deleting %s %s", uObj.GetName(), uObj.GetKind())
 					err = c.Delete(ctx, uObj)
 					require.NoErrorf(t, err, "error deleting resource")
 				})
@@ -163,14 +163,14 @@ func (a Applier) MustApplyWithCleanup(t *testing.T, c client.Client, timeoutConf
 		}
 
 		uObj.SetResourceVersion(fetchedObj.GetResourceVersion())
-		t.Logf("Updating %s %s", uObj.GetName(), uObj.GetKind())
+		t.Logf("🏗 Updating %s %s", uObj.GetName(), uObj.GetKind())
 		err = c.Update(ctx, uObj)
 
 		if cleanup {
 			t.Cleanup(func() {
 				ctx, cancel = context.WithTimeout(context.Background(), timeoutConfig.DeleteTimeout)
 				defer cancel()
-				t.Logf("Deleting %s %s", uObj.GetName(), uObj.GetKind())
+				t.Logf("🚮 Deleting %s %s", uObj.GetName(), uObj.GetKind())
 				err = c.Delete(ctx, uObj)
 				require.NoErrorf(t, err, "error deleting resource")
 			})
diff --git a/test/e2e/conformance/utils/kubernetes/helpers.go b/test/e2e/conformance/utils/kubernetes/helpers.go
index bddcb1be0..fd91c9a61 100644
--- a/test/e2e/conformance/utils/kubernetes/helpers.go
+++ b/test/e2e/conformance/utils/kubernetes/helpers.go
@@ -54,7 +54,7 @@ func NamespacesMustBeAccepted(t *testing.T, c client.Client, timeoutConfig confi
 			podList := &v1.PodList{}
 			err := c.List(ctx, podList, client.InNamespace(ns))
 			if err != nil {
-				t.Errorf("Error listing Pods: %v", err)
+				t.Errorf("❌ Error listing Pods: %v", err)
 			}
 			for _, pod := range podList.Items {
 				if !FindPodConditionInList(t, pod.Status.Conditions, "Ready", "True") &&
@@ -64,7 +64,7 @@ func NamespacesMustBeAccepted(t *testing.T, c client.Client, timeoutConfig confi
 				}
 			}
 		}
-		t.Logf("Gateways and Pods in %s namespaces ready", strings.Join(namespaces, ", "))
+		t.Logf("✅ Gateways and Pods in %s namespaces ready", strings.Join(namespaces, ", "))
 		return true, nil
 	})
 	require.NoErrorf(t, waitErr, "error waiting for %s namespaces to be ready", strings.Join(namespaces, ", "))
@@ -72,7 +72,7 @@ func NamespacesMustBeAccepted(t *testing.T, c client.Client, timeoutConfig confi
 
 func ConditionsMatch(t *testing.T, expected, actual []metav1.Condition) bool {
 	if len(actual) < len(expected) {
-		t.Logf("Expected more conditions to be present")
+		t.Logf("⌛️ Expected more conditions to be present")
 		return false
 	}
 	for _, condition := range expected {
@@ -81,7 +81,7 @@ func ConditionsMatch(t *testing.T, expected, actual []metav1.Condition) bool {
 		}
 	}
 
-	t.Logf("Conditions matched expectations")
+	t.Logf("✅ Conditions matched expectations")
 	return true
 }
 
@@ -95,14 +95,14 @@ func FindConditionInList(t *testing.T, conditions []metav1.Condition, condName,
 				if expectedReason == "" || cond.Reason == expectedReason {
 					return true
 				}
-				t.Logf("%s condition Reason set to %s, expected %s", condName, cond.Reason, expectedReason)
+				t.Logf("⌛️ %s condition Reason set to %s, expected %s", condName, cond.Reason, expectedReason)
 			}
 
-			t.Logf("%s condition set to Status %s with Reason %v, expected Status %s", condName, cond.Status, cond.Reason, expectedStatus)
+			t.Logf("⌛️ %s condition set to Status %s with Reason %v, expected Status %s", condName, cond.Status, cond.Reason, expectedStatus)
 		}
 	}
 
-	t.Logf("%s was not in conditions list", condName)
+	t.Logf("⌛️ %s was not in conditions list", condName)
 	return false
 }
 
@@ -112,10 +112,10 @@ func FindPodConditionInList(t *testing.T, conditions []v1.PodCondition, condName
 			if cond.Status == v1.ConditionStatus(condValue) {
 				return true
 			}
-			t.Logf("%s condition set to %s, expected %s", condName, cond.Status, condValue)
+			t.Logf("⌛️ %s condition set to %s, expected %s", condName, cond.Status, condValue)
 		}
 	}
 
-	t.Logf("%s was not in conditions list", condName)
+	t.Logf("⌛️ %s was not in conditions list", condName)
 	return false
 }
diff --git a/test/e2e/conformance/utils/suite/features.go b/test/e2e/conformance/utils/suite/features.go
new file mode 100644
index 000000000..a969054f3
--- /dev/null
+++ b/test/e2e/conformance/utils/suite/features.go
@@ -0,0 +1,45 @@
+// Copyright (c) 2022 Alibaba Group Holding Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package suite
+
+import "istio.io/istio/pilot/pkg/util/sets"
+
+type SupportedFeature string
+
+const (
+	// core: http
+	HTTPConformanceFeature SupportedFeature = "http"
+
+	// extended: extensibility
+	WASMGoConformanceFeature  SupportedFeature = "wasm-go"
+	WASMCPPConformanceFeature SupportedFeature = "wasm-cpp"
+
+	// extended: service discovery
+	DubboConformanceFeature  SupportedFeature = "dubbo"
+	EurekaConformanceFeature SupportedFeature = "eureka"
+	ConsulConformanceFeature SupportedFeature = "consul"
+	NacosConformanceFeature  SupportedFeature = "nacos"
+)
+
+var AllFeatures = sets.Set{}.
+	Insert(string(HTTPConformanceFeature)).
+	Insert(string(DubboConformanceFeature)).
+	Insert(string(EurekaConformanceFeature)).
+	Insert(string(ConsulConformanceFeature)).
+	Insert(string(NacosConformanceFeature))
+
+var ExperimentFeatures = sets.Set{}.
+	Insert(string(WASMGoConformanceFeature)).
+	Insert(string(WASMCPPConformanceFeature))
diff --git a/test/e2e/conformance/utils/suite/suite.go b/test/e2e/conformance/utils/suite/suite.go
index b0c91c2f0..bf6a8eb9d 100644
--- a/test/e2e/conformance/utils/suite/suite.go
+++ b/test/e2e/conformance/utils/suite/suite.go
@@ -20,32 +20,41 @@ import (
 	"github.com/alibaba/higress/test/e2e/conformance/utils/config"
 	"github.com/alibaba/higress/test/e2e/conformance/utils/kubernetes"
 	"github.com/alibaba/higress/test/e2e/conformance/utils/roundtripper"
+	"istio.io/istio/pilot/pkg/util/sets"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 )
 
 // ConformanceTestSuite defines the test suite used to run Gateway API
 // conformance tests.
 type ConformanceTestSuite struct {
-	Client           client.Client
-	RoundTripper     roundtripper.RoundTripper
-	GatewayAddress   string
-	IngressClassName string
-	Debug            bool
-	Cleanup          bool
-	BaseManifests    string
-	Applier          kubernetes.Applier
-	TimeoutConfig    config.TimeoutConfig
+	Client            client.Client
+	RoundTripper      roundtripper.RoundTripper
+	GatewayAddress    string
+	IngressClassName  string
+	Debug             bool
+	Cleanup           bool
+	BaseManifests     string
+	Applier           kubernetes.Applier
+	SkipTests         sets.Set
+	TimeoutConfig     config.TimeoutConfig
+	SupportedFeatures sets.Set
 }
 
 // Options can be used to initialize a ConformanceTestSuite.
 type Options struct {
-	Client           client.Client
-	GatewayAddress   string
-	IngressClassName string
-	Debug            bool
-	RoundTripper     roundtripper.RoundTripper
-	BaseManifests    string
-	NamespaceLabels  map[string]string
+	SupportedFeatures sets.Set
+	ExemptFeatures    sets.Set
+
+	EnableAllSupportedFeatures bool
+	Client                     client.Client
+	GatewayAddress             string
+	IngressClassName           string
+	Debug                      bool
+	RoundTripper               roundtripper.RoundTripper
+	BaseManifests              string
+	NamespaceLabels            map[string]string
+	// Options for wasm extended features
+	WASMOptions
 
 	// CleanupBaseResources indicates whether or not the base test
 	// resources such as Gateways should be cleaned up after the run.
@@ -53,6 +62,12 @@ type Options struct {
 	TimeoutConfig        config.TimeoutConfig
 }
 
+type WASMOptions struct {
+	IsWasmPluginTest bool
+	WasmPluginType   string
+	WasmPluginName   string
+}
+
 // New returns a new ConformanceTestSuite.
 func New(s Options) *ConformanceTestSuite {
 	config.SetupTimeoutConfig(&s.TimeoutConfig)
@@ -62,14 +77,33 @@ func New(s Options) *ConformanceTestSuite {
 		roundTripper = &roundtripper.DefaultRoundTripper{Debug: s.Debug, TimeoutConfig: s.TimeoutConfig}
 	}
 
+	if s.SupportedFeatures == nil {
+		s.SupportedFeatures = sets.Set{}
+	}
+
+	if s.IsWasmPluginTest {
+		if s.WasmPluginType == "CPP" {
+			s.SupportedFeatures.Insert(string(WASMCPPConformanceFeature))
+		} else {
+			s.SupportedFeatures.Insert(string(WASMGoConformanceFeature))
+		}
+	} else if s.EnableAllSupportedFeatures {
+		s.SupportedFeatures = AllFeatures
+	}
+
+	for feature := range s.ExemptFeatures {
+		s.SupportedFeatures.Delete(feature)
+	}
+
 	suite := &ConformanceTestSuite{
-		Client:           s.Client,
-		RoundTripper:     roundTripper,
-		IngressClassName: s.IngressClassName,
-		Debug:            s.Debug,
-		Cleanup:          s.CleanupBaseResources,
-		BaseManifests:    s.BaseManifests,
-		GatewayAddress:   s.GatewayAddress,
+		Client:            s.Client,
+		RoundTripper:      roundTripper,
+		IngressClassName:  s.IngressClassName,
+		Debug:             s.Debug,
+		Cleanup:           s.CleanupBaseResources,
+		BaseManifests:     s.BaseManifests,
+		SupportedFeatures: s.SupportedFeatures,
+		GatewayAddress:    s.GatewayAddress,
 		Applier: kubernetes.Applier{
 			NamespaceLabels: s.NamespaceLabels,
 		},
@@ -87,20 +121,20 @@ func New(s Options) *ConformanceTestSuite {
 // Setup ensures the base resources required for conformance tests are installed
 // in the cluster. It also ensures that all relevant resources are ready.
 func (suite *ConformanceTestSuite) Setup(t *testing.T) {
-	t.Logf("Test Setup: Ensuring IngressClass has been accepted")
+	t.Logf("📦 Test Setup: Ensuring IngressClass has been accepted")
 
 	suite.Applier.IngressClass = suite.IngressClassName
 
-	t.Logf("Test Setup: Applying base manifests")
+	t.Logf("📦 Test Setup: Applying base manifests")
 	suite.Applier.MustApplyWithCleanup(t, suite.Client, suite.TimeoutConfig, suite.BaseManifests, suite.Cleanup)
 
-	t.Logf("Test Setup: Applying programmatic resources")
+	t.Logf("📦 Test Setup: Applying programmatic resources")
 	secret := kubernetes.MustCreateSelfSignedCertSecret(t, "higress-conformance-web-backend", "certificate", []string{"*"})
 	suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{secret}, suite.Cleanup)
 	secret = kubernetes.MustCreateSelfSignedCertSecret(t, "higress-conformance-infra", "tls-validity-checks-certificate", []string{"*"})
 	suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{secret}, suite.Cleanup)
 
-	t.Logf("Test Setup: Ensuring Pods from base manifests are ready")
+	t.Logf("📦 Test Setup: Ensuring Pods from base manifests are ready")
 	namespaces := []string{
 		"higress-conformance-infra",
 		"higress-conformance-app-backend",
@@ -109,12 +143,13 @@ func (suite *ConformanceTestSuite) Setup(t *testing.T) {
 		"dubbo-demo-provider",
 	}
 	kubernetes.NamespacesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, namespaces)
+
+	t.Logf("🌱 Supported Features: %+v", suite.SupportedFeatures.UnsortedList())
 }
 
-// Run runs the provided set of conformance tests.
+// RunWithTests runs the provided set of conformance tests.
 func (suite *ConformanceTestSuite) Run(t *testing.T, tests []ConformanceTest) {
-
-	t.Logf("Start Running %d Test Cases: \n\n%s", len(tests), globalConformanceTestsListInfo(tests))
+	t.Logf("🚀 Start Running %d Test Cases: \n\n%s", len(tests), globalConformanceTestsListInfo(tests))
 	for _, test := range tests {
 		t.Run(test.ShortName, func(t *testing.T) {
 			test.Run(t, suite)
@@ -125,17 +160,20 @@ func (suite *ConformanceTestSuite) Run(t *testing.T, tests []ConformanceTest) {
 func globalConformanceTestsListInfo(tests []ConformanceTest) string {
 	var cases string
 	for index, test := range tests {
-		cases += fmt.Sprintf("CaseNum: %d\nCaseName: %s\nScenario: %s\n\n", index+1, test.ShortName, test.Description)
+		cases += fmt.Sprintf("🎯 CaseNum: %d\nCaseName: %s\nScenario: %s\nFeatures: %+v\n\n", index+1, test.ShortName, test.Description, test.Features)
 	}
 
 	return cases
 }
 
+type ConformanceTests []ConformanceTest
+
 // ConformanceTest is used to define each individual conformance test.
 type ConformanceTest struct {
 	ShortName   string
 	Description string
 	Manifests   []string
+	Features    []SupportedFeature
 	Slow        bool
 	Parallel    bool
 	Test        func(*testing.T, *ConformanceTestSuite)
@@ -148,8 +186,23 @@ func (test *ConformanceTest) Run(t *testing.T, suite *ConformanceTestSuite) {
 		t.Parallel()
 	}
 
+	// Check that all features exercised by the test have been opted into by
+	// the suite.
+	for _, feature := range test.Features {
+		if !suite.SupportedFeatures.Contains(string(feature)) {
+			t.Skipf("🏊🏼 Skipping %s: suite does not support %s", test.ShortName, feature)
+		}
+	}
+
+	// check that the test should not be skipped
+	if suite.SkipTests.Contains(test.ShortName) {
+		t.Skipf("🏊🏼 Skipping %s: test explicitly skipped", test.ShortName)
+	}
+
+	t.Logf("🔥 Running Conformance Test: %s", test.ShortName)
+
 	for _, manifestLocation := range test.Manifests {
-		t.Logf("Applying %s", manifestLocation)
+		t.Logf("🧳 Applying Manifests: %s", manifestLocation)
 		suite.Applier.MustApplyWithCleanup(t, suite.Client, suite.TimeoutConfig, manifestLocation, true)
 	}
 
diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go
index 2dc54757a..5c1875434 100644
--- a/test/e2e/e2e_test.go
+++ b/test/e2e/e2e_test.go
@@ -16,7 +16,6 @@ package test
 
 import (
 	"flag"
-	"strings"
 	"testing"
 
 	"github.com/stretchr/testify/require"
@@ -29,10 +28,6 @@ import (
 	"github.com/alibaba/higress/test/e2e/conformance/utils/suite"
 )
 
-var isWasmPluginTest = flag.Bool("isWasmPluginTest", false, "")
-var wasmPluginType = flag.String("wasmPluginType", "GO", "")
-var wasmPluginName = flag.String("wasmPluginName", "", "")
-
 func TestHigressConformanceTests(t *testing.T) {
 	flag.Parse()
 
@@ -49,60 +44,15 @@ func TestHigressConformanceTests(t *testing.T) {
 		IngressClassName:     *flags.IngressClassName,
 		Debug:                *flags.ShowDebug,
 		CleanupBaseResources: *flags.CleanupBaseResources,
-		GatewayAddress:       "localhost",
+		WASMOptions: suite.WASMOptions{
+			IsWasmPluginTest: *flags.IsWasmPluginTest,
+			WasmPluginName:   *flags.WasmPluginName,
+			WasmPluginType:   *flags.WasmPluginType,
+		},
+		GatewayAddress:             "localhost",
+		EnableAllSupportedFeatures: true,
 	})
 
 	cSuite.Setup(t)
-	var higressTests []suite.ConformanceTest
-
-	if *isWasmPluginTest {
-		if strings.Compare(*wasmPluginType, "CPP") == 0 {
-			m := make(map[string]suite.ConformanceTest)
-			m["request_block"] = tests.CPPWasmPluginsRequestBlock
-			m["key_auth"] = tests.CPPWasmPluginsKeyAuth
-			m["basic_auth"] = tests.CPPWasmPluginsBasicAuth
-
-			higressTests = []suite.ConformanceTest{
-				m[*wasmPluginName],
-			}
-		} else {
-			higressTests = []suite.ConformanceTest{
-				tests.WasmPluginsRequestBlock,
-				tests.WasmPluginsJwtAuth,
-				tests.WasmPluginsBasicAuth,
-			}
-		}
-	} else {
-		higressTests = []suite.ConformanceTest{
-			tests.HTTPRouteSimpleSameNamespace,
-			tests.HTTPRouteHostNameSameNamespace,
-			tests.HTTPRouteRewritePath,
-			tests.HTTPRouteRewriteHost,
-			tests.HTTPRouteCanaryHeader,
-			tests.HTTPRouteEnableCors,
-			tests.HTTPRouteEnableIgnoreCase,
-			tests.HTTPRouteMatchMethods,
-			tests.HTTPRouteMatchQueryParams,
-			tests.HTTPRouteMatchHeaders,
-			tests.HTTPRouteAppRoot,
-			tests.HTTPRoutePermanentRedirect,
-			tests.HTTPRoutePermanentRedirectCode,
-			tests.HTTPRouteTemporalRedirect,
-			tests.HTTPRouteSameHostAndPath,
-			tests.HTTPRouteCanaryHeaderWithCustomizedHeader,
-			tests.HTTPRouteWhitelistSourceRange,
-			tests.HTTPRouteCanaryWeight,
-			tests.HTTPRouteMatchPath,
-			tests.HttpForceRedirectHttps,
-			tests.HttpRedirectAsHttps,
-			tests.HTTPRouteRequestHeaderControl,
-			tests.HTTPRouteDownstreamEncryption,
-			tests.HTTPRouteFullPathRegex,
-			tests.HTTPRouteHttp2Rpc,
-			tests.HTTPRouteConsulHttpBin,
-			tests.HTTPRouteEurekaRegistry,
-		}
-	}
-
-	cSuite.Run(t, higressTests)
+	cSuite.Run(t, tests.ConformanceTests)
 }
diff --git a/tools/hack/build-wasm-plugins.sh b/tools/hack/build-wasm-plugins.sh
index 43759b8a8..c75e49f05 100755
--- a/tools/hack/build-wasm-plugins.sh
+++ b/tools/hack/build-wasm-plugins.sh
@@ -20,37 +20,35 @@ set -euo pipefail
 TYPE=${PLUGIN_TYPE-""}
 INNER_PLUGIN_NAME=${PLUGIN_NAME-""}
 
-if [ $TYPE == "CPP" ]
+if [ "$TYPE" == "CPP" ]
 then
     cd ./plugins/wasm-cpp/
     if [ ! -n "$INNER_PLUGIN_NAME" ]; then
-        echo "you must specify which cpp plugin you want to compile"
+        echo "You must specify which cpp plugin you want to compile"
     else
-        echo "build wasmplugin-cpp name of $INNER_PLUGIN_NAME"
+        echo "🚀 Build CPP WasmPlugin: $INNER_PLUGIN_NAME"
         PLUGIN_NAME=${INNER_PLUGIN_NAME} make build
     fi
 else
-    echo "not specify plugin language, so just compile wasm-go as default"
+    echo "Not specify plugin language, so just compile wasm-go as default"
     cd ./plugins/wasm-go/
     if [ ! -n "$INNER_PLUGIN_NAME" ]; then
         EXTENSIONS_DIR=$(pwd)"/extensions/"
-        echo "build all wasmplugins-go under folder of $EXTENSIONS_DIR"
+        echo "🚀 Build all Go WasmPlugins under folder of $EXTENSIONS_DIR"
         for file in `ls $EXTENSIONS_DIR`                                   
             do
                 # TODO: adjust waf build
-                if [ $file == "waf" ]; then 
+                if [ "$file" == "waf" ]; then 
                     continue
                 fi
                 if [ -d $EXTENSIONS_DIR$file ]; then 
                     name=${file##*/}
-                    echo "build wasmplugin name of $name"
+                    echo "🚀 Build Go WasmPlugin: $name"
                     PLUGIN_NAME=${name} make build
                 fi
             done
     else
-        echo "build wasmplugin-go name of $INNER_PLUGIN_NAME"
+        echo "🚀 Build Go WasmPlugin: $INNER_PLUGIN_NAME"
         PLUGIN_NAME=${INNER_PLUGIN_NAME} make build
     fi
 fi
-
-