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

tuichenchuxin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new a6839766b96 add test for agent file and prometheus plugin (#24180)
a6839766b96 is described below

commit a6839766b96084676909c251a00086e654ec8ffb
Author: jiangML <[email protected]>
AuthorDate: Thu Feb 16 14:20:53 2023 +0800

    add test for agent file and prometheus plugin (#24180)
    
    * Add tests for agent file, prometheus plugin
    
    * add test cases and optimize code
    
    * optimize code
    
    * optimize prometheus IT test
    
    * optimize test
    
    * Remove useless logs
    
    * add IT test
---
 .github/workflows/e2e-agent.yml                    |   2 +-
 .../advice/MetaDataContextsFactoryAdviceTest.java  |  59 ++++++++++++
 .../core/exporter/impl/BuildInfoExporter.java      |   9 +-
 .../core/exporter/impl/BuildInfoExporterTest.java  |   4 +-
 .../test/e2e/agent/common/BasePluginE2EIT.java     |   3 +
 .../e2e/agent/common/env/E2ETestEnvironment.java   |  48 +++++-----
 .../agent/common/env/EnvironmentProperties.java    |   5 +-
 test/e2e/agent/plugins/metrics/prometheus/pom.xml  |  10 +-
 .../test/e2e/agent/metrics/MetricsPluginE2EIT.java |  94 ++++++++++---------
 .../metrics/asserts/MetricMetadataAssert.java      |  56 ++++++++++++
 .../agent/metrics/asserts/MetricQueryAssert.java   |  66 ++++++++++++++
 .../IntegrationTestCases.java}                     |  35 ++-----
 .../metrics/cases/IntegrationTestCasesLoader.java  | 101 +++++++++++++++++++++
 .../MetricQueryAssertion.java}                     |  37 ++++----
 .../MetricTestCase.java}                           |  37 ++++----
 .../metrics/result/MetricsMetaDataResult.java      |   4 +
 .../agent/metrics/result/MetricsQueryResult.java   |  25 ++---
 .../src/test/resources/cases/build_info.xml}       |  22 ++---
 .../src/test/resources/cases/parsed_sql_total.xml} |  26 ++----
 .../cases/proxy_commit_transactions_total.xml}     |  22 ++---
 .../proxy_current_connections.xml}                 |  22 ++---
 .../cases/proxy_execute_errors_total.xml}          |  22 ++---
 .../cases/proxy_execute_latency_millis.xml}        |  22 ++---
 .../test/resources/cases/proxy_meta_data_info.xml} |  22 ++---
 .../test/resources/cases/proxy_requests_total.xml} |  22 ++---
 .../cases/proxy_rollback_transactions_total.xml}   |  22 ++---
 .../src/test/resources/cases/proxy_state.xml}      |  22 ++---
 .../test/resources/cases/routed_result_total.xml}  |  25 ++---
 .../src/test/resources/cases/routed_sql_total.xml} |  25 ++---
 .../src/test/resources/env/engine-env.properties   |   6 +-
 30 files changed, 512 insertions(+), 363 deletions(-)

diff --git a/.github/workflows/e2e-agent.yml b/.github/workflows/e2e-agent.yml
index e6df0afca2d..c6838202103 100644
--- a/.github/workflows/e2e-agent.yml
+++ b/.github/workflows/e2e-agent.yml
@@ -117,4 +117,4 @@ jobs:
           java-version: 8
       - name: Run E2E Test
         run: |
-          ./mvnw -B clean install -f test/e2e/agent/plugins/metrics/${{ 
matrix.plugin }}/pom.xml -Dspotless.apply.skip=true -Pit.env.${{ matrix.plugin 
}}
+          ./mvnw -B clean install -f test/e2e/agent/plugins/metrics/${{ 
matrix.plugin }}/pom.xml -Dspotless.apply.skip=true -Dit.env.type=${{ 
matrix.plugin }} -Pit.env.${{ matrix.plugin }}
diff --git 
a/agent/plugins/logging/type/file/src/test/java/org/apache/shardingsphere/agent/plugin/logging/file/advice/MetaDataContextsFactoryAdviceTest.java
 
b/agent/plugins/logging/type/file/src/test/java/org/apache/shardingsphere/agent/plugin/logging/file/advice/MetaDataContextsFactoryAdviceTest.java
new file mode 100644
index 00000000000..da35ad56352
--- /dev/null
+++ 
b/agent/plugins/logging/type/file/src/test/java/org/apache/shardingsphere/agent/plugin/logging/file/advice/MetaDataContextsFactoryAdviceTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.agent.plugin.logging.file.advice;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.mockito.Mockito.mock;
+
+public final class MetaDataContextsFactoryAdviceTest {
+    
+    private ListAppender<ILoggingEvent> listAppender;
+    
+    @Before
+    public void setUp() {
+        Logger logger = (Logger) 
LoggerFactory.getLogger(MetaDataContextsFactoryAdvice.class);
+        listAppender = new ListAppender<>();
+        listAppender.start();
+        logger.addAppender(listAppender);
+    }
+    
+    @Test
+    public void assertLog() {
+        MetaDataContextsFactoryAdvice advice = new 
MetaDataContextsFactoryAdvice();
+        Method method = mock(Method.class);
+        advice.beforeMethod(null, method, new Object[]{}, "FIXTURE");
+        advice.afterMethod(null, method, new Object[]{}, null, "FIXTURE");
+        List<ILoggingEvent> logsList = listAppender.list;
+        assertThat(logsList.size(), equalTo(1));
+        assertThat(logsList.get(0).getMessage(), is("Build meta data contexts 
finished, cost {} milliseconds."));
+        assertThat(logsList.get(0).getLevel(), is(Level.INFO));
+    }
+}
diff --git 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporter.java
 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporter.java
index 0e60a0b9b52..cdb446b9a9c 100644
--- 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporter.java
+++ 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporter.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeM
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.MetricsExporter;
+import org.apache.shardingsphere.infra.autogen.version.ShardingSphereVersion;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -39,13 +40,7 @@ public final class BuildInfoExporter implements 
MetricsExporter {
     public Optional<GaugeMetricFamilyMetricsCollector> export(final String 
pluginType) {
         GaugeMetricFamilyMetricsCollector result = 
MetricsCollectorRegistry.get(config, pluginType);
         result.cleanMetrics();
-        addJDKBuildInfo(result, getClass().getPackage());
+        result.addMetric(Arrays.asList("ShardingSphere", 
ShardingSphereVersion.VERSION), 1d);
         return Optional.of(result);
     }
-    
-    private void addJDKBuildInfo(final GaugeMetricFamilyMetricsCollector 
collector, final Package pkg) {
-        String name = "ShardingSphere";
-        String version = null == pkg.getImplementationVersion() ? "unknown" : 
pkg.getImplementationVersion();
-        collector.addMetric(Arrays.asList(name, version), 1d);
-    }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
index ce8f21e0532..102d0e5e4c8 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeM
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
+import org.apache.shardingsphere.infra.autogen.version.ShardingSphereVersion;
 import org.junit.After;
 import org.junit.Test;
 
@@ -45,6 +46,7 @@ public final class BuildInfoExporterTest {
     public void assertExport() {
         Optional<GaugeMetricFamilyMetricsCollector> collector = new 
BuildInfoExporter().export("FIXTURE");
         assertTrue(collector.isPresent());
-        assertThat(collector.get().toString(), 
containsString("ShardingSphere=1, "));
+        assertThat(collector.get().toString(), 
containsString("ShardingSphere=1"));
+        assertThat(collector.get().toString(), 
containsString(String.format("%s=1", ShardingSphereVersion.VERSION)));
     }
 }
diff --git 
a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/BasePluginE2EIT.java
 
b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/BasePluginE2EIT.java
index 42103ce61ae..0344e59aefd 100644
--- 
a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/BasePluginE2EIT.java
+++ 
b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/BasePluginE2EIT.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.test.e2e.agent.common;
 
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.test.e2e.agent.common.entity.OrderEntity;
 import org.apache.shardingsphere.test.e2e.agent.common.env.E2ETestEnvironment;
 import org.apache.shardingsphere.test.e2e.agent.common.util.JDBCAgentTestUtils;
@@ -34,11 +35,13 @@ import static org.hamcrest.CoreMatchers.is;
 /**
  * Basic integration test.
  */
+@Slf4j
 public abstract class BasePluginE2EIT {
     
     @Before
     public void check() {
         
Assume.assumeThat(E2ETestEnvironment.getInstance().isEnvironmentPrepared(), 
is(true));
+        E2ETestEnvironment.getInstance().createDataSource();
     }
     
     @Test
diff --git 
a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
 
b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
index b5746c1dd2c..c51b522ac17 100644
--- 
a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
+++ 
b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
@@ -22,7 +22,6 @@ import com.zaxxer.hikari.HikariDataSource;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.awaitility.Awaitility;
-import org.awaitility.Durations;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -30,6 +29,7 @@ import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Properties;
+import java.util.concurrent.TimeUnit;
 
 @Getter
 @Slf4j
@@ -46,26 +46,30 @@ public final class E2ETestEnvironment {
     private E2ETestEnvironment() {
         props = 
EnvironmentProperties.loadProperties("env/engine-env.properties");
         isEnvironmentPrepared = 
props.getProperty("it.env.value").equals(props.getProperty("it.env.type"));
-        if (isEnvironmentPrepared) {
+    }
+    
+    /**
+     * Get instance.
+     *
+     * @return singleton instance
+     */
+    public static E2ETestEnvironment getInstance() {
+        return INSTANCE;
+    }
+    
+    /**
+     * Create data source.
+     */
+    public void createDataSource() {
+        if (isEnvironmentPrepared && null == dataSource) {
             waitForEnvironmentReady(props);
             dataSource = createHikariCP(props);
         }
     }
     
-    private static DataSource createHikariCP(final Properties props) {
-        HikariConfig result = new HikariConfig();
-        result.setDriverClassName("com.mysql.jdbc.Driver");
-        result.setJdbcUrl(props.getProperty("proxy.url"));
-        result.setUsername(props.getProperty("proxy.username", "root"));
-        result.setPassword(props.getProperty("proxy.password", "root"));
-        result.setMaximumPoolSize(5);
-        result.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
-        return new HikariDataSource(result);
-    }
-    
     private void waitForEnvironmentReady(final Properties props) {
         log.info("Proxy with agent environment initializing ...");
-        Awaitility.await().atMost(Durations.ONE_MINUTE).until(() -> 
isProxyReady(props));
+        Awaitility.await().atMost(120, TimeUnit.SECONDS).pollInterval(200, 
TimeUnit.MILLISECONDS).until(() -> isProxyReady(props));
     }
     
     private boolean isProxyReady(final Properties props) {
@@ -83,12 +87,14 @@ public final class E2ETestEnvironment {
         return true;
     }
     
-    /**
-     * Get instance.
-     *
-     * @return singleton instance
-     */
-    public static E2ETestEnvironment getInstance() {
-        return INSTANCE;
+    private DataSource createHikariCP(final Properties props) {
+        HikariConfig result = new HikariConfig();
+        result.setDriverClassName("com.mysql.jdbc.Driver");
+        result.setJdbcUrl(props.getProperty("proxy.url"));
+        result.setUsername(props.getProperty("proxy.username", "root"));
+        result.setPassword(props.getProperty("proxy.password", "root"));
+        result.setMaximumPoolSize(5);
+        result.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
+        return new HikariDataSource(result);
     }
 }
diff --git 
a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/EnvironmentProperties.java
 
b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/EnvironmentProperties.java
index ea2c6c42879..db272460d4a 100644
--- 
a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/EnvironmentProperties.java
+++ 
b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/EnvironmentProperties.java
@@ -17,11 +17,12 @@
 
 package org.apache.shardingsphere.test.e2e.agent.common.env;
 
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 
 /**
  * Environment properties.
diff --git a/test/e2e/agent/plugins/metrics/prometheus/pom.xml 
b/test/e2e/agent/plugins/metrics/prometheus/pom.xml
index 257b1f1162f..e689e0c0245 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/pom.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/pom.xml
@@ -25,7 +25,6 @@
         <version>5.3.2-SNAPSHOT</version>
     </parent>
     
<artifactId>shardingsphere-test-e2e-agent-plugins-metrics-prometheus</artifactId>
-    <packaging>pom</packaging>
     <name>${project.artifactId}</name>
     
     <properties>
@@ -64,11 +63,6 @@
             <artifactId>HikariCP</artifactId>
             <scope>compile</scope>
         </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <scope>compile</scope>
-        </dependency>
     </dependencies>
     
     <build>
@@ -90,9 +84,9 @@
     
     <profiles>
         <profile>
-            <id>it.env.metrics</id>
+            <id>it.env.prometheus</id>
             <properties>
-                <it.env>metrics</it.env>
+                <it.env>prometheus</it.env>
             </properties>
             <build>
                 <plugins>
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
index e5428473976..9926807cd4d 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
@@ -17,72 +17,82 @@
 
 package org.apache.shardingsphere.test.e2e.agent.metrics;
 
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.test.e2e.agent.common.BasePluginE2EIT;
 import org.apache.shardingsphere.test.e2e.agent.common.env.E2ETestEnvironment;
 import org.apache.shardingsphere.test.e2e.agent.common.util.OkHttpUtils;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.asserts.MetricMetadataAssert;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.asserts.MetricQueryAssert;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.cases.IntegrationTestCasesLoader;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.cases.MetricQueryAssertion;
+import org.apache.shardingsphere.test.e2e.agent.metrics.cases.MetricTestCase;
 import 
org.apache.shardingsphere.test.e2e.agent.metrics.result.MetricsMetaDataResult;
 import 
org.apache.shardingsphere.test.e2e.agent.metrics.result.MetricsQueryResult;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.Collection;
-import java.util.LinkedHashSet;
 import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
+@RunWith(Parameterized.class)
 public final class MetricsPluginE2EIT extends BasePluginE2EIT {
     
+    private static boolean hasCollect;
+    
+    private final MetricTestCase metricTestCase;
+    
+    public MetricsPluginE2EIT(final MetricTestCase metricTestCase) {
+        this.metricTestCase = metricTestCase;
+    }
+    
+    @Parameters
+    public static Collection<MetricTestCase> getTestParameters() {
+        return 
IntegrationTestCasesLoader.getInstance().loadIntegrationTestCases();
+    }
+    
     @Test
-    public void assertProxyWithAgent() throws IOException {
+    @SneakyThrows({IOException.class, InterruptedException.class})
+    public void assertProxyWithAgent() {
         super.assertProxyWithAgent();
         Properties props = E2ETestEnvironment.getInstance().getProps();
         String metaDataURL = props.getProperty("prometheus.metadata.url");
         String queryURL = props.getProperty("prometheus.query.url");
-        Collection<String> metricsNames = buildMetricsNames();
-        for (String each : metricsNames) {
-            String metaDataURLWithParam = buildURLWithParameter(metaDataURL, 
each);
-            String queryURLWithParam = buildURLWithParameter(queryURL, each);
-            try {
-                assertMetadata(each, 
OkHttpUtils.getInstance().get(metaDataURLWithParam, 
MetricsMetaDataResult.class));
-                assertQuery(each, 
OkHttpUtils.getInstance().get(queryURLWithParam, MetricsQueryResult.class));
-            } catch (final IOException ex) {
-                log.info("Access prometheus HTTP RESTful API error: ", ex);
-            }
+        if (!hasCollect) {
+            log.info("Wait for prometheus to collect data ...");
+            TimeUnit.SECONDS.sleep(35);
+            hasCollect = true;
         }
+        assertMetadata(metaDataURL, metricTestCase);
+        assertQuery(queryURL, metricTestCase);
     }
     
-    private Collection<String> buildMetricsNames() {
-        Collection<String> result = new LinkedHashSet<>();
-        result.add("proxy_requests_total");
-        result.add("proxy_current_connections");
-        result.add("proxy_execute_latency_millis_bucket");
-        result.add("routed_sql_total");
-        result.add("routed_result_total");
-        result.add("proxy_commit_transactions_total");
-        result.add("proxy_rollback_transactions_total");
-        result.add("proxy_execute_errors_total");
-        return result;
-    }
-    
-    private String buildURLWithParameter(final String url, final String 
metricsName) {
-        return String.join("", url, metricsName);
-    }
-    
-    // TODO remove if metadata result is not detailed.
-    private void assertMetadata(final String metricName, final 
MetricsMetaDataResult metricsMetaDataResult) {
-        assertThat(String.format("Metric name `%s` is not success.", 
metricName), metricsMetaDataResult.getStatus(), is("success"));
-        assertNotNull(String.format("Metric name `%s` is null.", metricName), 
metricsMetaDataResult.getData());
+    private void assertMetadata(final String metaDataURL, final MetricTestCase 
metricCase) {
+        String metricName = 
"counter".equalsIgnoreCase(metricCase.getMetricType()) && 
metricCase.getMetricName().endsWith("_total")
+                ? metricCase.getMetricName().replace("_total", "")
+                : metricCase.getMetricName();
+        try {
+            String metaDataURLWithParam = String.join("", metaDataURL, 
"?metric=", URLEncoder.encode(metricName, "UTF-8"));
+            
MetricMetadataAssert.assertIs(OkHttpUtils.getInstance().get(metaDataURLWithParam,
 MetricsMetaDataResult.class), metricCase);
+        } catch (final IOException ex) {
+            log.info("Access prometheus HTTP RESTful API error: ", ex);
+        }
     }
     
-    // TODO add more detailed assert
-    private static void assertQuery(final String metricName, final 
MetricsQueryResult metricsQueryResult) {
-        assertThat(String.format("Metric name `%s` is not success.", 
metricName), metricsQueryResult.getStatus(), is("success"));
-        assertFalse(String.format("Metric name `%s` is empty.", metricName), 
metricsQueryResult.getData().getResult().isEmpty());
+    private void assertQuery(final String queryURL, final MetricTestCase 
metricCase) {
+        for (MetricQueryAssertion each : metricCase.getQueryAssertions()) {
+            try {
+                String queryURLWithParam = String.join("", queryURL, 
"?query=", URLEncoder.encode(each.getQuery(), "UTF-8"));
+                
MetricQueryAssert.assertIs(OkHttpUtils.getInstance().get(queryURLWithParam, 
MetricsQueryResult.class), each);
+            } catch (final IOException ex) {
+                log.info("Access prometheus HTTP RESTful API error: ", ex);
+            }
+        }
     }
 }
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/asserts/MetricMetadataAssert.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/asserts/MetricMetadataAssert.java
new file mode 100644
index 00000000000..ed6df8b2cb7
--- /dev/null
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/asserts/MetricMetadataAssert.java
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.test.e2e.agent.metrics.asserts;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.test.e2e.agent.metrics.cases.MetricTestCase;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.result.MetricsMetaDataResult;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.result.MetricsMetaDataResult.Metric;
+
+import java.util.Collection;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * Metric meta data assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class MetricMetadataAssert {
+    
+    /**
+     * Assert metric is correct with expected result.
+     *
+     * @param actual assert result
+     * @param expected expected metric
+     */
+    public static void assertIs(final MetricsMetaDataResult actual, final 
MetricTestCase expected) {
+        String metricName = 
"counter".equalsIgnoreCase(expected.getMetricType()) && 
expected.getMetricName().endsWith("_total")
+                ? expected.getMetricName().replace("_total", "")
+                : expected.getMetricName();
+        assertThat(String.format("Metric `%s` status is not success, error is 
`%s`", expected.getMetricName(), actual.getError()), actual.getStatus(), 
is("success"));
+        assertFalse(String.format("Metric `%s` is empty.", 
expected.getMetricName()), actual.getData().isEmpty());
+        Collection<Metric> metrics = actual.getData().get(metricName);
+        assertFalse(String.format("Metric `%s` is empty.", 
expected.getMetricName()), metrics.isEmpty());
+        for (Metric each : metrics) {
+            assertThat(String.format("Metric `%s` is not `%s` type", 
expected.getMetricName(), expected.getMetricType()), each.getType(), 
is(expected.getMetricType()));
+        }
+    }
+}
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/asserts/MetricQueryAssert.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/asserts/MetricQueryAssert.java
new file mode 100644
index 00000000000..bd2080a4026
--- /dev/null
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/asserts/MetricQueryAssert.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.test.e2e.agent.metrics.asserts;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.cases.MetricQueryAssertion;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.result.MetricsQueryResult;
+import 
org.apache.shardingsphere.test.e2e.agent.metrics.result.MetricsQueryResult.QueryDataResult;
+
+import java.util.Collection;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * Metric query assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class MetricQueryAssert {
+    
+    /**
+     * Assert metric is correct with expected result.
+     *
+     * @param actual assert result
+     * @param expected expected metric
+     */
+    public static void assertIs(final MetricsQueryResult actual, final 
MetricQueryAssertion expected) {
+        assertThat(String.format("The query `%s` is not success, error message 
is `%s`", expected.getQuery(), actual.getError()), actual.getStatus(), 
is("success"));
+        assertFalse(String.format("The query `%s` is empty.", 
expected.getQuery()), actual.getData().getResult().isEmpty());
+        Collection<QueryDataResult> results = actual.getData().getResult();
+        for (QueryDataResult each : results) {
+            assertMetricName(each, expected);
+            if (expected.isShouldAssertValue()) {
+                assertValue(each, expected);
+            }
+        }
+    }
+    
+    private static void assertMetricName(final QueryDataResult actual, final 
MetricQueryAssertion expected) {
+        assertThat(actual.getMetric().get("__name__"), 
is(expected.getMetric()));
+    }
+    
+    private static void assertValue(final QueryDataResult actual, final 
MetricQueryAssertion expected) {
+        assertThat(actual.getValue(), notNullValue());
+        assertThat(actual.getValue().size(), is(2));
+        assertThat(String.format("The value of the `%s` is error", 
expected.getQuery()), Integer.valueOf(actual.getValue().get(1)), 
is(expected.getValue()));
+    }
+}
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCases.java
similarity index 57%
copy from 
test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCases.java
index 3ceecf01843..7a45d890af7 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCases.java
@@ -15,37 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.agent.metrics.result;
+package org.apache.shardingsphere.test.e2e.agent.metrics.cases;
 
 import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.test.e2e.agent.common.result.JsonConfiguration;
 
-import java.util.List;
-import java.util.Map;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.Collection;
+import java.util.LinkedList;
 
 /**
- * Metrics meta data result.
+ * Integration test cases.
  */
 @Getter
-@Setter
-public final class MetricsMetaDataResult implements JsonConfiguration {
+@XmlRootElement(name = "integration-test-cases")
+public final class IntegrationTestCases {
     
-    private String status;
-    
-    private Map<String, List<Metric>> data;
-    
-    /**
-     * Metric.
-     */
-    @Getter
-    @Setter
-    public static final class Metric {
-        
-        private String type;
-        
-        private String help;
-        
-        private String unit;
-    }
+    @XmlElement(name = "test-case")
+    private final Collection<MetricTestCase> testCases = new LinkedList<>();
 }
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java
new file mode 100644
index 00000000000..3ab4a1d9df5
--- /dev/null
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java
@@ -0,0 +1,101 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.test.e2e.agent.metrics.cases;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.SneakyThrows;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Objects;
+
+/**
+ * Integration test cases loader.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class IntegrationTestCasesLoader {
+    
+    private static final String FILE_EXTENSION = ".xml";
+    
+    private static final IntegrationTestCasesLoader INSTANCE = new 
IntegrationTestCasesLoader();
+    
+    private Collection<MetricTestCase> integrationTestCases;
+    
+    /**
+     * Get singleton instance.
+     *
+     * @return singleton instance
+     */
+    public static IntegrationTestCasesLoader getInstance() {
+        return INSTANCE;
+    }
+    
+    /**
+     * Load integration test cases.
+     *
+     * @return integration test cases
+     */
+    @SneakyThrows({IOException.class, URISyntaxException.class, 
JAXBException.class})
+    public Collection<MetricTestCase> loadIntegrationTestCases() {
+        if (null != integrationTestCases) {
+            return integrationTestCases;
+        }
+        integrationTestCases = new LinkedList<>();
+        URL url = 
Objects.requireNonNull(IntegrationTestCasesLoader.class.getClassLoader().getResource("cases/"));
+        Collection<File> files = getFiles(url);
+        for (File each : files) {
+            
integrationTestCases.addAll(unmarshal(each.getPath()).getTestCases());
+        }
+        return integrationTestCases;
+    }
+    
+    private static Collection<File> getFiles(final URL url) throws 
IOException, URISyntaxException {
+        Collection<File> result = new LinkedList<>();
+        Files.walkFileTree(Paths.get(url.toURI()), new 
SimpleFileVisitor<Path>() {
+            
+            @Override
+            public FileVisitResult visitFile(final Path file, final 
BasicFileAttributes basicFileAttributes) {
+                if (file.getFileName().toString().endsWith(FILE_EXTENSION)) {
+                    result.add(file.toFile());
+                }
+                return FileVisitResult.CONTINUE;
+            }
+        });
+        return result;
+    }
+    
+    private static IntegrationTestCases unmarshal(final String 
integrateCasesFile) throws IOException, JAXBException {
+        try (FileReader reader = new FileReader(integrateCasesFile)) {
+            return (IntegrationTestCases) 
JAXBContext.newInstance(IntegrationTestCases.class).createUnmarshaller().unmarshal(reader);
+        }
+    }
+}
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/MetricQueryAssertion.java
similarity index 60%
copy from 
test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/MetricQueryAssertion.java
index 3ceecf01843..c4f47758c68 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/MetricQueryAssertion.java
@@ -15,37 +15,32 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.agent.metrics.result;
+package org.apache.shardingsphere.test.e2e.agent.metrics.cases;
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.e2e.agent.common.result.JsonConfiguration;
 
-import java.util.List;
-import java.util.Map;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
 
 /**
- * Metrics meta data result.
+ * Metric query assertion.
  */
 @Getter
 @Setter
-public final class MetricsMetaDataResult implements JsonConfiguration {
+@XmlAccessorType(XmlAccessType.FIELD)
+public final class MetricQueryAssertion {
     
-    private String status;
+    @XmlAttribute(name = "metric")
+    private String metric;
     
-    private Map<String, List<Metric>> data;
+    @XmlAttribute(name = "query")
+    private String query;
     
-    /**
-     * Metric.
-     */
-    @Getter
-    @Setter
-    public static final class Metric {
-        
-        private String type;
-        
-        private String help;
-        
-        private String unit;
-    }
+    @XmlAttribute(name = "value")
+    private int value;
+    
+    @XmlAttribute(name = "shouldAssertValue")
+    private boolean shouldAssertValue;
 }
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/MetricTestCase.java
similarity index 56%
copy from 
test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/MetricTestCase.java
index 3ceecf01843..bd31100353a 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/MetricTestCase.java
@@ -15,37 +15,32 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.agent.metrics.result;
+package org.apache.shardingsphere.test.e2e.agent.metrics.cases;
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.e2e.agent.common.result.JsonConfiguration;
 
-import java.util.List;
-import java.util.Map;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.Collection;
+import java.util.LinkedList;
 
 /**
- * Metrics meta data result.
+ * Metric test case.
  */
 @Getter
 @Setter
-public final class MetricsMetaDataResult implements JsonConfiguration {
+@XmlAccessorType(XmlAccessType.FIELD)
+public final class MetricTestCase {
     
-    private String status;
+    @XmlAttribute(name = "metric-name")
+    private String metricName;
     
-    private Map<String, List<Metric>> data;
+    @XmlAttribute(name = "metric-type")
+    private String metricType;
     
-    /**
-     * Metric.
-     */
-    @Getter
-    @Setter
-    public static final class Metric {
-        
-        private String type;
-        
-        private String help;
-        
-        private String unit;
-    }
+    @XmlElement(name = "query-assertion")
+    private Collection<MetricQueryAssertion> queryAssertions = new 
LinkedList<>();
 }
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
index 3ceecf01843..d2016ec3e65 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsMetaDataResult.java
@@ -35,6 +35,10 @@ public final class MetricsMetaDataResult implements 
JsonConfiguration {
     
     private Map<String, List<Metric>> data;
     
+    private String errorType;
+    
+    private String error;
+    
     /**
      * Metric.
      */
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsQueryResult.java
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsQueryResult.java
index a0391ac2f0f..1dc5b95fd08 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsQueryResult.java
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/result/MetricsQueryResult.java
@@ -17,12 +17,12 @@
 
 package org.apache.shardingsphere.test.e2e.agent.metrics.result;
 
-import com.google.gson.annotations.SerializedName;
 import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.e2e.agent.common.result.JsonConfiguration;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * Metrics query result.
@@ -35,6 +35,10 @@ public final class MetricsQueryResult implements 
JsonConfiguration {
     
     private QueryData data;
     
+    private String errorType;
+    
+    private String error;
+    
     /**
      * Query data.
      */
@@ -54,25 +58,8 @@ public final class MetricsQueryResult implements 
JsonConfiguration {
     @Setter
     public static final class QueryDataResult {
         
-        private QueryDataResultMetric queryDataResultMetric;
+        private Map<String, String> metric;
         
         private List<String> value;
     }
-    
-    /**
-     * Query data result metric.
-     */
-    public static final class QueryDataResultMetric {
-        
-        @SerializedName("__name__")
-        private String name;
-        
-        private String instance;
-        
-        private String job;
-        
-        private String sql;
-        
-        private String type;
-    }
 }
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
index 1494746120c..fd76020f6cb 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="build_info" metric-type="gauge">
+        <query-assertion metric="build_info" 
query="build_info{name='ShardingSphere'}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml
similarity index 56%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml
index 1494746120c..d5a0b8f7d4b 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,12 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="parsed_sql_total" metric-type="counter">
+        <query-assertion metric="parsed_sql_total" 
query="parsed_sql_total{type='INSERT'}" />
+        <query-assertion metric="parsed_sql_total" 
query="parsed_sql_total{type='SELECT'}" />
+        <query-assertion metric="parsed_sql_total" 
query="parsed_sql_total{type='DELETE'}" />
+        <query-assertion metric="parsed_sql_total" 
query="parsed_sql_total{type='UPDATE'}" />
+        <query-assertion metric="parsed_sql_total" 
query="parsed_sql_total{type='TCL'}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/zipkin/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_commit_transactions_total.xml
similarity index 61%
rename from 
test/e2e/agent/plugins/tracing/zipkin/src/test/resources/docker/proxy/conf/logback.xml
rename to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_commit_transactions_total.xml
index 1494746120c..a2f61925237 100644
--- 
a/test/e2e/agent/plugins/tracing/zipkin/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_commit_transactions_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_commit_transactions_total" 
metric-type="counter">
+        <query-assertion metric="proxy_commit_transactions_total" 
query="proxy_commit_transactions_total{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_current_connections.xml
similarity index 61%
rename from 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/logback.xml
rename to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_current_connections.xml
index 1494746120c..44d4db43fee 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_current_connections.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_current_connections" metric-type="gauge">
+        <query-assertion metric="proxy_current_connections" 
query="proxy_current_connections{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml
index 1494746120c..32347e8756d 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_execute_errors_total" metric-type="counter">
+        <query-assertion metric="proxy_execute_errors_total" 
query="proxy_execute_errors_total{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml
index 1494746120c..2acd0cb6b59 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_execute_latency_millis" 
metric-type="histogram">
+        <query-assertion metric="proxy_execute_latency_millis_bucket" 
query="proxy_execute_latency_millis_bucket{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_meta_data_info.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_meta_data_info.xml
index 1494746120c..a8973f35fb4 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_meta_data_info.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_meta_data_info" metric-type="gauge">
+        <query-assertion metric="proxy_meta_data_info" 
query="proxy_meta_data_info{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_requests_total.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_requests_total.xml
index 1494746120c..e570e04e582 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_requests_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_requests_total" metric-type="counter">
+        <query-assertion metric="proxy_requests_total" 
query="proxy_requests_total{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_rollback_transactions_total.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_rollback_transactions_total.xml
index 1494746120c..c6f063ba9b5 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_rollback_transactions_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_rollback_transactions_total" 
metric-type="counter">
+        <query-assertion metric="proxy_rollback_transactions_total" 
query="proxy_rollback_transactions_total{}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_state.xml
similarity index 61%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_state.xml
index 1494746120c..919bdbd24c5 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_state.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,8 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="proxy_state" metric-type="gauge">
+        <query-assertion metric="proxy_state" query="proxy_state{}" value="0" 
shouldAssertValue="true"/>
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml
similarity index 55%
copy from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
copy to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml
index 1494746120c..270320c63d9 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,11 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="routed_result_total" metric-type="counter">
+        <query-assertion metric="routed_result_total" 
query="routed_result_total{object='data_source', name='ds_0'}" />
+        <query-assertion metric="routed_result_total" 
query="routed_result_total{object='data_source', name='ds_1'}" />
+        <query-assertion metric="routed_result_total" 
query="routed_result_total{object='table', name='t_order_0'}" />
+        <query-assertion metric="routed_result_total" 
query="routed_result_total{object='table', name='t_order_1'}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml
similarity index 59%
rename from 
test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
rename to 
test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml
index 1494746120c..77c6d6df693 100644
--- 
a/test/e2e/agent/plugins/tracing/jaeger/src/test/resources/docker/proxy/conf/logback.xml
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,18 +16,11 @@
   ~ limitations under the License.
   -->
 
-<configuration>
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] 
%logger{36} - %msg%n</pattern>
-        </encoder>
-    </appender>
-    <logger name="org.apache.shardingsphere" level="info" additivity="false">
-        <appender-ref ref="console" />
-    </logger>
-    
-    <root>
-        <level value="info" />
-        <appender-ref ref="console" />
-    </root>
-</configuration> 
+<integration-test-cases>
+    <test-case metric-name="routed_sql_total" metric-type="counter">
+        <query-assertion metric="routed_sql_total" 
query="routed_sql_total{type='INSERT'}" />
+        <query-assertion metric="routed_sql_total" 
query="routed_sql_total{type='SELECT'}" />
+        <query-assertion metric="routed_sql_total" 
query="routed_sql_total{type='DELETE'}" />
+        <query-assertion metric="routed_sql_total" 
query="routed_sql_total{type='UPDATE'}" />
+    </test-case>
+</integration-test-cases>
diff --git 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
index 1200d9888a4..04279a021eb 100644
--- 
a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
+++ 
b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
@@ -16,11 +16,11 @@
 #
 
 it.env.type=${it.env}
-it.env.value=metrics
+it.env.value=prometheus
 
 
proxy.url=jdbc:mysql://127.0.0.1:43070/agent-metrics-db?serverTimezone=UTC&useSSL=false&useLocalSessionState=true&characterEncoding=utf-8
 proxy.username=root
 proxy.password=root
 
-prometheus.metadata.url=http://127.0.0.1:19090/api/v1/metadata?metric=
-prometheus.query.url=http://127.0.0.1:19090/api/v1/query?query=
+prometheus.metadata.url=http://127.0.0.1:19090/api/v1/metadata
+prometheus.query.url=http://127.0.0.1:19090/api/v1/query

Reply via email to