From 5fb0c4dd3501620dfa5eadf5468f929910538f63 Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Mon, 24 Sep 2018 06:21:45 +0200 Subject: [PATCH] Improve JDBC integration tests --- gradle/dependency-management.gradle | 3 +- .../spring-session-jdbc.gradle | 1 + ...JdbcOperationsSessionRepositoryITests.java | 59 +++++++ ...JdbcOperationsSessionRepositoryITests.java | 125 +++++++------ .../session/jdbc/DatabaseContainers.java | 167 ++++++++++++++++++ .../session/jdbc/DatabasePopulators.java | 48 +++++ ...JdbcOperationsSessionRepositoryITests.java | 59 +------ ...JdbcOperationsSessionRepositoryITests.java | 60 +------ ...JdbcOperationsSessionRepositoryITests.java | 64 +------ ...JdbcOperationsSessionRepositoryITests.java | 63 +------ ...JdbcOperationsSessionRepositoryITests.java | 52 +----- ...JdbcOperationsSessionRepositoryITests.java | 52 +----- ...JdbcOperationsSessionRepositoryITests.java | 54 +----- 13 files changed, 403 insertions(+), 404 deletions(-) create mode 100644 spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractContainerJdbcOperationsSessionRepositoryITests.java create mode 100644 spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabaseContainers.java create mode 100644 spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabasePopulators.java diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index c22f9fb6..27eb5f10 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -5,7 +5,7 @@ dependencyManagement { mavenBom 'org.springframework:spring-framework-bom:5.1.0.RELEASE' mavenBom 'org.springframework.data:spring-data-releasetrain:Lovelace-RELEASE' mavenBom 'org.springframework.security:spring-security-bom:5.1.0.RELEASE' - mavenBom 'org.testcontainers:testcontainers-bom:1.9.0-rc2' + mavenBom 'org.testcontainers:testcontainers-bom:1.9.0' } dependencies { @@ -16,6 +16,7 @@ dependencyManagement { dependency 'com.h2database:h2:1.4.197' dependency 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8' + dependency 'com.zaxxer:HikariCP:3.2.0' dependency 'edu.umd.cs.mtc:multithreadedtc:1.01' dependency 'io.lettuce:lettuce-core:5.1.0.RELEASE' dependency 'javax.annotation:javax.annotation-api:1.3.2' diff --git a/spring-session-jdbc/spring-session-jdbc.gradle b/spring-session-jdbc/spring-session-jdbc.gradle index 40e880fc..366c3c96 100644 --- a/spring-session-jdbc/spring-session-jdbc.gradle +++ b/spring-session-jdbc/spring-session-jdbc.gradle @@ -13,6 +13,7 @@ dependencies { integrationTestCompile "com.h2database:h2" integrationTestCompile "com.microsoft.sqlserver:mssql-jdbc" + integrationTestCompile "com.zaxxer:HikariCP" integrationTestCompile "mysql:mysql-connector-java" integrationTestCompile "org.apache.derby:derby" integrationTestCompile "org.hsqldb:hsqldb" diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractContainerJdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractContainerJdbcOperationsSessionRepositoryITests.java new file mode 100644 index 00000000..67d2f696 --- /dev/null +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractContainerJdbcOperationsSessionRepositoryITests.java @@ -0,0 +1,59 @@ +/* + * Copyright 2014-2018 the original author or authors. + * + * Licensed 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.springframework.session.jdbc; + +import javax.sql.DataSource; + +import com.zaxxer.hikari.HikariDataSource; +import org.testcontainers.containers.JdbcDatabaseContainer; + +import org.springframework.context.annotation.Bean; +import org.springframework.jdbc.datasource.init.DataSourceInitializer; +import org.springframework.jdbc.datasource.init.DatabasePopulator; + +/** + * Abstract base class for Testcontainers based {@link JdbcOperationsSessionRepository} + * integration tests. + * + * @author Vedran Pavic + */ +public abstract class AbstractContainerJdbcOperationsSessionRepositoryITests + extends AbstractJdbcOperationsSessionRepositoryITests { + + static class BaseContainerConfig extends BaseConfig { + + @Bean + public HikariDataSource dataSource(JdbcDatabaseContainer databaseContainer) { + HikariDataSource dataSource = new HikariDataSource(); + dataSource.setJdbcUrl(databaseContainer.getJdbcUrl()); + dataSource.setUsername(databaseContainer.getUsername()); + dataSource.setPassword(databaseContainer.getPassword()); + return dataSource; + } + + @Bean + public DataSourceInitializer dataSourceInitializer(DataSource dataSource, + DatabasePopulator databasePopulator) { + DataSourceInitializer initializer = new DataSourceInitializer(); + initializer.setDataSource(dataSource); + initializer.setDatabasePopulator(databasePopulator); + return initializer; + } + + } + +} diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractJdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractJdbcOperationsSessionRepositoryITests.java index 26234a2d..555ceef2 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractJdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/AbstractJdbcOperationsSessionRepositoryITests.java @@ -49,7 +49,6 @@ import static org.assertj.core.api.Assertions.assertThat; * Abstract base class for {@link JdbcOperationsSessionRepository} integration tests. * * @author Vedran Pavic - * @since 1.2.0 */ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @@ -65,7 +64,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { private SecurityContext changedContext; @Before - public void setup() throws Exception { + public void setUp() { this.context = SecurityContextHolder.createEmptyContext(); this.context.setAuthentication( new UsernamePasswordAuthenticationToken("username-" + UUID.randomUUID(), @@ -78,12 +77,13 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void saveWhenNoAttributesThenCanBeFound() throws Exception { + public void saveWhenNoAttributesThenCanBeFound() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); this.repository.save(toSave); - JdbcOperationsSessionRepository.JdbcSession session = this.repository.findById(toSave.getId()); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .findById(toSave.getId()); assertThat(session).isNotNull(); assertThat(session.isChanged()).isFalse(); @@ -91,7 +91,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void saves() throws InterruptedException { + public void saves() { String username = "saves-" + System.currentTimeMillis(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository @@ -108,7 +108,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { this.repository.save(toSave); - JdbcOperationsSessionRepository.JdbcSession session = this.repository.findById(toSave.getId()); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .findById(toSave.getId()); assertThat(session.getId()).isEqualTo(toSave.getId()); assertThat(session.isChanged()).isFalse(); @@ -145,7 +146,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { this.repository.save(toSave); toSave = this.repository.findById(toSave.getId()); - JdbcOperationsSessionRepository.JdbcSession session = this.repository.findById(toSave.getId()); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .findById(toSave.getId()); assertThat(session.isChanged()).isFalse(); assertThat(session.getDelta()).isEmpty(); assertThat(session.getAttributeNames().size()).isEqualTo(2); @@ -159,8 +161,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { public void updateLastAccessedTime() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); - toSave.setLastAccessedTime(Instant.now().minusSeconds( - MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS + 1)); + toSave.setLastAccessedTime(Instant.now() + .minusSeconds(MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS + 1)); this.repository.save(toSave); @@ -168,7 +170,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { toSave.setLastAccessedTime(lastAccessedTime); this.repository.save(toSave); - JdbcOperationsSessionRepository.JdbcSession session = this.repository.findById(toSave.getId()); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .findById(toSave.getId()); assertThat(session).isNotNull(); assertThat(session.isChanged()).isFalse(); @@ -179,7 +182,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByPrincipalName() throws Exception { + public void findByPrincipalName() { String principalName = "findByPrincipalName" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); @@ -203,14 +206,14 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByPrincipalNameExpireRemovesIndex() throws Exception { + public void findByPrincipalNameExpireRemovesIndex() { String principalName = "findByPrincipalNameExpireRemovesIndex" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(INDEX_NAME, principalName); - toSave.setLastAccessedTime(Instant.now().minusSeconds( - MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS + 1)); + toSave.setLastAccessedTime(Instant.now() + .minusSeconds(MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS + 1)); this.repository.save(toSave); this.repository.cleanUpExpiredSessions(); @@ -223,7 +226,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByPrincipalNameNoPrincipalNameChange() throws Exception { + public void findByPrincipalNameNoPrincipalNameChange() { String principalName = "findByPrincipalNameNoPrincipalNameChange" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository @@ -247,7 +250,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByPrincipalNameNoPrincipalNameChangeReload() throws Exception { + public void findByPrincipalNameNoPrincipalNameChangeReload() { String principalName = "findByPrincipalNameNoPrincipalNameChangeReload" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository @@ -273,7 +276,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByDeletedPrincipalName() throws Exception { + public void findByDeletedPrincipalName() { String principalName = "findByDeletedPrincipalName" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); @@ -291,7 +294,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByChangedPrincipalName() throws Exception { + public void findByChangedPrincipalName() { String principalName = "findByChangedPrincipalName" + UUID.randomUUID(); String principalNameChanged = "findByChangedPrincipalName" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository @@ -319,7 +322,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByDeletedPrincipalNameReload() throws Exception { + public void findByDeletedPrincipalNameReload() { String principalName = "findByDeletedPrincipalName" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); @@ -339,7 +342,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByChangedPrincipalNameReload() throws Exception { + public void findByChangedPrincipalNameReload() { String principalName = "findByChangedPrincipalName" + UUID.randomUUID(); String principalNameChanged = "findByChangedPrincipalName" + UUID.randomUUID(); JdbcOperationsSessionRepository.JdbcSession toSave = this.repository @@ -370,7 +373,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findBySecurityPrincipalName() throws Exception { + public void findBySecurityPrincipalName() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -393,12 +396,12 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findBySecurityPrincipalNameExpireRemovesIndex() throws Exception { + public void findBySecurityPrincipalNameExpireRemovesIndex() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); - toSave.setLastAccessedTime(Instant.now().minusSeconds( - MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS + 1)); + toSave.setLastAccessedTime(Instant.now() + .minusSeconds(MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS + 1)); this.repository.save(toSave); this.repository.cleanUpExpiredSessions(); @@ -411,7 +414,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByPrincipalNameNoSecurityPrincipalNameChange() throws Exception { + public void findByPrincipalNameNoSecurityPrincipalNameChange() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -433,8 +436,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByPrincipalNameNoSecurityPrincipalNameChangeReload() - throws Exception { + public void findByPrincipalNameNoSecurityPrincipalNameChangeReload() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -458,7 +460,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByDeletedSecurityPrincipalName() throws Exception { + public void findByDeletedSecurityPrincipalName() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -475,7 +477,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByChangedSecurityPrincipalName() throws Exception { + public void findByChangedSecurityPrincipalName() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -501,7 +503,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByDeletedSecurityPrincipalNameReload() throws Exception { + public void findByDeletedSecurityPrincipalNameReload() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -520,7 +522,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void findByChangedSecurityPrincipalNameReload() throws Exception { + public void findByChangedSecurityPrincipalNameReload() { JdbcOperationsSessionRepository.JdbcSession toSave = this.repository .createSession(); toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); @@ -607,15 +609,17 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void changeSessionIdWhenOnlyChangeId() throws Exception { + public void changeSessionIdWhenOnlyChangeId() { String attrName = "changeSessionId"; String attrValue = "changeSessionId-value"; - JdbcOperationsSessionRepository.JdbcSession toSave = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession toSave = this.repository + .createSession(); toSave.setAttribute(attrName, attrValue); this.repository.save(toSave); - JdbcOperationsSessionRepository.JdbcSession findById = this.repository.findById(toSave.getId()); + JdbcOperationsSessionRepository.JdbcSession findById = this.repository + .findById(toSave.getId()); assertThat(findById.getAttribute(attrName)).isEqualTo(attrValue); @@ -626,16 +630,19 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { assertThat(this.repository.findById(originalFindById)).isNull(); - JdbcOperationsSessionRepository.JdbcSession findByChangeSessionId = this.repository.findById(changeSessionId); + JdbcOperationsSessionRepository.JdbcSession findByChangeSessionId = this.repository + .findById(changeSessionId); assertThat(findByChangeSessionId.isChanged()).isFalse(); assertThat(findByChangeSessionId.getDelta()).isEmpty(); - assertThat(findByChangeSessionId.getAttribute(attrName)).isEqualTo(attrValue); + assertThat(findByChangeSessionId.getAttribute(attrName)) + .isEqualTo(attrValue); } @Test - public void changeSessionIdWhenChangeTwice() throws Exception { - JdbcOperationsSessionRepository.JdbcSession toSave = this.repository.createSession(); + public void changeSessionIdWhenChangeTwice() { + JdbcOperationsSessionRepository.JdbcSession toSave = this.repository + .createSession(); this.repository.save(toSave); @@ -651,15 +658,17 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @Test - public void changeSessionIdWhenSetAttributeOnChangedSession() throws Exception { + public void changeSessionIdWhenSetAttributeOnChangedSession() { String attrName = "changeSessionId"; String attrValue = "changeSessionId-value"; - JdbcOperationsSessionRepository.JdbcSession toSave = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession toSave = this.repository + .createSession(); this.repository.save(toSave); - JdbcOperationsSessionRepository.JdbcSession findById = this.repository.findById(toSave.getId()); + JdbcOperationsSessionRepository.JdbcSession findById = this.repository + .findById(toSave.getId()); findById.setAttribute(attrName, attrValue); @@ -670,19 +679,19 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { assertThat(this.repository.findById(originalFindById)).isNull(); - JdbcOperationsSessionRepository.JdbcSession findByChangeSessionId = this.repository.findById(changeSessionId); + JdbcOperationsSessionRepository.JdbcSession findByChangeSessionId = this.repository + .findById(changeSessionId); assertThat(findByChangeSessionId.isChanged()).isFalse(); assertThat(findByChangeSessionId.getDelta()).isEmpty(); - assertThat(findByChangeSessionId.getAttribute(attrName)).isEqualTo(attrValue); + assertThat(findByChangeSessionId.getAttribute(attrName)) + .isEqualTo(attrValue); } @Test - public void changeSessionIdWhenHasNotSaved() throws Exception { - String attrName = "changeSessionId"; - String attrValue = "changeSessionId-value"; - - JdbcOperationsSessionRepository.JdbcSession toSave = this.repository.createSession(); + public void changeSessionIdWhenHasNotSaved() { + JdbcOperationsSessionRepository.JdbcSession toSave = this.repository + .createSession(); String originalId = toSave.getId(); toSave.changeSessionId(); @@ -694,7 +703,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @Test // gh-1070 public void saveUpdatedAddAndModifyAttribute() { - JdbcOperationsSessionRepository.JdbcSession session = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .createSession(); this.repository.save(session); session = this.repository.findById(session.getId()); session.setAttribute("testName", "testValue1"); @@ -707,7 +717,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @Test // gh-1070 public void saveUpdatedAddAndRemoveAttribute() { - JdbcOperationsSessionRepository.JdbcSession session = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .createSession(); this.repository.save(session); session = this.repository.findById(session.getId()); session.setAttribute("testName", "testValue"); @@ -720,7 +731,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @Test // gh-1070 public void saveUpdatedModifyAndRemoveAttribute() { - JdbcOperationsSessionRepository.JdbcSession session = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .createSession(); session.setAttribute("testName", "testValue1"); this.repository.save(session); session = this.repository.findById(session.getId()); @@ -734,7 +746,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @Test // gh-1070 public void saveUpdatedRemoveAndAddAttribute() { - JdbcOperationsSessionRepository.JdbcSession session = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .createSession(); session.setAttribute("testName", "testValue1"); this.repository.save(session); session = this.repository.findById(session.getId()); @@ -748,7 +761,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @Test // gh-1031 public void saveDeleted() { - JdbcOperationsSessionRepository.JdbcSession session = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .createSession(); this.repository.save(session); session = this.repository.findById(session.getId()); this.repository.deleteById(session.getId()); @@ -760,7 +774,8 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { @Test // gh-1031 public void saveDeletedAddAttribute() { - JdbcOperationsSessionRepository.JdbcSession session = this.repository.createSession(); + JdbcOperationsSessionRepository.JdbcSession session = this.repository + .createSession(); this.repository.save(session); session = this.repository.findById(session.getId()); this.repository.deleteById(session.getId()); @@ -805,7 +820,7 @@ public abstract class AbstractJdbcOperationsSessionRepositoryITests { } @EnableJdbcHttpSession - protected static class BaseConfig { + static class BaseConfig { @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabaseContainers.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabaseContainers.java new file mode 100644 index 00000000..f04df1bc --- /dev/null +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabaseContainers.java @@ -0,0 +1,167 @@ +/* + * Copyright 2014-2018 the original author or authors. + * + * Licensed 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.springframework.session.jdbc; + +import org.testcontainers.containers.JdbcDatabaseContainer; +import org.testcontainers.containers.MSSQLServerContainer; +import org.testcontainers.containers.MariaDBContainer; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.containers.PostgreSQLContainer; + +/** + * Factories for various {@link JdbcDatabaseContainer}s. + * + * @author Vedran Pavic + */ +final class DatabaseContainers { + + private DatabaseContainers() { + } + + static MariaDBContainer mariaDb5() { + return new MariaDb5Container(); + } + + static MariaDBContainer mariaDb10() { + return new MariaDb10Container(); + } + + static MySQLContainer mySql5() { + return new MySql5Container(); + } + + static MySQLContainer mySql8() { + return new MySql8Container(); + } + + static PostgreSQLContainer postgreSql9() { + return new PostgreSql9Container(); + } + + static PostgreSQLContainer postgreSql10() { + return new PostgreSql10Container(); + } + + static MSSQLServerContainer sqlServer2017() { + return new SqlServer2017Container(); + } + + private static class MariaDb5Container extends MariaDBContainer { + + MariaDb5Container() { + super("mariadb:5.5.61"); + } + + @Override + protected void configure() { + super.configure(); + setCommand("mysqld", "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_unicode_ci", "--innodb_large_prefix", + "--innodb_file_format=barracuda", "--innodb-file-per-table"); + } + + } + + private static class MariaDb10Container extends MariaDBContainer { + + MariaDb10Container() { + super("mariadb:10.3.9"); + } + + @Override + protected void configure() { + super.configure(); + setCommand("mysqld", "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_unicode_ci"); + } + + } + + private static class MySql5Container extends MySQLContainer { + + MySql5Container() { + super("mysql:5.7.23"); + } + + @Override + protected void configure() { + super.configure(); + setCommand("mysqld", "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_unicode_ci"); + } + + @Override + public String getDriverClassName() { + return "com.mysql.cj.jdbc.Driver"; + } + + } + + private static class MySql8Container extends MySQLContainer { + + MySql8Container() { + super("mysql:8.0.12"); + } + + @Override + protected void configure() { + super.configure(); + setCommand("mysqld", "--default-authentication-plugin=mysql_native_password"); + } + + @Override + public String getDriverClassName() { + return "com.mysql.cj.jdbc.Driver"; + } + + } + + private static class PostgreSql9Container + extends PostgreSQLContainer { + + PostgreSql9Container() { + super("postgres:9.6.10"); + } + + } + + private static class PostgreSql10Container + extends PostgreSQLContainer { + + PostgreSql10Container() { + super("postgres:10.5"); + } + + } + + private static class SqlServer2017Container + extends MSSQLServerContainer { + + SqlServer2017Container() { + super("microsoft/mssql-server-linux:2017-CU10"); + } + + @Override + protected void configure() { + super.configure(); + withStartupTimeoutSeconds(240); + withConnectTimeoutSeconds(240); + } + + } + +} diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabasePopulators.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabasePopulators.java new file mode 100644 index 00000000..b4f83ce0 --- /dev/null +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/DatabasePopulators.java @@ -0,0 +1,48 @@ +/* + * Copyright 2014-2018 the original author or authors. + * + * Licensed 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.springframework.session.jdbc; + +import org.springframework.core.io.ClassPathResource; +import org.springframework.jdbc.datasource.init.DatabasePopulator; +import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; + +/** + * Factories for various {@link DatabasePopulator}s. + * + * @author Vedran Pavic + */ +final class DatabasePopulators { + + private DatabasePopulators() { + } + + static ResourceDatabasePopulator mySql() { + return new ResourceDatabasePopulator(new ClassPathResource( + "org/springframework/session/jdbc/schema-mysql.sql")); + } + + static ResourceDatabasePopulator postgreSql() { + return new ResourceDatabasePopulator(new ClassPathResource( + "org/springframework/session/jdbc/schema-postgresql.sql")); + } + + static ResourceDatabasePopulator sqlServer() { + return new ResourceDatabasePopulator(new ClassPathResource( + "org/springframework/session/jdbc/schema-sqlserver.sql")); + } + +} diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb10JdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb10JdbcOperationsSessionRepositoryITests.java index 690bfcdf..925a0160 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb10JdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb10JdbcOperationsSessionRepositoryITests.java @@ -16,20 +16,11 @@ package org.springframework.session.jdbc; -import java.sql.SQLException; - -import javax.sql.DataSource; - -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; -import org.mariadb.jdbc.MariaDbDataSource; import org.testcontainers.containers.MariaDBContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -45,55 +36,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class MariaDb10JdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static MariaDBContainer container = new MariaDb10Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() throws SQLException { - MariaDbDataSource dataSource = new MariaDbDataSource(container.getJdbcUrl()); - dataSource.setUserName(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public MariaDBContainer databaseContainer() { + MariaDBContainer databaseContainer = DatabaseContainers.mariaDb10(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-mysql.sql"))); - return initializer; - } - - } - - private static class MariaDb10Container extends MariaDBContainer { - - MariaDb10Container() { - super("mariadb:10.3.9"); - } - - @Override - protected void configure() { - super.configure(); - setCommand("mysqld", "--character-set-server=utf8mb4", - "--collation-server=utf8mb4_unicode_ci"); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.mySql(); } } diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb5JdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb5JdbcOperationsSessionRepositoryITests.java index 57b0da74..3b104052 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb5JdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MariaDb5JdbcOperationsSessionRepositoryITests.java @@ -16,20 +16,11 @@ package org.springframework.session.jdbc; -import java.sql.SQLException; - -import javax.sql.DataSource; - -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; -import org.mariadb.jdbc.MariaDbDataSource; import org.testcontainers.containers.MariaDBContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -45,56 +36,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class MariaDb5JdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static MariaDBContainer container = new MariaDb5Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() throws SQLException { - MariaDbDataSource dataSource = new MariaDbDataSource(container.getJdbcUrl()); - dataSource.setUserName(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public MariaDBContainer databaseContainer() { + MariaDBContainer databaseContainer = DatabaseContainers.mariaDb5(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-mysql.sql"))); - return initializer; - } - - } - - private static class MariaDb5Container extends MariaDBContainer { - - MariaDb5Container() { - super("mariadb:5.5.61"); - } - - @Override - protected void configure() { - super.configure(); - setCommand("mysqld", "--character-set-server=utf8mb4", - "--collation-server=utf8mb4_unicode_ci", "--innodb_large_prefix", - "--innodb_file_format=barracuda", "--innodb-file-per-table"); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.mySql(); } } diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql5JdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql5JdbcOperationsSessionRepositoryITests.java index 20624bc1..e9a67c42 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql5JdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql5JdbcOperationsSessionRepositoryITests.java @@ -16,19 +16,11 @@ package org.springframework.session.jdbc; -import javax.sql.DataSource; - -import com.mysql.cj.jdbc.Driver; -import com.mysql.cj.jdbc.MysqlDataSource; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.testcontainers.containers.MySQLContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -43,61 +35,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class MySql5JdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static MySQLContainer container = new MySql5Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() { - MysqlDataSource dataSource = new MysqlDataSource(); - dataSource.setUrl(container.getJdbcUrl()); - dataSource.setUser(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public MySQLContainer databaseContainer() { + MySQLContainer databaseContainer = DatabaseContainers.mySql5(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-mysql.sql"))); - return initializer; - } - - } - - private static class MySql5Container extends MySQLContainer { - - MySql5Container() { - super("mysql:5.7.23"); - } - - @Override - protected void configure() { - super.configure(); - setCommand("mysqld", "--character-set-server=utf8mb4", - "--collation-server=utf8mb4_unicode_ci"); - } - - @Override - public String getDriverClassName() { - return Driver.class.getName(); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.mySql(); } } diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql8JdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql8JdbcOperationsSessionRepositoryITests.java index 7524e1aa..c43a3014 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql8JdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/MySql8JdbcOperationsSessionRepositoryITests.java @@ -16,19 +16,11 @@ package org.springframework.session.jdbc; -import javax.sql.DataSource; - -import com.mysql.cj.jdbc.Driver; -import com.mysql.cj.jdbc.MysqlDataSource; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.testcontainers.containers.MySQLContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -43,60 +35,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class MySql8JdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static MySQLContainer container = new MySql8Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() { - MysqlDataSource dataSource = new MysqlDataSource(); - dataSource.setUrl(container.getJdbcUrl()); - dataSource.setUser(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public MySQLContainer databaseContainer() { + MySQLContainer databaseContainer = DatabaseContainers.mySql8(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-mysql.sql"))); - return initializer; - } - - } - - private static class MySql8Container extends MySQLContainer { - - MySql8Container() { - super("mysql:8.0.12"); - } - - @Override - protected void configure() { - super.configure(); - setCommand("mysqld", "--default-authentication-plugin=mysql_native_password"); - } - - @Override - public String getDriverClassName() { - return Driver.class.getName(); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.mySql(); } } diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql10JdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql10JdbcOperationsSessionRepositoryITests.java index 6684cd6f..0e42f2d3 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql10JdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql10JdbcOperationsSessionRepositoryITests.java @@ -16,18 +16,11 @@ package org.springframework.session.jdbc; -import javax.sql.DataSource; - -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; -import org.postgresql.ds.PGSimpleDataSource; import org.testcontainers.containers.PostgreSQLContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -43,50 +36,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class PostgreSql10JdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static PostgreSQLContainer container = new PostgreSql10Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() { - PGSimpleDataSource dataSource = new PGSimpleDataSource(); - dataSource.setUrl(container.getJdbcUrl()); - dataSource.setUser(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public PostgreSQLContainer databaseContainer() { + PostgreSQLContainer databaseContainer = DatabaseContainers.postgreSql10(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-postgresql.sql"))); - return initializer; - } - - } - - private static class PostgreSql10Container - extends PostgreSQLContainer { - - PostgreSql10Container() { - super("postgres:10.5"); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.postgreSql(); } } diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql9JdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql9JdbcOperationsSessionRepositoryITests.java index c863319c..ea88e0c8 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql9JdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/PostgreSql9JdbcOperationsSessionRepositoryITests.java @@ -16,18 +16,11 @@ package org.springframework.session.jdbc; -import javax.sql.DataSource; - -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; -import org.postgresql.ds.PGSimpleDataSource; import org.testcontainers.containers.PostgreSQLContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -43,50 +36,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class PostgreSql9JdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static PostgreSQLContainer container = new PostgreSql9Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() { - PGSimpleDataSource dataSource = new PGSimpleDataSource(); - dataSource.setUrl(container.getJdbcUrl()); - dataSource.setUser(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public PostgreSQLContainer databaseContainer() { + PostgreSQLContainer databaseContainer = DatabaseContainers.postgreSql9(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-postgresql.sql"))); - return initializer; - } - - } - - private static class PostgreSql9Container - extends PostgreSQLContainer { - - PostgreSql9Container() { - super("postgres:9.6.10"); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.postgreSql(); } } diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/SqlServerJdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/SqlServerJdbcOperationsSessionRepositoryITests.java index 97966cb0..91bd022f 100644 --- a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/SqlServerJdbcOperationsSessionRepositoryITests.java +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/SqlServerJdbcOperationsSessionRepositoryITests.java @@ -16,18 +16,11 @@ package org.springframework.session.jdbc; -import javax.sql.DataSource; - -import com.microsoft.sqlserver.jdbc.SQLServerDataSource; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.testcontainers.containers.MSSQLServerContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ResourceLoader; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -43,52 +36,21 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @ContextConfiguration public class SqlServerJdbcOperationsSessionRepositoryITests - extends AbstractJdbcOperationsSessionRepositoryITests { - - private static MSSQLServerContainer container = new SqlServer2007Container(); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } + extends AbstractContainerJdbcOperationsSessionRepositoryITests { @Configuration - static class Config extends BaseConfig { + static class Config extends BaseContainerConfig { @Bean - public DataSource dataSource() { - SQLServerDataSource dataSource = new SQLServerDataSource(); - dataSource.setURL(container.getJdbcUrl()); - dataSource.setUser(container.getUsername()); - dataSource.setPassword(container.getPassword()); - return dataSource; + public MSSQLServerContainer databaseContainer() { + MSSQLServerContainer databaseContainer = DatabaseContainers.sqlServer2017(); + databaseContainer.start(); + return databaseContainer; } @Bean - public DataSourceInitializer initializer(DataSource dataSource, - ResourceLoader resourceLoader) { - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator( - new ResourceDatabasePopulator(resourceLoader.getResource( - "classpath:org/springframework/session/jdbc/schema-sqlserver.sql"))); - return initializer; - } - - } - - private static class SqlServer2007Container - extends MSSQLServerContainer { - - SqlServer2007Container() { - super("microsoft/mssql-server-linux:2017-CU10"); - withStartupTimeoutSeconds(240); - withConnectTimeoutSeconds(240); + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.sqlServer(); } }