DATAJDBC-168 - Run integration tests with testcontainers.
Added testcontainers as dependency and configured MySql and Postrgres datasources to use it. Original pull request: #34.
This commit is contained in:
14
pom.xml
14
pom.xml
@@ -183,6 +183,20 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>mysql</artifactId>
|
||||
<version>1.5.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>1.5.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
./start-all-dbs.sh && mvn clean install -Pall-dbs && ./stop-all-dbs.sh
|
||||
mvn clean install -Pall-dbs
|
||||
|
||||
@@ -15,15 +15,16 @@
|
||||
*/
|
||||
package org.springframework.data.jdbc.testing;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.script.ScriptException;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
|
||||
import org.springframework.jdbc.datasource.init.DatabasePopulator;
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||
import org.testcontainers.containers.MySQLContainer;
|
||||
import org.testcontainers.jdbc.ext.ScriptUtils;
|
||||
|
||||
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
|
||||
|
||||
@@ -32,35 +33,45 @@ import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
|
||||
*
|
||||
* @author Jens Schauder
|
||||
* @author Oliver Gierke
|
||||
* @author Sedat Gokcen
|
||||
*/
|
||||
@Configuration
|
||||
@Profile("mysql")
|
||||
class MySqlDataSourceConfiguration extends DataSourceConfiguration {
|
||||
|
||||
private static final MySQLContainer MYSQL_CONTAINER = new MySQLContainer();
|
||||
|
||||
static {
|
||||
MYSQL_CONTAINER.withConfigurationOverride("mysql_cnf_override").withDatabaseName("test").start();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.jdbc.testing.DataSourceConfiguration#createDataSource()
|
||||
*/
|
||||
@Override
|
||||
protected DataSource createDataSource() {
|
||||
|
||||
MysqlDataSource dataSource = new MysqlDataSource();
|
||||
dataSource.setUrl("jdbc:mysql:///test?user=root");
|
||||
MysqlDataSource dataSource = getCommonDataSource();
|
||||
dataSource.setDatabaseName(MYSQL_CONTAINER.getDatabaseName());
|
||||
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void initDatabase() {
|
||||
public void initDatabase() throws SQLException, ScriptException {
|
||||
|
||||
MysqlDataSource dataSource = getCommonDataSource();
|
||||
ScriptUtils.executeSqlScript(dataSource.getConnection(), null, "DROP DATABASE test;CREATE DATABASE test;");
|
||||
}
|
||||
|
||||
private MysqlDataSource getCommonDataSource() {
|
||||
|
||||
MysqlDataSource dataSource = new MysqlDataSource();
|
||||
dataSource.setUrl("jdbc:mysql:///?user=root");
|
||||
dataSource.setUrl(MYSQL_CONTAINER.getJdbcUrl());
|
||||
dataSource.setUser(MYSQL_CONTAINER.getUsername());
|
||||
dataSource.setPassword(MYSQL_CONTAINER.getPassword());
|
||||
|
||||
ClassPathResource createScript = new ClassPathResource("create-mysql.sql");
|
||||
DatabasePopulator databasePopulator = new ResourceDatabasePopulator(createScript);
|
||||
|
||||
DataSourceInitializer initializer = new DataSourceInitializer();
|
||||
initializer.setDatabasePopulator(databasePopulator);
|
||||
initializer.setDataSource(dataSource);
|
||||
initializer.afterPropertiesSet();
|
||||
return dataSource;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,25 +21,36 @@ import org.postgresql.ds.PGSimpleDataSource;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
|
||||
/**
|
||||
* {@link DataSource} setup for PostgreSQL
|
||||
*
|
||||
* @author Jens Schauder
|
||||
* @author Oliver Gierke
|
||||
* @author Sedat Gokcen
|
||||
*/
|
||||
@Configuration
|
||||
@Profile("postgres")
|
||||
public class PostgresDataSourceConfiguration extends DataSourceConfiguration {
|
||||
|
||||
private static final PostgreSQLContainer POSTGRESQL_CONTAINER = new PostgreSQLContainer();
|
||||
|
||||
static {
|
||||
POSTGRESQL_CONTAINER.start();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.jdbc.testing.DataSourceConfiguration#createDataSource()
|
||||
*/
|
||||
@Override
|
||||
protected DataSource createDataSource() {
|
||||
|
||||
PGSimpleDataSource ds = new PGSimpleDataSource();
|
||||
ds.setUrl("jdbc:postgresql:///postgres");
|
||||
ds.setUrl(POSTGRESQL_CONTAINER.getJdbcUrl());
|
||||
ds.setUser(POSTGRESQL_CONTAINER.getUsername());
|
||||
ds.setPassword(POSTGRESQL_CONTAINER.getPassword());
|
||||
|
||||
return ds;
|
||||
}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
DROP DATABASE test;
|
||||
CREATE DATABASE test;
|
||||
53
src/test/resources/mysql_cnf_override/mysql.cnf
Normal file
53
src/test/resources/mysql_cnf_override/mysql.cnf
Normal file
@@ -0,0 +1,53 @@
|
||||
[mysqld]
|
||||
|
||||
# the only change we make, other params with the comments all together are the default ones.
|
||||
lower_case_table_names = 1
|
||||
|
||||
user = mysql
|
||||
datadir = /var/lib/mysql
|
||||
port = 3306
|
||||
#socket = /tmp/mysql.sock
|
||||
skip-external-locking
|
||||
key_buffer_size = 16K
|
||||
max_allowed_packet = 1M
|
||||
table_open_cache = 4
|
||||
sort_buffer_size = 64K
|
||||
read_buffer_size = 256K
|
||||
read_rnd_buffer_size = 256K
|
||||
net_buffer_length = 2K
|
||||
skip-host-cache
|
||||
skip-name-resolve
|
||||
|
||||
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
|
||||
# if all processes that need to connect to mysqld run on the same host.
|
||||
# All interaction with mysqld must be made via Unix sockets or named pipes.
|
||||
# Note that using this option without enabling named pipes on Windows
|
||||
# (using the "enable-named-pipe" option) will render mysqld useless!
|
||||
#
|
||||
#skip-networking
|
||||
#server-id = 1
|
||||
|
||||
# Uncomment the following if you want to log updates
|
||||
#log-bin=mysql-bin
|
||||
|
||||
# binary logging format - mixed recommended
|
||||
#binlog_format=mixed
|
||||
|
||||
# Causes updates to non-transactional engines using statement format to be
|
||||
# written directly to binary log. Before using this option make sure that
|
||||
# there are no dependencies between transactional and non-transactional
|
||||
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
|
||||
# t_innodb; otherwise, slaves may diverge from the master.
|
||||
#binlog_direct_non_transactional_updates=TRUE
|
||||
|
||||
# Uncomment the following if you are using InnoDB tables
|
||||
innodb_data_file_path = ibdata1:10M:autoextend
|
||||
# You can set .._buffer_pool_size up to 50 - 80 %
|
||||
# of RAM but beware of setting memory usage too high
|
||||
innodb_buffer_pool_size = 16M
|
||||
#innodb_additional_mem_pool_size = 2M
|
||||
# Set .._log_file_size to 25 % of buffer pool size
|
||||
innodb_log_file_size = 5M
|
||||
innodb_log_buffer_size = 8M
|
||||
innodb_flush_log_at_trx_commit = 1
|
||||
innodb_lock_wait_timeout = 50
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# postgres
|
||||
pg_ctl -D /usr/local/var/postgres start
|
||||
|
||||
# mysql
|
||||
mysql.server start
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# postgres
|
||||
pg_ctl -D /usr/local/var/postgres stop
|
||||
|
||||
# mysql
|
||||
mysql.server stop
|
||||
Reference in New Issue
Block a user