diff --git a/spring-session-jdbc/spring-session-jdbc.gradle b/spring-session-jdbc/spring-session-jdbc.gradle index 366c3c96..a1f22446 100644 --- a/spring-session-jdbc/spring-session-jdbc.gradle +++ b/spring-session-jdbc/spring-session-jdbc.gradle @@ -22,5 +22,6 @@ dependencies { integrationTestCompile "org.testcontainers:mariadb" integrationTestCompile "org.testcontainers:mssqlserver" integrationTestCompile "org.testcontainers:mysql" + integrationTestCompile "org.testcontainers:oracle-xe" integrationTestCompile "org.testcontainers:postgresql" } 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 index f04df1bc..d26f5d2c 100644 --- 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 @@ -20,6 +20,7 @@ import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.containers.MSSQLServerContainer; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.containers.OracleContainer; import org.testcontainers.containers.PostgreSQLContainer; /** @@ -48,6 +49,10 @@ final class DatabaseContainers { return new MySql8Container(); } + static OracleContainer oracle() { + return new OracleContainer(); + } + static PostgreSQLContainer postgreSql9() { return new PostgreSql9Container(); } 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 index b4f83ce0..b7c74e12 100644 --- 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 @@ -35,6 +35,11 @@ final class DatabasePopulators { "org/springframework/session/jdbc/schema-mysql.sql")); } + static ResourceDatabasePopulator oracle() { + return new ResourceDatabasePopulator(new ClassPathResource( + "org/springframework/session/jdbc/schema-oracle.sql")); + } + static ResourceDatabasePopulator postgreSql() { return new ResourceDatabasePopulator(new ClassPathResource( "org/springframework/session/jdbc/schema-postgresql.sql")); diff --git a/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/OracleJdbcOperationsSessionRepositoryITests.java b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/OracleJdbcOperationsSessionRepositoryITests.java new file mode 100644 index 00000000..33a6f0cd --- /dev/null +++ b/spring-session-jdbc/src/integration-test/java/org/springframework/session/jdbc/OracleJdbcOperationsSessionRepositoryITests.java @@ -0,0 +1,73 @@ +/* + * 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.junit.Assume; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.testcontainers.containers.OracleContainer; +import org.testcontainers.utility.TestcontainersConfiguration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.util.ClassUtils; + +/** + * Integration tests for {@link JdbcOperationsSessionRepository} using Oracle database. + *

+ * This test is conditional on presence of Oracle JDBC driver on the classpath and + * Testcontainers property {@code oracle.container.image} being set. + * + * @author Vedran Pavic + */ +@RunWith(SpringRunner.class) +@WebAppConfiguration +@ContextConfiguration +public class OracleJdbcOperationsSessionRepositoryITests + extends AbstractContainerJdbcOperationsSessionRepositoryITests { + + @BeforeClass + public static void setUpClass() { + Assume.assumeTrue("Oracle JDBC driver is present on the classpath", + ClassUtils.isPresent("oracle.jdbc.OracleDriver", null)); + Assume.assumeTrue("Testcontainers property `oracle.container.image` is set", + TestcontainersConfiguration.getInstance().getProperties() + .getProperty("oracle.container.image") != null); + } + + @Configuration + static class Config extends BaseContainerConfig { + + @Bean + public OracleContainer databaseContainer() { + OracleContainer databaseContainer = DatabaseContainers.oracle(); + databaseContainer.start(); + return databaseContainer; + } + + @Bean + public ResourceDatabasePopulator databasePopulator() { + return DatabasePopulators.oracle(); + } + + } + +}