Skip to content

DATAJDBC-168 - Run integration tests with testcontainers. #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
2 changes: 1 addition & 1 deletion run-tests-against-all-dbs.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/sh

./start-all-dbs.sh && mvn clean install -Pall-dbs && ./stop-all-dbs.sh
mvn clean install -Pall-dbs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -32,35 +33,45 @@
*
* @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 = new MysqlDataSource();
dataSource.setUrl("jdbc:mysql:///?user=root");
MysqlDataSource dataSource = getCommonDataSource();
ScriptUtils.executeSqlScript(dataSource.getConnection(), null, "DROP DATABASE test;CREATE DATABASE test;");
}

ClassPathResource createScript = new ClassPathResource("create-mysql.sql");
DatabasePopulator databasePopulator = new ResourceDatabasePopulator(createScript);
private MysqlDataSource getCommonDataSource() {

DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDatabasePopulator(databasePopulator);
initializer.setDataSource(dataSource);
initializer.afterPropertiesSet();
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl(MYSQL_CONTAINER.getJdbcUrl());
dataSource.setUser(MYSQL_CONTAINER.getUsername());
dataSource.setPassword(MYSQL_CONTAINER.getPassword());

return dataSource;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,36 @@
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;
}
Expand Down
2 changes: 0 additions & 2 deletions src/test/resources/create-mysql.sql

This file was deleted.

53 changes: 53 additions & 0 deletions src/test/resources/mysql_cnf_override/mysql.cnf
Original file line number Diff line number Diff line change
@@ -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
7 changes: 0 additions & 7 deletions start-all-dbs.sh

This file was deleted.

7 changes: 0 additions & 7 deletions stop-all-dbs.sh

This file was deleted.