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