You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/02/11 14:25:36 UTC
[shardingsphere] branch master updated: Refactor db-discovery it use awaitility framework replace sleep (#24105)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 915dfd21770 Refactor db-discovery it use awaitility framework replace sleep (#24105)
915dfd21770 is described below
commit 915dfd217707874762a8fc255258bcf16e63e67f
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Sat Feb 11 22:25:29 2023 +0800
Refactor db-discovery it use awaitility framework replace sleep (#24105)
* Refactor db-discovery it use awaitility framework replace sleep
* Add DistSQLCommandPOJO class
* Fix ci
* Fix code style
* Adjustment Durations.ONE_MINUTE
* Correct import
---
test/e2e/discovery/pom.xml | 5 ++
.../e2e/discovery/build/DiscoveryRuleBuilder.java | 38 ++++++---
.../discovery/cases/base/BaseDiscoveryE2EIT.java | 24 ++----
.../discovery/command/DiscoveryDistSQLCommand.java | 11 ++-
.../DistSQLCommandPOJO.java} | 16 ++--
.../resources/env/common/discovery-command.xml | 97 +++++++++++++---------
6 files changed, 112 insertions(+), 79 deletions(-)
diff --git a/test/e2e/discovery/pom.xml b/test/e2e/discovery/pom.xml
index ac62dd16a74..2e1b9880f70 100644
--- a/test/e2e/discovery/pom.xml
+++ b/test/e2e/discovery/pom.xml
@@ -46,6 +46,11 @@
<artifactId>mysql-connector-java</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.awaitility</groupId>
+ <artifactId>awaitility</artifactId>
+ </dependency>
+
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
diff --git a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/build/DiscoveryRuleBuilder.java b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/build/DiscoveryRuleBuilder.java
index 3496d324f96..6bc68591474 100644
--- a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/build/DiscoveryRuleBuilder.java
+++ b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/build/DiscoveryRuleBuilder.java
@@ -17,17 +17,18 @@
package org.apache.shardingsphere.test.e2e.discovery.build;
-import org.apache.shardingsphere.data.pipeline.core.util.ThreadUtil;
import org.apache.shardingsphere.test.e2e.discovery.cases.base.BaseDiscoveryE2EIT;
import org.apache.shardingsphere.test.e2e.discovery.command.DiscoveryDistSQLCommand;
+import org.awaitility.Awaitility;
+import org.awaitility.Durations;
import javax.sql.DataSource;
import javax.xml.bind.JAXB;
import java.sql.Connection;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects;
-import java.util.concurrent.TimeUnit;
/**
* Build discovery rule.
@@ -60,23 +61,38 @@ public final class DiscoveryRuleBuilder {
}
private void createDatabase(final Statement statement) throws SQLException {
- statement.execute("CREATE DATABASE db_discovery");
- ThreadUtil.sleep(1, TimeUnit.SECONDS);
- statement.execute("USE db_discovery");
+ statement.execute(discoveryDistSQLCommand.getCreateDatabase().getExecuteSQL());
+ Awaitility.await().atMost(Durations.ONE_SECOND).until(() -> assertResult(statement, discoveryDistSQLCommand.getCreateDatabase().getAssertionSQL()));
+ }
+
+ private boolean assertResult(final Statement statement, final String assertionSQL) {
+ try (ResultSet resultSet = statement.executeQuery(assertionSQL)) {
+ return true;
+ } catch (final SQLException ignored) {
+ return false;
+ }
}
private void registerStorageUnits(final Statement statement) throws SQLException {
- statement.execute(discoveryDistSQLCommand.getRegisterStorageUnit());
- ThreadUtil.sleep(2, TimeUnit.SECONDS);
+ statement.execute(discoveryDistSQLCommand.getRegisterStorageUnits().getExecuteSQL());
+ Awaitility.await().atMost(Durations.TWO_SECONDS).until(() -> assertResult0(statement, discoveryDistSQLCommand.getRegisterStorageUnits().getAssertionSQL()));
}
private void createDiscoveryRule(final Statement statement) throws SQLException {
- statement.execute(discoveryDistSQLCommand.getCreateDiscoveryRule());
- ThreadUtil.sleep(2, TimeUnit.SECONDS);
+ statement.execute(discoveryDistSQLCommand.getCreateDiscoveryRule().getExecuteSQL());
+ Awaitility.await().atMost(Durations.TWO_SECONDS).until(() -> assertResult0(statement, discoveryDistSQLCommand.getCreateDiscoveryRule().getAssertionSQL()));
}
private void createReadwriteSplittingRule(final Statement statement) throws SQLException {
- statement.execute(discoveryDistSQLCommand.getCreateReadwriteSplittingRule());
- ThreadUtil.sleep(2, TimeUnit.SECONDS);
+ statement.execute(discoveryDistSQLCommand.getCreateReadwriteSplittingRule().getExecuteSQL());
+ Awaitility.await().atMost(Durations.TWO_SECONDS).until(() -> assertResult0(statement, discoveryDistSQLCommand.getCreateReadwriteSplittingRule().getAssertionSQL()));
+ }
+
+ private boolean assertResult0(final Statement statement, final String assertionSQL) {
+ try (ResultSet resultSet = statement.executeQuery(assertionSQL)) {
+ return resultSet.next();
+ } catch (final SQLException ignored) {
+ return false;
+ }
}
}
diff --git a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
index 55bda35ae23..3cef8147bbc 100644
--- a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
+++ b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
@@ -22,7 +22,6 @@ import lombok.AccessLevel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
-import org.apache.shardingsphere.data.pipeline.core.util.ThreadUtil;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.e2e.discovery.build.DiscoveryRuleBuilder;
import org.apache.shardingsphere.test.e2e.discovery.cases.DatabaseClusterEnvironment;
@@ -30,6 +29,8 @@ import org.apache.shardingsphere.test.e2e.discovery.env.DiscoveryE2ETestEnvironm
import org.apache.shardingsphere.test.e2e.discovery.framework.container.compose.BaseContainerComposer;
import org.apache.shardingsphere.test.e2e.discovery.framework.container.compose.DockerContainerComposer;
import org.apache.shardingsphere.test.e2e.discovery.framework.parameter.DiscoveryTestParameter;
+import org.awaitility.Awaitility;
+import org.awaitility.Durations;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -39,11 +40,9 @@ import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.concurrent.TimeUnit;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertNotEquals;
@Getter(AccessLevel.PROTECTED)
@Slf4j
@@ -84,8 +83,7 @@ public abstract class BaseDiscoveryE2EIT {
public void assertClosePrimaryDataSource(final DatabaseClusterEnvironment mgrEnvironment) throws SQLException {
String oldPrimaryDataSourceName = getPrimaryDataSourceName();
closeDataSource(mgrEnvironment.getDataSources().get(oldPrimaryDataSourceName));
- String newPrimaryDataSourceName = getPrimaryDataSourceName();
- assertPrimaryDataSourceChanged(oldPrimaryDataSourceName, newPrimaryDataSourceName);
+ Awaitility.await().atMost(Durations.ONE_MINUTE).until(() -> !oldPrimaryDataSourceName.equals(getPrimaryDataSourceName()));
mgrEnvironment.getDataSources().remove(oldPrimaryDataSourceName);
}
@@ -122,11 +120,6 @@ public abstract class BaseDiscoveryE2EIT {
Statement statement = connection.createStatement()) {
statement.execute("SHUTDOWN");
}
- ThreadUtil.sleep(35, TimeUnit.SECONDS);
- }
-
- private void assertPrimaryDataSourceChanged(final String oldPrimaryDataSourceName, final String newPrimaryDataSourceName) {
- assertNotEquals(oldPrimaryDataSourceName, newPrimaryDataSourceName);
}
/**
@@ -138,8 +131,8 @@ public abstract class BaseDiscoveryE2EIT {
mgrEnvironment.getDataSources().remove(getPrimaryDataSourceName());
String closedRoutingDataSourceName = getCloseReplicationDataSourceName(mgrEnvironment);
mgrEnvironment.getDataSources().remove(closedRoutingDataSourceName);
- String routeDataSourceName = getRouteDataSourceName();
- assertRouteDataSourceName(routeDataSourceName, Objects.requireNonNull(mgrEnvironment.getDataSources().entrySet().stream().findFirst().orElse(null)).getKey());
+ Awaitility.await().atMost(Durations.ONE_MINUTE).until(() ->
+ getRouteDataSourceName().equals(Objects.requireNonNull(mgrEnvironment.getDataSources().entrySet().stream().findFirst().orElse(null)).getKey()));
}
private String getCloseReplicationDataSourceName(final DatabaseClusterEnvironment mgrEnvironment) throws SQLException {
@@ -164,11 +157,6 @@ public abstract class BaseDiscoveryE2EIT {
}
}
- private void assertRouteDataSourceName(final String actualRouteDataSourceName, final String expectedRouteDataSourceName) {
- Preconditions.checkState(StringUtils.isNotBlank(actualRouteDataSourceName) && StringUtils.isNotBlank(expectedRouteDataSourceName));
- assertThat(actualRouteDataSourceName, is(expectedRouteDataSourceName));
- }
-
/**
* Assert close all replication data source.
* @param mgrEnvironment mgr environment
@@ -176,6 +164,6 @@ public abstract class BaseDiscoveryE2EIT {
*/
public void assertCloseAllReplicationDataSource(final DatabaseClusterEnvironment mgrEnvironment) throws SQLException {
closeDataSource(Objects.requireNonNull(mgrEnvironment.getDataSources().values().stream().findFirst().orElse(null)));
- assertRouteDataSourceName(getRouteDataSourceName(), getPrimaryDataSourceName());
+ Awaitility.await().atMost(Durations.ONE_MINUTE).until(() -> getRouteDataSourceName().equals(getPrimaryDataSourceName()));
}
}
diff --git a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java
index b2736549426..ffea573a48c 100644
--- a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java
+++ b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.test.e2e.discovery.command;
import lombok.Getter;
import lombok.Setter;
+import org.apache.shardingsphere.test.e2e.discovery.pojo.DistSQLCommandPOJO;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -30,15 +31,19 @@ import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
public final class DiscoveryDistSQLCommand {
+ @XmlElement(name = "create-database")
+ @Getter
+ private DistSQLCommandPOJO createDatabase;
+
@XmlElement(name = "register-storage-unit")
@Getter
- private String registerStorageUnit;
+ private DistSQLCommandPOJO registerStorageUnits;
@XmlElement(name = "create-discovery-rule")
@Getter
- private String createDiscoveryRule;
+ private DistSQLCommandPOJO createDiscoveryRule;
@XmlElement(name = "create-readwrite-splitting-rule")
@Getter
- private String createReadwriteSplittingRule;
+ private DistSQLCommandPOJO createReadwriteSplittingRule;
}
diff --git a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/pojo/DistSQLCommandPOJO.java
similarity index 73%
copy from test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java
copy to test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/pojo/DistSQLCommandPOJO.java
index b2736549426..0be98b4887a 100644
--- a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/command/DiscoveryDistSQLCommand.java
+++ b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/pojo/DistSQLCommandPOJO.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.e2e.discovery.command;
+package org.apache.shardingsphere.test.e2e.discovery.pojo;
import lombok.Getter;
import lombok.Setter;
@@ -28,17 +28,13 @@ import javax.xml.bind.annotation.XmlRootElement;
@Setter
@XmlRootElement(name = "command")
@XmlAccessorType(XmlAccessType.FIELD)
-public final class DiscoveryDistSQLCommand {
+public final class DistSQLCommandPOJO {
- @XmlElement(name = "register-storage-unit")
+ @XmlElement(name = "execute-sql")
@Getter
- private String registerStorageUnit;
+ private String executeSQL;
- @XmlElement(name = "create-discovery-rule")
+ @XmlElement(name = "assertion-sql")
@Getter
- private String createDiscoveryRule;
-
- @XmlElement(name = "create-readwrite-splitting-rule")
- @Getter
- private String createReadwriteSplittingRule;
+ private String assertionSQL;
}
diff --git a/test/e2e/discovery/src/test/resources/env/common/discovery-command.xml b/test/e2e/discovery/src/test/resources/env/common/discovery-command.xml
index cd87ad4ef58..6c8fd58b3f2 100644
--- a/test/e2e/discovery/src/test/resources/env/common/discovery-command.xml
+++ b/test/e2e/discovery/src/test/resources/env/common/discovery-command.xml
@@ -16,49 +16,72 @@
-->
<command>
+ <create-database>
+ <execute-sql>
+ CREATE DATABASE db_discovery;
+ </execute-sql>
+ <assertion-sql>
+ USE db_discovery;
+ </assertion-sql>
+ </create-database>
<register-storage-unit>
- REGISTER STORAGE UNIT ds_0 (
- HOST="mysql_1",
- PORT=3306,
- DB="it_discovery_test",
- USER="test_user",
- PASSWORD="Test@123",
- PROPERTIES("connectionTimeout"="5000")
- ),ds_1 (
- HOST="mysql_2",
- PORT=3306,
- DB="it_discovery_test",
- USER="test_user",
- PASSWORD="Test@123",
- PROPERTIES("connectionTimeout"="5000")
- ),ds_2 (
- HOST="mysql_3",
- PORT=3306,
- DB="it_discovery_test",
- USER="test_user",
- PASSWORD="Test@123",
- PROPERTIES("connectionTimeout"="5000")
- ),ds_3 (
- HOST="mysql_4",
- PORT=3306,
- DB="it_discovery_test",
- USER="test_user",
- PASSWORD="Test@123",
- PROPERTIES("connectionTimeout"="5000")
- );
+ <execute-sql>
+ REGISTER STORAGE UNIT ds_0 (
+ HOST="mysql_1",
+ PORT=3306,
+ DB="it_discovery_test",
+ USER="test_user",
+ PASSWORD="Test@123",
+ PROPERTIES("connectionTimeout"="5000")
+ ),ds_1 (
+ HOST="mysql_2",
+ PORT=3306,
+ DB="it_discovery_test",
+ USER="test_user",
+ PASSWORD="Test@123",
+ PROPERTIES("connectionTimeout"="5000")
+ ),ds_2 (
+ HOST="mysql_3",
+ PORT=3306,
+ DB="it_discovery_test",
+ USER="test_user",
+ PASSWORD="Test@123",
+ PROPERTIES("connectionTimeout"="5000")
+ ),ds_3 (
+ HOST="mysql_4",
+ PORT=3306,
+ DB="it_discovery_test",
+ USER="test_user",
+ PASSWORD="Test@123",
+ PROPERTIES("connectionTimeout"="5000")
+ );
+ </execute-sql>
+ <assertion-sql>
+ SHOW STORAGE UNITS;
+ </assertion-sql>
</register-storage-unit>
<create-discovery-rule>
- CREATE DB_DISCOVERY RULE replica_ds (
- STORAGE_UNITS(ds_0, ds_1, ds_2, ds_3),
- TYPE(NAME='MySQL.MGR',PROPERTIES('group-name'='558edd3c-02ec-11ea-9bb3-080027e39bd2')),
- HEARTBEAT(PROPERTIES('keep-alive-cron'='0/2 * * * * ?'))
- );
+ <execute-sql>
+ CREATE DB_DISCOVERY RULE replica_ds (
+ STORAGE_UNITS(ds_0, ds_1, ds_2, ds_3),
+ TYPE(NAME='MySQL.MGR',PROPERTIES('group-name'='558edd3c-02ec-11ea-9bb3-080027e39bd2')),
+ HEARTBEAT(PROPERTIES('keep-alive-cron'='0/2 * * * * ?'))
+ );
+ </execute-sql>
+ <assertion-sql>
+ SHOW DB_DISCOVERY RULES replica_ds;
+ </assertion-sql>
</create-discovery-rule>
<create-readwrite-splitting-rule>
- CREATE READWRITE_SPLITTING RULE readwrite_ds (
- AUTO_AWARE_RESOURCE=replica_ds
- );
+ <execute-sql>
+ CREATE READWRITE_SPLITTING RULE readwrite_ds (
+ AUTO_AWARE_RESOURCE=replica_ds
+ );
+ </execute-sql>
+ <assertion-sql>
+ SHOW READWRITE_SPLITTING RULES replica_ds;
+ </assertion-sql>
</create-readwrite-splitting-rule>
</command>