POLYGENE-221 integration test MySQL ES using Docker
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/1cc1e445 Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/1cc1e445 Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/1cc1e445 Branch: refs/heads/develop Commit: 1cc1e44530696c8a2f6047328a465c5440e7ef61 Parents: 9ace50e Author: Paul Merlin <[email protected]> Authored: Mon Jan 9 18:54:04 2017 +0100 Committer: Paul Merlin <[email protected]> Committed: Mon Jan 9 18:56:58 2017 +0100 ---------------------------------------------------------------------- extensions/entitystore-sql/build.gradle | 2 +- .../internal/MySQLDatabaseSQLServiceMixin.java | 2 +- .../entitystore/sql/MySQLEntityStoreTest.java | 48 ++++++++++---------- .../test/resources/mysql-datasource.properties | 2 +- internals/docker-mysql/build.gradle | 19 ++++++++ .../docker-mysql/src/main/docker/Dockerfile | 1 + internals/testsupport-internal/build.gradle | 1 + settings.gradle | 1 + 8 files changed, 50 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/extensions/entitystore-sql/build.gradle ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/build.gradle b/extensions/entitystore-sql/build.gradle index 89f890d..c0c5c8d 100644 --- a/extensions/entitystore-sql/build.gradle +++ b/extensions/entitystore-sql/build.gradle @@ -34,7 +34,7 @@ dependencies { runtime polygene.core.runtime - testCompile polygene.core.testsupport + testCompile polygene.internals.testsupport testCompile polygene.library( 'sql-dbcp' ) testCompile polygene.extension( 'valueserialization-orgjson' ) testCompile libraries.derby // Needed at compile time for polite test shutdown http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java index 5317b47..da3479d 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java @@ -45,7 +45,7 @@ public abstract class MySQLDatabaseSQLServiceMixin ResultSet rs = null; try { - String tableNameForQuery = SQLs.TABLE_NAME.toUpperCase(); + String tableNameForQuery = SQLs.TABLE_NAME; rs = connection.getMetaData().getTables( null, null, tableNameForQuery, new String[] { "TABLE" http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java index 1a0c095..9183801 100644 --- a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java @@ -21,8 +21,8 @@ package org.apache.polygene.entitystore.sql; import java.sql.Connection; import java.sql.Statement; +import java.util.HashMap; import javax.sql.DataSource; -import org.junit.BeforeClass; import org.apache.polygene.api.common.Visibility; import org.apache.polygene.api.unitofwork.UnitOfWork; import org.apache.polygene.api.usecase.UsecaseBuilder; @@ -30,23 +30,30 @@ import org.apache.polygene.bootstrap.AssemblyException; import org.apache.polygene.bootstrap.ModuleAssembly; import org.apache.polygene.entitystore.sql.assembly.MySQLEntityStoreAssembler; import org.apache.polygene.entitystore.sql.internal.SQLs; +import org.apache.polygene.test.internal.DockerRule; import org.apache.polygene.library.sql.assembly.DataSourceAssembler; -import org.apache.polygene.library.sql.common.SQLConfiguration; +import org.apache.polygene.library.sql.datasource.DataSourceConfiguration; import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler; import org.apache.polygene.test.EntityTestAssembler; import org.apache.polygene.test.entity.AbstractEntityStoreTest; import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler; - -import static org.apache.polygene.test.util.Assume.assumeConnectivity; +import org.junit.ClassRule; public class MySQLEntityStoreTest extends AbstractEntityStoreTest { - @BeforeClass - public static void beforeMySQLEntityStoreTests() - { - assumeConnectivity( "localhost", 3306 ); - } + @ClassRule + public static final DockerRule DOCKER = new DockerRule( + "mysql", + new HashMap<String, String>() + {{ + put( "MYSQL_ROOT_PASSWORD", "" ); + put( "MYSQL_ALLOW_EMPTY_PASSWORD", "yes" ); + put( "MYSQL_DATABASE", "jdbc_test_db" ); + put( "MYSQL_ROOT_HOST", "172.17.0.1" ); + }}, + 3306 + ); @Override // START SNIPPET: assembly @@ -80,33 +87,29 @@ public class MySQLEntityStoreTest visibleIn( Visibility.application ). withConfig( config, Visibility.layer ). assemble( module ); + // END SNIPPET: assembly + String mysqlHost = DOCKER.getDockerHost(); + int mysqlPort = DOCKER.getExposedContainerPort( "3306/tcp" ); + config.forMixin( DataSourceConfiguration.class ).declareDefaults() + .url().set( "jdbc:mysql://" + mysqlHost + ":" + mysqlPort + + "/jdbc_test_db?profileSQL=true&useLegacyDatetimeCode=false&serverTimezone=UTC" ); + // START SNIPPET: assembly } // END SNIPPET: assembly @Override - public void tearDown() - throws Exception + public void tearDown() throws Exception { - if( true ) - { - return; - } UnitOfWork uow = this.unitOfWorkFactory.newUnitOfWork( UsecaseBuilder.newUsecase( "Delete " + getClass().getSimpleName() + " test data" ) ); try { - SQLConfiguration config = uow.get( SQLConfiguration.class, MySQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY ); Connection connection = serviceFinder.findService( DataSource.class ).get().getConnection(); connection.setAutoCommit( false ); - String schemaName = config.schemaName().get(); - if( schemaName == null ) - { - schemaName = SQLs.DEFAULT_SCHEMA_NAME; - } try( Statement stmt = connection.createStatement() ) { - stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) ); + stmt.execute( String.format( "DELETE FROM %s", SQLs.TABLE_NAME ) ); connection.commit(); } } @@ -116,5 +119,4 @@ public class MySQLEntityStoreTest super.tearDown(); } } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties b/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties index b6c57cb..6ace8dc 100644 --- a/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties +++ b/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties @@ -19,7 +19,7 @@ # enabled=true -url=jdbc:mysql://localhost:3306/jdbc_test_db?profileSQL=true&useLegacyDatetimeCode=false&serverTimezone=UTC +#url=jdbc:mysql://localhost:3306/jdbc_test_db?profileSQL=true&useLegacyDatetimeCode=false&serverTimezone=UTC driver=com.mysql.jdbc.Driver username=root password= http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/internals/docker-mysql/build.gradle ---------------------------------------------------------------------- diff --git a/internals/docker-mysql/build.gradle b/internals/docker-mysql/build.gradle new file mode 100644 index 0000000..d6f59e0 --- /dev/null +++ b/internals/docker-mysql/build.gradle @@ -0,0 +1,19 @@ +/* + * 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. + */ + +apply plugin: 'polygene-internal-docker' http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/internals/docker-mysql/src/main/docker/Dockerfile ---------------------------------------------------------------------- diff --git a/internals/docker-mysql/src/main/docker/Dockerfile b/internals/docker-mysql/src/main/docker/Dockerfile new file mode 100644 index 0000000..f0169e9 --- /dev/null +++ b/internals/docker-mysql/src/main/docker/Dockerfile @@ -0,0 +1 @@ +FROM mariadb:latest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/internals/testsupport-internal/build.gradle ---------------------------------------------------------------------- diff --git a/internals/testsupport-internal/build.gradle b/internals/testsupport-internal/build.gradle index 561035a..432de86 100644 --- a/internals/testsupport-internal/build.gradle +++ b/internals/testsupport-internal/build.gradle @@ -28,4 +28,5 @@ dependencies { // Ensure that all Docker images are built alongside this project // This is a bit of a stretch but works for now classes.dependsOn ':internals:docker-memcached:docker' +classes.dependsOn ':internals:docker-mysql:docker' classes.dependsOn ':internals:docker-redis:docker' http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1cc1e445/settings.gradle ---------------------------------------------------------------------- diff --git a/settings.gradle b/settings.gradle index dacb684..11378a9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -102,6 +102,7 @@ include 'core:api', include 'internals:testsupport-internal', 'internals:docker-memcached', + 'internals:docker-mysql', 'internals:docker-redis' include 'manual', 'reports', 'distributions', 'release'
