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

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-graalvm-distro.git


The following commit(s) were added to refs/heads/main by this push:
     new 649ec28  Add 8 high-priority e2e test cases for 0.3.0 (#21)
649ec28 is described below

commit 649ec28e5dadbc0996dddb91af543d356839e2a4
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Wed Mar 18 23:34:21 2026 +0800

    Add 8 high-priority e2e test cases for 0.3.0 (#21)
    
    Add 6 high-priority e2e test cases (auth, OTLP traces, virtual MQ, Kafka 
exporter, self-observability, MQE) to expand native image feature coverage for 
0.3.0. Remove SSL/mTLS tests — native image lacks netty_tcnative native 
libraries for TLS. Document the TLS limitation in supported-features.md and FAQ 
with service mesh (Istio/Linkerd) as the recommended alternative.
---
 .github/workflows/ci.yml                        |  28 +++-
 changes/changes.md                              |  15 +++
 docs/faq.md                                     |  14 ++
 docs/supported-features.md                      |  25 ++++
 test/e2e/cases/auth/docker-compose.yml          | 130 ++++++++++++++++++
 test/e2e/cases/auth/e2e.yaml                    |  48 +++++++
 test/e2e/cases/exporter/docker-compose.yml      | 171 ++++++++++++++++++++++++
 test/e2e/cases/exporter/e2e.yaml                |  48 +++++++
 test/e2e/cases/mqe/docker-compose.yml           | 147 ++++++++++++++++++++
 test/e2e/cases/mqe/e2e.yaml                     |  51 +++++++
 test/e2e/cases/mqe/mqe-cases.yaml               | 120 +++++++++++++++++
 test/e2e/cases/otlp-traces/docker-compose.yml   | 105 +++++++++++++++
 test/e2e/cases/otlp-traces/e2e.yaml             |  58 ++++++++
 test/e2e/cases/so11y/docker-compose.yml         | 142 ++++++++++++++++++++
 test/e2e/cases/so11y/e2e.yaml                   |  49 +++++++
 test/e2e/cases/so11y/otel-collector-config.yaml |  47 +++++++
 test/e2e/cases/so11y/so11y-cases.yaml           |  38 ++++++
 test/e2e/cases/virtual-mq/docker-compose.yml    | 156 +++++++++++++++++++++
 test/e2e/cases/virtual-mq/e2e.yaml              |  45 +++++++
 19 files changed, 1433 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 332c0f7..c0bbfd7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -329,6 +329,18 @@ jobs:
             case: traceql
           - name: Baseline
             case: baseline
+          - name: Auth
+            case: auth
+          - name: OTLP Traces
+            case: otlp-traces
+          - name: Virtual MQ
+            case: virtual-mq
+          - name: Kafka Exporter
+            case: exporter
+          - name: Self Observability
+            case: so11y
+          - name: MQE
+            case: mqe
     steps:
       - name: Checkout with submodules
         uses: actions/checkout@v5
@@ -344,15 +356,15 @@ jobs:
       - name: Load Docker image
         run: docker load -i /tmp/skywalking-oap-native.tar
 
-      - name: Set up JDK 17 (baseline mock-sender)
-        if: matrix.test.case == 'baseline'
+      - name: Set up JDK 17 (test service build)
+        if: matrix.test.case == 'baseline' || matrix.test.case == 'mqe'
         uses: actions/setup-java@v4
         with:
           java-version: '17'
           distribution: 'temurin'
 
-      - name: Restore Maven cache (baseline mock-sender)
-        if: matrix.test.case == 'baseline'
+      - name: Restore Maven cache (test service build)
+        if: matrix.test.case == 'baseline' || matrix.test.case == 'mqe'
         uses: actions/cache/restore@v5
         with:
           path: ~/.m2/repository
@@ -367,6 +379,14 @@ jobs:
             -pl e2e-mock-sender -am \
             package -DskipTests -Dmaven.javadoc.skip
 
+      - name: Build mock baseline server jar (mqe only)
+        if: matrix.test.case == 'mqe'
+        run: |
+          cd skywalking && ./mvnw -B -q \
+            -f test/e2e-v2/java-test-service/pom.xml \
+            -pl e2e-mock-baseline-server -am \
+            package -DskipTests -Dmaven.javadoc.skip
+
       - name: Run E2E test
         uses: 
apache/skywalking-infra-e2e@8c21e43e241a32a54bdf8eeceb9099eb27e5e9b4
         with:
diff --git a/changes/changes.md b/changes/changes.md
index f0aad35..4ef2be3 100644
--- a/changes/changes.md
+++ b/changes/changes.md
@@ -1,5 +1,20 @@
 # Changes
 
+## 0.3.0
+
+### Documentation
+
+- Document TLS/SSL limitation: native image lacks `netty_tcnative`, recommend 
service mesh for mTLS.
+
+### E2E Tests
+
+- Add Auth e2e test case (token-based agent-to-OAP authentication).
+- Add OTLP Traces e2e test case (OpenTelemetry trace ingestion via Zipkin API).
+- Add Virtual MQ e2e test case (Kafka-instrumented virtual MQ layer metrics).
+- Add Kafka Exporter e2e test case (trace and log export to Kafka).
+- Add Self-Observability e2e test case (OAP Prometheus telemetry via OTEL 
collector).
+- Add MQE e2e test case (Metrics Query Engine expression evaluation with 
baseline).
+
 ## 0.2.1
 
 ### Build
diff --git a/docs/faq.md b/docs/faq.md
index 331ad00..d2d1ebc 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -31,6 +31,20 @@ on port 12800. No changes needed.
 All official SkyWalking agents work with this distro — they communicate via 
the same
 gRPC/HTTP protocols. OpenTelemetry agents sending OTLP data also work.
 
+### Can I enable TLS/SSL for gRPC?
+
+No. The native image does not support TLS-encrypted gRPC 
(`SW_CORE_GRPC_SSL_ENABLED`,
+`SW_RECEIVER_GRPC_SSL_ENABLED`, mTLS). The underlying Netty TLS implementation 
requires
+`netty_tcnative` native libraries that are not bundled in the native image.
+
+**Recommended alternative**: Deploy with a service mesh such as **Istio** or 
**Linkerd**.
+The mesh handles mTLS transparently at the infrastructure layer — all 
agent-to-OAP traffic
+is encrypted without any application-level TLS configuration. This also 
provides automatic
+certificate rotation and policy enforcement.
+
+If you require application-level TLS without a service mesh, use the standard 
upstream
+SkyWalking JVM distribution.
+
 ---
 
 ## Deployment
diff --git a/docs/supported-features.md b/docs/supported-features.md
index f8d17ed..de1846d 100644
--- a/docs/supported-features.md
+++ b/docs/supported-features.md
@@ -97,6 +97,30 @@ These modules are disabled by default. Enable them with 
environment variables:
 | Cilium Fetcher | `SW_CILIUM_FETCHER=default` |
 | Exporter | `SW_EXPORTER=default` |
 
+## Known Limitations
+
+### No TLS/SSL Support for gRPC
+
+The native image does **not** support TLS-encrypted gRPC communication. This 
affects:
+
+- Agent-to-OAP gRPC connections (`SW_CORE_GRPC_SSL_ENABLED`)
+- Receiver gRPC SSL (`SW_RECEIVER_GRPC_SSL_ENABLED`)
+- Any mTLS (mutual TLS) configuration between agents and OAP
+
+**Root cause**: The Netty TLS implementation requires `netty_tcnative` 
platform-specific native
+libraries (`.so` files) that are not bundled in the GraalVM native image.
+
+**Workaround**: Use a service mesh (e.g., **Istio**, **Linkerd**) to handle 
mTLS at the
+infrastructure layer. The mesh transparently encrypts all pod-to-pod traffic, 
including
+agent-to-OAP gRPC connections, without requiring application-level TLS 
configuration.
+
+```
+Agent Pod ──(plaintext gRPC)──► Istio Sidecar ══(mTLS)══► Istio Sidecar ──► 
OAP Pod
+```
+
+This is the recommended approach for Kubernetes deployments and provides 
stronger security
+guarantees than application-level TLS (automatic certificate rotation, policy 
enforcement).
+
 ## Differences from Upstream SkyWalking
 
 | Aspect | Upstream | This Distro |
@@ -108,6 +132,7 @@ These modules are disabled by default. Enable them with 
environment variables:
 | Cluster | ZK, K8s, Consul, Etcd, Nacos | Standalone, K8s |
 | Config | All dynamic config providers | K8s ConfigMap or none |
 | Module loading | SPI discovery at runtime | Fixed at build time |
+| TLS/SSL | Supported (gRPC SSL, mTLS) | Not supported (use service mesh) |
 
 ## Compatibility
 
diff --git a/test/e2e/cases/auth/docker-compose.yml 
b/test/e2e/cases/auth/docker-compose.yml
new file mode 100644
index 0000000..a61bfc0
--- /dev/null
+++ b/test/e2e/cases/auth/docker-compose.yml
@@ -0,0 +1,130 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+    networks:
+      - e2e
+    ports:
+      - 12800
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_AUTHENTICATION: test-token
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_AGENT_AUTHENTICATION: test-token
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_AGENT_AUTHENTICATION: test-token
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/auth/e2e.yaml b/test/e2e/cases/auth/e2e.yaml
new file mode 100644
index 0000000..521c8a7
--- /dev/null
+++ b/test/e2e/cases/auth/e2e.yaml
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# Auth E2E — native OAP with BanyanDB and token authentication
+# Validates that agent-to-OAP authentication works with native image.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${consumer_host}:${consumer_9092}/users
+  method: POST
+  body: '{"id":"123","name":"skywalking"}'
+  headers:
+    "Content-Type": "application/json"
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    - includes:
+        - ../../../../skywalking/test/e2e-v2/cases/simple/simple-cases.yaml
diff --git a/test/e2e/cases/exporter/docker-compose.yml 
b/test/e2e/cases/exporter/docker-compose.yml
new file mode 100644
index 0000000..97e2c67
--- /dev/null
+++ b/test/e2e/cases/exporter/docker-compose.yml
@@ -0,0 +1,171 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  zookeeper:
+    image: zookeeper:3.4
+    hostname: zookeeper
+    expose:
+      - 2181
+    networks:
+      - e2e
+    environment:
+      - ALLOW_ANONYMOUS_LOGIN=yes
+    healthcheck:
+      test: ["CMD", "sh", "-c", "nc -nz 127.0.0.1 2181"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  broker-a:
+    image: bitnamilegacy/kafka:2.4.1
+    hostname: broker-a
+    expose:
+      - 9092
+    networks:
+      - e2e
+    environment:
+      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
+      - KAFKA_BROKER_ID=10
+      - ALLOW_PLAINTEXT_LISTENER=yes
+    depends_on:
+      zookeeper:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD", "kafka-topics.sh", "--list", "--zookeeper", 
"zookeeper:2181"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+      - 1234
+    networks:
+      - e2e
+    ports:
+      - 1234
+      - 12800
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_EXPORTER: default
+      SW_EXPORTER_ENABLE_KAFKA_TRACE: "true"
+      SW_EXPORTER_ENABLE_KAFKA_LOG: "true"
+      SW_EXPORTER_KAFKA_SERVERS: broker-a:9092
+      SW_TELEMETRY: prometheus
+    depends_on:
+      banyandb:
+        condition: service_healthy
+      broker-a:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/exporter/e2e.yaml b/test/e2e/cases/exporter/e2e.yaml
new file mode 100644
index 0000000..c380bcf
--- /dev/null
+++ b/test/e2e/cases/exporter/e2e.yaml
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# Kafka Exporter E2E — native OAP with BanyanDB
+# Validates trace and log export to Kafka via the ExporterModule.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${consumer_host}:${consumer_9092}/users
+  method: POST
+  body: '{"id":"123","name":"skywalking"}'
+  headers:
+    "Content-Type": "application/json"
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    - includes:
+        - 
../../../../skywalking/test/e2e-v2/cases/exporter/kafka/exporter-cases.yaml
diff --git a/test/e2e/cases/mqe/docker-compose.yml 
b/test/e2e/cases/mqe/docker-compose.yml
new file mode 100644
index 0000000..136f6c7
--- /dev/null
+++ b/test/e2e/cases/mqe/docker-compose.yml
@@ -0,0 +1,147 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# No custom OAL mount — native image uses pre-compiled OAL with all standard 
metrics.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+    networks:
+      - e2e
+    ports:
+      - 12800
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_API_PIPELINE_BASELINE_SERVICE_HOST: baseline-server
+    depends_on:
+      banyandb:
+        condition: service_healthy
+      baseline-server:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  baseline-server:
+    image: "eclipse-temurin:11-jre"
+    volumes:
+      - 
../../../../skywalking/test/e2e-v2/java-test-service/e2e-mock-baseline-server/target/e2e-mock-baseline-server-2.0.0.jar:/e2e-mock-baseline-server-2.0.0.jar
+    command: ["java", "-jar", "/e2e-mock-baseline-server-2.0.0.jar"]
+    networks:
+      - e2e
+    ports:
+      - 18080
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/18080"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/mqe/e2e.yaml b/test/e2e/cases/mqe/e2e.yaml
new file mode 100644
index 0000000..ea2e48c
--- /dev/null
+++ b/test/e2e/cases/mqe/e2e.yaml
@@ -0,0 +1,51 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# MQE (Metrics Query Engine) E2E — native OAP with BanyanDB
+# Validates MQE expression parsing and evaluation.
+# Adapted for native image: no custom OAL override (uses pre-compiled OAL),
+# no disable.oal test (can't disable metrics at runtime in native image),
+# no service_percentile_old (not in standard OAL).
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${consumer_host}:${consumer_9092}/users
+  method: POST
+  body: '{"id":"123","name":"skywalking"}'
+  headers:
+    "Content-Type": "application/json"
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    - includes:
+        - mqe-cases.yaml
diff --git a/test/e2e/cases/mqe/mqe-cases.yaml 
b/test/e2e/cases/mqe/mqe-cases.yaml
new file mode 100644
index 0000000..6603078
--- /dev/null
+++ b/test/e2e/cases/mqe/mqe-cases.yaml
@@ -0,0 +1,120 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# MQE test cases for native image.
+# Adapted from upstream mqe-cases.yaml:
+#   - Removed service_percentile_old (not in standard pre-compiled OAL)
+#   - Removed disable-metrics test (can't disable OAL metrics at runtime in 
native image)
+
+cases:
+  # service metrics
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=service_sla --service-name=e2e-service-provider
+    expected: ../../../../skywalking/test/e2e-v2/cases/mqe/expected/no-OP.yml
+
+  # binary-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="service_sla * 2 /100 + 500 - 50" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/binary-OP.yml
+
+  # compare-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="(service_cpm + 1) > 2" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/compare-OP.yml
+
+  # bool-OP (SINGLE_VALUE)
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="avg(service_cpm + 1) > 2 && avg(service_sla/100) > 95" 
--service-name=e2e-service-provider
+    expected: ../../../../skywalking/test/e2e-v2/cases/mqe/expected/bool-OP.yml
+  # bool-OP (TIME_SERIES_VALUES)
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="(service_cpm + 1) > 2 && (service_sla/100) > 95" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/compare-OP.yml
+
+  # aggregation-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="avg(service_sla/100)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/aggregation-OP.yml
+
+  # func-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="abs(service_sla-10300)" --service-name=e2e-service-provider
+    expected: ../../../../skywalking/test/e2e-v2/cases/mqe/expected/func-OP.yml
+
+  # topN-OP-service Global
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="top_n(service_resp_time,3,des)"
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/topN-OP-service.yml
+  # topN-OP-service Global with attrs
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="top_n(service_resp_time,3,des,attr0='GENERAL')/100"
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/topN-OP-service.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="top_n(service_resp_time,3,des,attr0!='Not_GENERAL')/100"
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/topN-OP-service.yml
+
+  # topN-OP-instance
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="top_n(service_instance_resp_time,3,des)/100" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/topN-OP-instance.yml
+
+  # topN-Of-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="top_n_of(top_n(service_resp_time,3,des,attr0='GENERAL'), 
top_n(service_cpm,3,des,attr0='GENERAL'), 2, des)"
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/topN-OP-service.yml
+
+  # select labels and relabels
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="relabels(relabels(service_percentile{p='50,75,90'},p='50,75',p='P50,P75'),p='90',p='P90')"
 --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/relabels-OP.yml
+
+  # relabels and calculate
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="relabels(service_percentile{p='50,75,90'},p='50',p='P50')/relabels(service_percentile{p='50,75,90'},p='50',p='P50')"
 --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/relabels-binary-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="relabels(service_percentile{p='50,75,90'}/service_percentile{p='50,75,90'},p='50',p='P50')"
 --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/relabels-binary-OP.yml
+
+  # aggregateLabels-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="aggregate_labels(service_percentile,avg)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/aggregateLabels-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="aggregate_labels(service_percentile,sum)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/aggregateLabels-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="aggregate_labels(service_percentile,max)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/aggregateLabels-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="aggregate_labels(service_percentile,min)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/aggregateLabels-OP.yml
+
+  # viewAsSeq-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="view_as_seq(mq_service_consume_sla,service_sla)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/viewAsSeq-OP.yml
+
+  # isPresent-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="is_present(service_sla)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/isPresent-OP-true.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="is_present(not_exist_meter,mq_service_consume_cpm)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/isPresent-OP-false.yml
+
+  # trend-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="increase(service_resp_time,1)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/trend-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="rate(service_resp_time,1)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/trend-OP.yml
+
+  # sort-value-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="sort_values(service_percentile,2,asc,avg)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/sort-value-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="sort_values(service_percentile,1,des,avg)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/sort-value-OP.yml
+
+  # sort-label-value-OP
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="sort_label_values(service_percentile{p='50,75,90'},des,p)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/sort-label-value-OP.yml
+
+  # baseline
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="baseline(service_cpm,upper)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/baseline-upper-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="baseline(service_cpm,lower)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/baseline-lower-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="baseline(service_cpm,value)" --service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/baseline-OP.yml
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="baseline(service_percentile{p='95,99'},upper)" 
--service-name=e2e-service-provider
+    expected: 
../../../../skywalking/test/e2e-v2/cases/mqe/expected/baseline-label-OP.yml
diff --git a/test/e2e/cases/otlp-traces/docker-compose.yml 
b/test/e2e/cases/otlp-traces/docker-compose.yml
new file mode 100644
index 0000000..b08ae14
--- /dev/null
+++ b/test/e2e/cases/otlp-traces/docker-compose.yml
@@ -0,0 +1,105 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+version: '3.9'
+x-default-logging: &logging
+  driver: "json-file"
+  options:
+    max-size: "5m"
+    max-file: "2"
+
+services:
+  frontend:
+    image: ghcr.io/open-telemetry/demo:1.4.0-frontend
+    deploy:
+      resources:
+        limits:
+          memory: 200M
+    restart: unless-stopped
+    ports:
+      - 8080
+    environment:
+      PORT: 8080
+      FRONTEND_ADDR: frontend:8080
+      PRODUCT_CATALOG_SERVICE_ADDR: productcatalogservice:3550
+      OTEL_EXPORTER_OTLP_ENDPOINT: http://oap:11800
+      OTEL_RESOURCE_ATTRIBUTES: service.namespace=opentelemetry-demo
+      ENV_PLATFORM: local
+      OTEL_SERVICE_NAME: frontend
+      WEB_OTEL_SERVICE_NAME: frontend-web
+      CURRENCY_SERVICE_ADDR: no.exist:80
+    depends_on:
+      - oap
+      - productcatalogservice
+    logging: *logging
+    networks:
+      - e2e
+
+  productcatalogservice:
+    image: ghcr.io/open-telemetry/demo:1.4.0-productcatalogservice
+    deploy:
+      resources:
+        limits:
+          memory: 20M
+    restart: unless-stopped
+    ports:
+      - "3550"
+    environment:
+      PRODUCT_CATALOG_SERVICE_PORT: 3550
+      OTEL_EXPORTER_OTLP_ENDPOINT: http://oap:11800
+      OTEL_RESOURCE_ATTRIBUTES: service.namespace=opentelemetry-demo
+      OTEL_SERVICE_NAME: productcatalogservice
+      FEATURE_FLAG_GRPC_SERVICE_ADDR: no.exist:80
+    depends_on:
+      - oap
+    logging: *logging
+    networks:
+      - e2e
+
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+      - 9412
+    networks:
+      - e2e
+    ports:
+      - 12800
+      - 9412
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_RECEIVER_ZIPKIN: default
+      SW_QUERY_ZIPKIN: default
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/otlp-traces/e2e.yaml 
b/test/e2e/cases/otlp-traces/e2e.yaml
new file mode 100644
index 0000000..4fc9e94
--- /dev/null
+++ b/test/e2e/cases/otlp-traces/e2e.yaml
@@ -0,0 +1,58 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# OTLP Traces E2E — native OAP with BanyanDB
+# Validates OpenTelemetry trace ingestion via OTLP and query via Zipkin API.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${frontend_host}:${frontend_8080}/api/products
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    # service name
+    - query: curl http://${oap_host}:${oap_9412}/zipkin/api/v2/services
+      expected: 
../../../../skywalking/test/e2e-v2/cases/otlp-traces/expected/service-name.yml
+    # remote-service name
+    - query: curl 
http://${oap_host}:${oap_9412}/zipkin/api/v2/remoteServices?serviceName=frontend
+      expected: 
../../../../skywalking/test/e2e-v2/cases/otlp-traces/expected/remote-service-name.yml
+    # span name
+    - query: curl 
http://${oap_host}:${oap_9412}/zipkin/api/v2/spans?serviceName=productcatalogservice
+      expected: 
../../../../skywalking/test/e2e-v2/cases/otlp-traces/expected/span-name.yml
+    # traces
+    - query: curl 
http://${oap_host}:${oap_9412}/zipkin/api/v2/traces\?limit\=1\&serviceName\=productcatalogservice\&spanName\=oteldemo.productcatalogservice/listproducts
 | yq e 'del(..|.tags?, ..|.annotations?)' -
+      expected: 
../../../../skywalking/test/e2e-v2/cases/otlp-traces/expected/traces.yml
+    # autocomplete
+    - query: curl 
http://${oap_host}:${oap_9412}/zipkin/api/v2/autocompleteValues?key=http.method
+      expected: 
../../../../skywalking/test/e2e-v2/cases/otlp-traces/expected/autocomplete.yml
diff --git a/test/e2e/cases/so11y/docker-compose.yml 
b/test/e2e/cases/so11y/docker-compose.yml
new file mode 100644
index 0000000..04065bd
--- /dev/null
+++ b/test/e2e/cases/so11y/docker-compose.yml
@@ -0,0 +1,142 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+      - 1234
+    networks:
+      - e2e
+    ports:
+      - 12800
+      - 1234
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_PROMETHEUS_FETCHER: default
+      SW_TELEMETRY: prometheus
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  otel-collector:
+    image: otel/opentelemetry-collector:0.102.1
+    networks:
+      - e2e
+    command: ["--config=/etc/otel-collector-config.yaml"]
+    volumes:
+      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/so11y/e2e.yaml b/test/e2e/cases/so11y/e2e.yaml
new file mode 100644
index 0000000..06ae3a2
--- /dev/null
+++ b/test/e2e/cases/so11y/e2e.yaml
@@ -0,0 +1,49 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# Self-Observability E2E — native OAP with BanyanDB
+# Validates OAP self-monitoring via Prometheus telemetry + OTEL collector.
+# Adapted for native image: no JVM metrics (no jvm_memory, jvm_thread, 
jvm_class).
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${consumer_host}:${consumer_9092}/users
+  method: POST
+  body: '{"id":"123","name":"skywalking"}'
+  headers:
+    "Content-Type": "application/json"
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    - includes:
+        - so11y-cases.yaml
diff --git a/test/e2e/cases/so11y/otel-collector-config.yaml 
b/test/e2e/cases/so11y/otel-collector-config.yaml
new file mode 100644
index 0000000..3593d72
--- /dev/null
+++ b/test/e2e/cases/so11y/otel-collector-config.yaml
@@ -0,0 +1,47 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+receivers:
+  prometheus:
+    config:
+     scrape_configs:
+       - job_name: 'skywalking-so11y'
+         scrape_interval: 5s
+         static_configs:
+           - targets: ['oap:1234']
+             labels:
+               host_name: http://localhost:1234
+               service: oap-server
+processors:
+  batch:
+
+exporters:
+  otlp:
+    endpoint: oap:11800
+    tls:
+      insecure: true
+  logging:
+    loglevel: debug
+
+service:
+  pipelines:
+    metrics:
+      receivers:
+      - prometheus
+      processors:
+      - batch
+      exporters:
+      - otlp
+      - logging
diff --git a/test/e2e/cases/so11y/so11y-cases.yaml 
b/test/e2e/cases/so11y/so11y-cases.yaml
new file mode 100644
index 0000000..e1fd1c3
--- /dev/null
+++ b/test/e2e/cases/so11y/so11y-cases.yaml
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# Self-observability test cases for native image.
+# Only application-level metrics are tested (no JVM metrics in native image).
+
+  cases:
+    # layer list
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql layer ls
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/layer.yml
+    # service list
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql service ls
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/service.yml
+    # service instance list
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql instance list 
--service-name=oap-server
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/service-instance.yml
+    # OAP application-level metrics (available in native image)
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=meter_oap_instance_trace_count 
--instance-name=http://localhost:1234 --service-name=oap-server
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/metrics-has-value-label-trace.yml
+    # meter_oap_instance_metrics_aggregation skipped: .tag() closure NPE in 
pre-compiled MAL
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=meter_oap_instance_persistence_prepare_count 
--instance-name=http://localhost:1234 --service-name=oap-server
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/metrics-has-value.yml
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=meter_oap_instance_persistence_execute_count 
--instance-name=http://localhost:1234 --service-name=oap-server
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/metrics-has-value.yml
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression="meter_oap_instance_trace_latency_percentile{p='90,99'}" 
--instance-name=http://localhost:1234 --service-name=oap-server
+      expected: 
../../../../skywalking/test/e2e-v2/cases/so11y/expected/metrics-has-value-percentile.yml
diff --git a/test/e2e/cases/virtual-mq/docker-compose.yml 
b/test/e2e/cases/virtual-mq/docker-compose.yml
new file mode 100644
index 0000000..a30ba91
--- /dev/null
+++ b/test/e2e/cases/virtual-mq/docker-compose.yml
@@ -0,0 +1,156 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+    networks:
+      - e2e
+    ports:
+      - 12800
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_REPORT_INTERVAL: 5
+      SW_METER_ACTIVE: 'false'
+      kafka_enable: "true"
+      kafka_topic: topic
+      kafka_server: kafka:9092
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      kafka:
+        condition: service_started
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+      kafka_enable: "true"
+      kafka_topic: topic
+      kafka_server: kafka:9092
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+  zookeeper:
+    image: zookeeper:3.9.3
+    networks:
+      - e2e
+    environment:
+      - ALLOW_ANONYMOUS_LOGIN=yes
+
+  kafka:
+    image: bitnamilegacy/kafka:2.4.1
+    networks:
+      - e2e
+    environment:
+      - KAFKA_BROKER_ID=1
+      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
+      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092
+      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
+      - ALLOW_PLAINTEXT_LISTENER=yes
+    depends_on:
+      - zookeeper
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/virtual-mq/e2e.yaml 
b/test/e2e/cases/virtual-mq/e2e.yaml
new file mode 100644
index 0000000..bdbb6cf
--- /dev/null
+++ b/test/e2e/cases/virtual-mq/e2e.yaml
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# Virtual MQ E2E — native OAP with BanyanDB
+# Validates virtual MQ layer metrics (Kafka instrumentation via Java agent).
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${provider_host}:${provider_9090}/kafka/send
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../../../../skywalking/test/e2e-v2/cases/virtual-mq/mq-cases.yaml

Reply via email to