Use TestContainers for integration tests
This commit is contained in:
12
.travis.yml
12
.travis.yml
@@ -1,20 +1,20 @@
|
|||||||
language: java
|
language: java
|
||||||
|
|
||||||
services:
|
sudo: required
|
||||||
- redis-server
|
|
||||||
|
|
||||||
jdk:
|
services: docker
|
||||||
- oraclejdk8
|
|
||||||
|
|
||||||
os:
|
jdk: oraclejdk8
|
||||||
- linux
|
|
||||||
|
|
||||||
before_cache:
|
before_cache:
|
||||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||||
|
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- $HOME/.gradle/caches/
|
- $HOME/.gradle/caches/
|
||||||
- $HOME/.gradle/wrapper/
|
- $HOME/.gradle/wrapper/
|
||||||
|
|
||||||
install: true
|
install: true
|
||||||
|
|
||||||
script: ./gradlew clean build --refresh-dependencies --no-daemon
|
script: ./gradlew clean build --refresh-dependencies --no-daemon
|
||||||
|
|||||||
@@ -12,6 +12,12 @@ dependencyManagement {
|
|||||||
entry 'hazelcast-client'
|
entry 'hazelcast-client'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencySet(group: 'org.testcontainers', version: '1.4.2') {
|
||||||
|
entry 'mysql'
|
||||||
|
entry 'postgresql'
|
||||||
|
entry 'testcontainers'
|
||||||
|
}
|
||||||
|
|
||||||
dependency 'ch.qos.logback:logback-classic:1.2.3'
|
dependency 'ch.qos.logback:logback-classic:1.2.3'
|
||||||
dependency 'com.fasterxml.jackson.core:jackson-databind:2.9.0.pr4'
|
dependency 'com.fasterxml.jackson.core:jackson-databind:2.9.0.pr4'
|
||||||
dependency 'com.h2database:h2:1.4.196'
|
dependency 'com.h2database:h2:1.4.196'
|
||||||
@@ -23,15 +29,19 @@ dependencyManagement {
|
|||||||
dependency 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02'
|
dependency 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02'
|
||||||
dependency 'javax.servlet:javax.servlet-api:3.1.0'
|
dependency 'javax.servlet:javax.servlet-api:3.1.0'
|
||||||
dependency 'junit:junit:4.12'
|
dependency 'junit:junit:4.12'
|
||||||
|
dependency 'mysql:mysql-connector-java:5.1.43'
|
||||||
dependency 'org.apache.derby:derby:10.13.1.1'
|
dependency 'org.apache.derby:derby:10.13.1.1'
|
||||||
dependency 'org.apache.httpcomponents:httpclient:4.5.3'
|
dependency 'org.apache.httpcomponents:httpclient:4.5.3'
|
||||||
dependency 'org.apache.taglibs:taglibs-standard-jstlel:1.2.5'
|
dependency 'org.apache.taglibs:taglibs-standard-jstlel:1.2.5'
|
||||||
dependency 'org.assertj:assertj-core:3.8.0'
|
dependency 'org.assertj:assertj-core:3.8.0'
|
||||||
dependency 'org.hsqldb:hsqldb:2.4.0'
|
dependency 'org.hsqldb:hsqldb:2.4.0'
|
||||||
|
dependency 'org.mariadb.jdbc:mariadb-java-client:2.0.3'
|
||||||
dependency 'org.mockito:mockito-core:2.8.47'
|
dependency 'org.mockito:mockito-core:2.8.47'
|
||||||
|
dependency 'org.postgresql:postgresql:42.1.3'
|
||||||
dependency 'org.seleniumhq.selenium:htmlunit-driver:2.27'
|
dependency 'org.seleniumhq.selenium:htmlunit-driver:2.27'
|
||||||
dependency 'org.slf4j:jcl-over-slf4j:1.7.25'
|
dependency 'org.slf4j:jcl-over-slf4j:1.7.25'
|
||||||
dependency 'org.slf4j:log4j-over-slf4j:1.7.25'
|
dependency 'org.slf4j:log4j-over-slf4j:1.7.25'
|
||||||
|
dependency 'org.testcontainers:mariadb:1.3.0'
|
||||||
dependency 'org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.0.RELEASE'
|
dependency 'org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.0.RELEASE'
|
||||||
dependency 'org.thymeleaf:thymeleaf-spring5:3.0.7.RC1'
|
dependency 'org.thymeleaf:thymeleaf-spring5:3.0.7.RC1'
|
||||||
dependency 'org.webjars:bootstrap:2.3.2'
|
dependency 'org.webjars:bootstrap:2.3.2'
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ dependencies {
|
|||||||
testCompile "org.assertj:assertj-core"
|
testCompile "org.assertj:assertj-core"
|
||||||
|
|
||||||
integrationTestCompile seleniumDependencies
|
integrationTestCompile seleniumDependencies
|
||||||
|
integrationTestCompile "org.testcontainers:testcontainers"
|
||||||
}
|
}
|
||||||
|
|
||||||
integrationTest {
|
integrationTest {
|
||||||
|
|||||||
@@ -18,9 +18,11 @@ package sample;
|
|||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.ClassRule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
import sample.pages.HomePage;
|
import sample.pages.HomePage;
|
||||||
import sample.pages.LoginPage;
|
import sample.pages.LoginPage;
|
||||||
|
|
||||||
@@ -28,6 +30,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.MockMvc;
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
|
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
|
||||||
@@ -35,12 +41,20 @@ import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDr
|
|||||||
/**
|
/**
|
||||||
* @author Eddú Meléndez
|
* @author Eddú Meléndez
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
|
* @author Vedran Pavic
|
||||||
*/
|
*/
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@AutoConfigureMockMvc
|
@AutoConfigureMockMvc
|
||||||
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
|
@SpringBootTest(classes = FindByUsernameApplication.class, webEnvironment = WebEnvironment.MOCK)
|
||||||
|
@ContextConfiguration(initializers = FindByUsernameTests.Initializer.class)
|
||||||
public class FindByUsernameTests {
|
public class FindByUsernameTests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MockMvc mockMvc;
|
private MockMvc mockMvc;
|
||||||
|
|
||||||
@@ -72,4 +86,18 @@ public class FindByUsernameTests {
|
|||||||
home.terminateButtonDisabled();
|
home.terminateButtonDisabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class Initializer
|
||||||
|
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(
|
||||||
|
ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues
|
||||||
|
.of("spring.redis.host=" + redisContainer.getContainerIpAddress(),
|
||||||
|
"spring.redis.port=" + redisContainer.getFirstMappedPort())
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,4 +18,5 @@ dependencies {
|
|||||||
testCompile "org.skyscreamer:jsonassert"
|
testCompile "org.skyscreamer:jsonassert"
|
||||||
|
|
||||||
integrationTestCompile seleniumDependencies
|
integrationTestCompile seleniumDependencies
|
||||||
|
integrationTestCompile "org.testcontainers:testcontainers"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.ClassRule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
import sample.pages.HomePage;
|
import sample.pages.HomePage;
|
||||||
import sample.pages.HomePage.Attribute;
|
import sample.pages.HomePage.Attribute;
|
||||||
import sample.pages.LoginPage;
|
import sample.pages.LoginPage;
|
||||||
@@ -31,6 +33,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.MockMvc;
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
|
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
|
||||||
@@ -39,12 +45,20 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Eddú Meléndez
|
* @author Eddú Meléndez
|
||||||
|
* @author Vedran Pavic
|
||||||
*/
|
*/
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
|
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK)
|
||||||
@AutoConfigureMockMvc
|
@AutoConfigureMockMvc
|
||||||
|
@ContextConfiguration(initializers = HttpRedisJsonTest.Initializer.class)
|
||||||
public class HttpRedisJsonTest {
|
public class HttpRedisJsonTest {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MockMvc mockMvc;
|
private MockMvc mockMvc;
|
||||||
|
|
||||||
@@ -96,4 +110,18 @@ public class HttpRedisJsonTest {
|
|||||||
assertThat(attributes).extracting("attributeValue").contains("Demo Value");
|
assertThat(attributes).extracting("attributeValue").contains("Demo Value");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class Initializer
|
||||||
|
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(
|
||||||
|
ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues
|
||||||
|
.of("spring.redis.host=" + redisContainer.getContainerIpAddress(),
|
||||||
|
"spring.redis.port=" + redisContainer.getFirstMappedPort())
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-2016 the original author or authors.
|
* Copyright 2014-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -13,28 +13,43 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sample;
|
package sample;
|
||||||
|
|
||||||
|
import org.junit.ClassRule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
|
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jitendra on 8/3/16.
|
* @author jitendra
|
||||||
|
* @author Vedran Pavic
|
||||||
*/
|
*/
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@SpringBootTest
|
@SpringBootTest(classes = Application.class)
|
||||||
|
@ContextConfiguration(initializers = RedisSerializerTest.Initializer.class)
|
||||||
public class RedisSerializerTest {
|
public class RedisSerializerTest {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
RedisTemplate<Object, Object> sessionRedisTemplate;
|
private RedisTemplate<Object, Object> sessionRedisTemplate;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRedisTemplate() {
|
public void testRedisTemplate() {
|
||||||
@@ -43,4 +58,19 @@ public class RedisSerializerTest {
|
|||||||
assertThat(this.sessionRedisTemplate.getDefaultSerializer())
|
assertThat(this.sessionRedisTemplate.getDefaultSerializer())
|
||||||
.isInstanceOf(GenericJackson2JsonRedisSerializer.class);
|
.isInstanceOf(GenericJackson2JsonRedisSerializer.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class Initializer
|
||||||
|
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(
|
||||||
|
ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues
|
||||||
|
.of("spring.redis.host=" + redisContainer.getContainerIpAddress(),
|
||||||
|
"spring.redis.port=" + redisContainer.getFirstMappedPort())
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ dependencies {
|
|||||||
testCompile "org.springframework.boot:spring-boot-starter-test"
|
testCompile "org.springframework.boot:spring-boot-starter-test"
|
||||||
|
|
||||||
integrationTestCompile seleniumDependencies
|
integrationTestCompile seleniumDependencies
|
||||||
|
integrationTestCompile "org.testcontainers:testcontainers"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,9 +18,11 @@ package sample;
|
|||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.ClassRule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
import sample.pages.HomePage;
|
import sample.pages.HomePage;
|
||||||
import sample.pages.LoginPage;
|
import sample.pages.LoginPage;
|
||||||
|
|
||||||
@@ -28,18 +30,30 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.MockMvc;
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
|
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Eddú Meléndez
|
* @author Eddú Meléndez
|
||||||
|
* @author Vedran Pavic
|
||||||
*/
|
*/
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@AutoConfigureMockMvc
|
@AutoConfigureMockMvc
|
||||||
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
|
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK)
|
||||||
|
@ContextConfiguration(initializers = BootTests.Initializer.class)
|
||||||
public class BootTests {
|
public class BootTests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MockMvc mockMvc;
|
private MockMvc mockMvc;
|
||||||
|
|
||||||
@@ -78,4 +92,18 @@ public class BootTests {
|
|||||||
login.assertAt();
|
login.assertAt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class Initializer
|
||||||
|
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(
|
||||||
|
ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues
|
||||||
|
.of("spring.redis.host=" + redisContainer.getContainerIpAddress(),
|
||||||
|
"spring.redis.port=" + redisContainer.getFirstMappedPort())
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,4 +23,5 @@ dependencies {
|
|||||||
|
|
||||||
testCompile "org.springframework.boot:spring-boot-starter-test"
|
testCompile "org.springframework.boot:spring-boot-starter-test"
|
||||||
testCompile "org.springframework.security:spring-security-test"
|
testCompile "org.springframework.security:spring-security-test"
|
||||||
|
testCompile "org.testcontainers:testcontainers"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,14 +20,21 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
|
import org.junit.ClassRule;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.ExpectedException;
|
import org.junit.rules.ExpectedException;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.util.concurrent.ListenableFuture;
|
import org.springframework.util.concurrent.ListenableFuture;
|
||||||
import org.springframework.web.socket.TextMessage;
|
import org.springframework.web.socket.TextMessage;
|
||||||
@@ -41,18 +48,27 @@ import org.springframework.web.socket.sockjs.client.WebSocketTransport;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
|
* @author Vedran Pavic
|
||||||
*/
|
*/
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
|
||||||
|
@ContextConfiguration(initializers = ApplicationTests.Initializer.class)
|
||||||
public class ApplicationTests {
|
public class ApplicationTests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final ExpectedException thrown = ExpectedException.none();
|
public final ExpectedException thrown = ExpectedException.none();
|
||||||
|
|
||||||
@Value("${local.server.port}")
|
@Value("${local.server.port}")
|
||||||
String port;
|
private String port;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
WebSocketHandler webSocketHandler;
|
private WebSocketHandler webSocketHandler;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
@@ -67,4 +83,19 @@ public class ApplicationTests {
|
|||||||
this.thrown.expect(ExecutionException.class);
|
this.thrown.expect(ExecutionException.class);
|
||||||
wsSession.get().sendMessage(new TextMessage("a"));
|
wsSession.get().sendMessage(new TextMessage("a"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class Initializer
|
||||||
|
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(
|
||||||
|
ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues
|
||||||
|
.of("spring.redis.host=" + redisContainer.getContainerIpAddress(),
|
||||||
|
"spring.redis.port=" + redisContainer.getFirstMappedPort())
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,4 +17,6 @@ dependencies {
|
|||||||
testCompile "org.assertj:assertj-core"
|
testCompile "org.assertj:assertj-core"
|
||||||
testCompile "org.springframework:spring-test"
|
testCompile "org.springframework:spring-test"
|
||||||
testCompile "commons-codec:commons-codec"
|
testCompile "commons-codec:commons-codec"
|
||||||
|
|
||||||
|
integrationTestCompile "org.testcontainers:testcontainers"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,16 +17,22 @@
|
|||||||
package rest;
|
package rest;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.ClassRule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
import sample.HttpSessionConfig;
|
|
||||||
import sample.SecurityConfig;
|
import sample.SecurityConfig;
|
||||||
import sample.mvc.MvcConfig;
|
import sample.mvc.MvcConfig;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||||
import org.springframework.security.test.context.support.WithMockUser;
|
import org.springframework.security.test.context.support.WithMockUser;
|
||||||
import org.springframework.session.Session;
|
import org.springframework.session.Session;
|
||||||
|
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
||||||
|
import org.springframework.session.web.http.HeaderHttpSessionStrategy;
|
||||||
|
import org.springframework.session.web.http.HttpSessionStrategy;
|
||||||
import org.springframework.session.web.http.SessionRepositoryFilter;
|
import org.springframework.session.web.http.SessionRepositoryFilter;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
@@ -44,18 +50,24 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@ContextConfiguration(classes = { HttpSessionConfig.class, SecurityConfig.class,
|
@ContextConfiguration(classes = { RestMockMvcTests.Config.class, SecurityConfig.class,
|
||||||
MvcConfig.class })
|
MvcConfig.class })
|
||||||
@WebAppConfiguration
|
@WebAppConfiguration
|
||||||
public class RestMockMvcTests {
|
public class RestMockMvcTests {
|
||||||
|
|
||||||
@Autowired
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
SessionRepositoryFilter<? extends Session> sessionRepositoryFilter;
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
WebApplicationContext context;
|
private SessionRepositoryFilter<? extends Session> sessionRepositoryFilter;
|
||||||
|
|
||||||
MockMvc mvc;
|
@Autowired
|
||||||
|
private WebApplicationContext context;
|
||||||
|
|
||||||
|
private MockMvc mvc;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
@@ -81,4 +93,21 @@ public class RestMockMvcTests {
|
|||||||
.andExpect(content().string("{\"username\":\"user\"}"));
|
.andExpect(content().string("{\"username\":\"user\"}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableRedisHttpSession
|
||||||
|
static class Config {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public LettuceConnectionFactory redisConnectionFactory() {
|
||||||
|
return new LettuceConnectionFactory(redisContainer.getContainerIpAddress(),
|
||||||
|
redisContainer.getFirstMappedPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public HttpSessionStrategy httpSessionStrategy() {
|
||||||
|
return new HeaderHttpSessionStrategy();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ dependencies {
|
|||||||
|
|
||||||
integrationTestCompile "redis.clients:jedis"
|
integrationTestCompile "redis.clients:jedis"
|
||||||
integrationTestCompile "org.apache.commons:commons-pool2"
|
integrationTestCompile "org.apache.commons:commons-pool2"
|
||||||
|
integrationTestCompile "org.testcontainers:testcontainers"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014-2016 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.data;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
||||||
import org.springframework.security.core.authority.AuthorityUtils;
|
|
||||||
import org.springframework.security.core.context.SecurityContext;
|
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
|
||||||
import org.springframework.test.context.web.WebAppConfiguration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for repositories integration tests
|
|
||||||
*
|
|
||||||
* @author Jakub Kubrynski
|
|
||||||
*/
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
|
||||||
@WebAppConfiguration
|
|
||||||
public abstract class AbstractITests {
|
|
||||||
|
|
||||||
protected SecurityContext context;
|
|
||||||
|
|
||||||
protected SecurityContext changedContext;
|
|
||||||
|
|
||||||
@Autowired(required = false)
|
|
||||||
protected SessionEventRegistry registry;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setup() {
|
|
||||||
if (this.registry != null) {
|
|
||||||
this.registry.clear();
|
|
||||||
}
|
|
||||||
this.context = SecurityContextHolder.createEmptyContext();
|
|
||||||
this.context.setAuthentication(
|
|
||||||
new UsernamePasswordAuthenticationToken("username-" + UUID.randomUUID(),
|
|
||||||
"na", AuthorityUtils.createAuthorityList("ROLE_USER")));
|
|
||||||
|
|
||||||
this.changedContext = SecurityContextHolder.createEmptyContext();
|
|
||||||
this.changedContext.setAuthentication(new UsernamePasswordAuthenticationToken(
|
|
||||||
"changedContext-" + UUID.randomUUID(), "na",
|
|
||||||
AuthorityUtils.createAuthorityList("ROLE_USER")));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014-2017 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.data.redis;
|
||||||
|
|
||||||
|
import org.junit.ClassRule;
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
|
||||||
|
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for {@link RedisOperationsSessionRepository} integration tests.
|
||||||
|
*
|
||||||
|
* @author Vedran Pavic
|
||||||
|
*/
|
||||||
|
public abstract class AbstractRedisITests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "redis:3.2.9";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
|
||||||
|
.withExposedPorts(6379);
|
||||||
|
|
||||||
|
protected static class BaseConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public JedisConnectionFactory connectionFactory() {
|
||||||
|
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(
|
||||||
|
redisContainer.getContainerIpAddress(),
|
||||||
|
redisContainer.getFirstMappedPort());
|
||||||
|
return new JedisConnectionFactory(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,18 +13,20 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.session.data.redis;
|
package org.springframework.session.data.redis;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.data.redis.connection.DefaultMessage;
|
import org.springframework.data.redis.connection.DefaultMessage;
|
||||||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
|
||||||
import org.springframework.data.redis.core.RedisOperations;
|
import org.springframework.data.redis.core.RedisOperations;
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
@@ -33,18 +35,22 @@ import org.springframework.security.core.context.SecurityContext;
|
|||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.session.FindByIndexNameSessionRepository;
|
import org.springframework.session.FindByIndexNameSessionRepository;
|
||||||
import org.springframework.session.Session;
|
import org.springframework.session.Session;
|
||||||
import org.springframework.session.data.AbstractITests;
|
|
||||||
import org.springframework.session.data.SessionEventRegistry;
|
import org.springframework.session.data.SessionEventRegistry;
|
||||||
import org.springframework.session.data.redis.RedisOperationsSessionRepository.RedisSession;
|
import org.springframework.session.data.redis.RedisOperationsSessionRepository.RedisSession;
|
||||||
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
||||||
import org.springframework.session.events.SessionCreatedEvent;
|
import org.springframework.session.events.SessionCreatedEvent;
|
||||||
import org.springframework.session.events.SessionDestroyedEvent;
|
import org.springframework.session.events.SessionDestroyedEvent;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.web.WebAppConfiguration;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@ContextConfiguration
|
@ContextConfiguration
|
||||||
public class RedisOperationsSessionRepositoryITests extends AbstractITests {
|
@WebAppConfiguration
|
||||||
|
public class RedisOperationsSessionRepositoryITests extends AbstractRedisITests {
|
||||||
|
|
||||||
private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT";
|
private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT";
|
||||||
|
|
||||||
private static final String INDEX_NAME = FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME;
|
private static final String INDEX_NAME = FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME;
|
||||||
@@ -53,7 +59,30 @@ public class RedisOperationsSessionRepositoryITests extends AbstractITests {
|
|||||||
private RedisOperationsSessionRepository repository;
|
private RedisOperationsSessionRepository repository;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
RedisOperations<Object, Object> redis;
|
private SessionEventRegistry registry;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisOperations<Object, Object> redis;
|
||||||
|
|
||||||
|
private SecurityContext context;
|
||||||
|
|
||||||
|
private SecurityContext changedContext;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
if (this.registry != null) {
|
||||||
|
this.registry.clear();
|
||||||
|
}
|
||||||
|
this.context = SecurityContextHolder.createEmptyContext();
|
||||||
|
this.context.setAuthentication(
|
||||||
|
new UsernamePasswordAuthenticationToken("username-" + UUID.randomUUID(),
|
||||||
|
"na", AuthorityUtils.createAuthorityList("ROLE_USER")));
|
||||||
|
|
||||||
|
this.changedContext = SecurityContextHolder.createEmptyContext();
|
||||||
|
this.changedContext.setAuthentication(new UsernamePasswordAuthenticationToken(
|
||||||
|
"changedContext-" + UUID.randomUUID(), "na",
|
||||||
|
AuthorityUtils.createAuthorityList("ROLE_USER")));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void saves() throws InterruptedException {
|
public void saves() throws InterruptedException {
|
||||||
@@ -547,15 +576,13 @@ public class RedisOperationsSessionRepositoryITests extends AbstractITests {
|
|||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableRedisHttpSession(redisNamespace = "RedisOperationsSessionRepositoryITests")
|
@EnableRedisHttpSession(redisNamespace = "RedisOperationsSessionRepositoryITests")
|
||||||
static class Config {
|
static class Config extends BaseConfig {
|
||||||
@Bean
|
|
||||||
public JedisConnectionFactory connectionFactory() throws Exception {
|
|
||||||
return new JedisConnectionFactory();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SessionEventRegistry sessionEventRegistry() {
|
public SessionEventRegistry sessionEventRegistry() {
|
||||||
return new SessionEventRegistry();
|
return new SessionEventRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.ApplicationListener;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.authority.AuthorityUtils;
|
import org.springframework.security.core.authority.AuthorityUtils;
|
||||||
@@ -34,6 +33,7 @@ import org.springframework.security.core.context.SecurityContext;
|
|||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.session.Session;
|
import org.springframework.session.Session;
|
||||||
import org.springframework.session.SessionRepository;
|
import org.springframework.session.SessionRepository;
|
||||||
|
import org.springframework.session.data.redis.AbstractRedisITests;
|
||||||
import org.springframework.session.events.SessionExpiredEvent;
|
import org.springframework.session.events.SessionExpiredEvent;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
@@ -44,7 +44,9 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@ContextConfiguration
|
@ContextConfiguration
|
||||||
@WebAppConfiguration
|
@WebAppConfiguration
|
||||||
public class EnableRedisHttpSessionExpireSessionDestroyedTests<S extends Session> {
|
public class EnableRedisHttpSessionExpireSessionDestroyedTests<S extends Session>
|
||||||
|
extends AbstractRedisITests {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SessionRepository<S> repository;
|
private SessionRepository<S> repository;
|
||||||
|
|
||||||
@@ -110,15 +112,13 @@ public class EnableRedisHttpSessionExpireSessionDestroyedTests<S extends Session
|
|||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1)
|
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1)
|
||||||
static class Config {
|
static class Config extends BaseConfig {
|
||||||
@Bean
|
|
||||||
public JedisConnectionFactory connectionFactory() throws Exception {
|
|
||||||
return new JedisConnectionFactory();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SessionExpiredEventRegistry sessionDestroyedEventRegistry() {
|
public SessionExpiredEventRegistry sessionDestroyedEventRegistry() {
|
||||||
return new SessionExpiredEventRegistry();
|
return new SessionExpiredEventRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014-2016 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.data.redis.flushimmediately;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
|
||||||
import org.springframework.session.data.redis.RedisFlushMode;
|
|
||||||
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Rob Winch
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.IMMEDIATE)
|
|
||||||
public class RedisHttpSessionConfig {
|
|
||||||
@Bean
|
|
||||||
public JedisConnectionFactory connectionFactory() throws Exception {
|
|
||||||
return new JedisConnectionFactory();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -20,8 +20,12 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.session.Session;
|
import org.springframework.session.Session;
|
||||||
import org.springframework.session.SessionRepository;
|
import org.springframework.session.SessionRepository;
|
||||||
|
import org.springframework.session.data.redis.AbstractRedisITests;
|
||||||
|
import org.springframework.session.data.redis.RedisFlushMode;
|
||||||
|
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
import org.springframework.test.context.web.WebAppConfiguration;
|
import org.springframework.test.context.web.WebAppConfiguration;
|
||||||
@@ -29,9 +33,10 @@ import org.springframework.test.context.web.WebAppConfiguration;
|
|||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@ContextConfiguration(classes = RedisHttpSessionConfig.class)
|
@ContextConfiguration
|
||||||
@WebAppConfiguration
|
@WebAppConfiguration
|
||||||
public class RedisOperationsSessionRepositoryFlushImmediatelyITests<S extends Session> {
|
public class RedisOperationsSessionRepositoryFlushImmediatelyITests<S extends Session>
|
||||||
|
extends AbstractRedisITests {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SessionRepository<S> sessionRepository;
|
private SessionRepository<S> sessionRepository;
|
||||||
@@ -44,4 +49,11 @@ public class RedisOperationsSessionRepositoryFlushImmediatelyITests<S extends Se
|
|||||||
|
|
||||||
assertThat(getSession).isNotNull();
|
assertThat(getSession).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.IMMEDIATE)
|
||||||
|
static class RedisHttpSessionConfig extends BaseConfig {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-2016 the original author or authors.
|
* Copyright 2014-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -28,9 +28,9 @@ import org.springframework.context.annotation.Bean;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.core.task.SimpleAsyncTaskExecutor;
|
import org.springframework.core.task.SimpleAsyncTaskExecutor;
|
||||||
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.core.task.TaskExecutor;
|
||||||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
|
||||||
import org.springframework.data.redis.core.BoundSetOperations;
|
import org.springframework.data.redis.core.BoundSetOperations;
|
||||||
import org.springframework.data.redis.core.RedisOperations;
|
import org.springframework.data.redis.core.RedisOperations;
|
||||||
|
import org.springframework.session.data.redis.AbstractRedisITests;
|
||||||
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
@@ -44,13 +44,13 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@ContextConfiguration
|
@ContextConfiguration
|
||||||
@WebAppConfiguration
|
@WebAppConfiguration
|
||||||
public class RedisListenerContainerTaskExecutorITests {
|
public class RedisListenerContainerTaskExecutorITests extends AbstractRedisITests {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
SessionTaskExecutor executor;
|
private SessionTaskExecutor executor;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
RedisOperations<Object, Object> redis;
|
private RedisOperations<Object, Object> redis;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRedisDelEventsAreDispatchedInSessionTaskExecutor()
|
public void testRedisDelEventsAreDispatchedInSessionTaskExecutor()
|
||||||
@@ -99,21 +99,18 @@ public class RedisListenerContainerTaskExecutorITests {
|
|||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableRedisHttpSession(redisNamespace = "RedisListenerContainerTaskExecutorITests")
|
@EnableRedisHttpSession(redisNamespace = "RedisListenerContainerTaskExecutorITests")
|
||||||
static class Config {
|
static class Config extends BaseConfig {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
JedisConnectionFactory connectionFactory() throws Exception {
|
public Executor springSessionRedisTaskExecutor() {
|
||||||
return new JedisConnectionFactory();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
Executor springSessionRedisTaskExecutor() {
|
|
||||||
return new SessionTaskExecutor(Executors.newSingleThreadExecutor());
|
return new SessionTaskExecutor(Executors.newSingleThreadExecutor());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
Executor springSessionRedisSubscriptionExecutor() {
|
public Executor springSessionRedisSubscriptionExecutor() {
|
||||||
return new SimpleAsyncTaskExecutor();
|
return new SimpleAsyncTaskExecutor();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,13 @@ dependencies {
|
|||||||
testCompile "org.springframework:spring-web"
|
testCompile "org.springframework:spring-web"
|
||||||
testCompile "org.springframework.security:spring-security-core"
|
testCompile "org.springframework.security:spring-security-core"
|
||||||
|
|
||||||
integrationTestCompile "org.apache.derby:derby"
|
|
||||||
integrationTestCompile "com.h2database:h2"
|
integrationTestCompile "com.h2database:h2"
|
||||||
|
integrationTestCompile "mysql:mysql-connector-java"
|
||||||
|
integrationTestCompile "org.apache.derby:derby"
|
||||||
integrationTestCompile "org.hsqldb:hsqldb"
|
integrationTestCompile "org.hsqldb:hsqldb"
|
||||||
|
integrationTestCompile "org.mariadb.jdbc:mariadb-java-client"
|
||||||
|
integrationTestCompile "org.postgresql:postgresql"
|
||||||
|
integrationTestCompile "org.testcontainers:mariadb"
|
||||||
|
integrationTestCompile "org.testcontainers:mysql"
|
||||||
|
integrationTestCompile "org.testcontainers:postgresql"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import javax.sql.DataSource;
|
|||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@@ -40,9 +39,6 @@ import org.springframework.session.FindByIndexNameSessionRepository;
|
|||||||
import org.springframework.session.MapSession;
|
import org.springframework.session.MapSession;
|
||||||
import org.springframework.session.Session;
|
import org.springframework.session.Session;
|
||||||
import org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession;
|
import org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
|
||||||
import org.springframework.test.context.web.WebAppConfiguration;
|
|
||||||
import org.springframework.transaction.PlatformTransactionManager;
|
import org.springframework.transaction.PlatformTransactionManager;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -54,9 +50,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
* @author Vedran Pavic
|
* @author Vedran Pavic
|
||||||
* @since 1.2.0
|
* @since 1.2.0
|
||||||
*/
|
*/
|
||||||
@WebAppConfiguration
|
|
||||||
@ContextConfiguration
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
|
||||||
public abstract class AbstractJdbcOperationsSessionRepositoryITests {
|
public abstract class AbstractJdbcOperationsSessionRepositoryITests {
|
||||||
|
|
||||||
private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT";
|
private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT";
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014-2017 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 java.sql.SQLException;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.junit.ClassRule;
|
||||||
|
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.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.web.WebAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration tests for {@link JdbcOperationsSessionRepository} using MariaDB 10.x
|
||||||
|
* database.
|
||||||
|
*
|
||||||
|
* @author Vedran Pavic
|
||||||
|
*/
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@WebAppConfiguration
|
||||||
|
@ContextConfiguration
|
||||||
|
public class MariaDB10JdbcOperationsSessionRepositoryITests
|
||||||
|
extends AbstractJdbcOperationsSessionRepositoryITests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "mariadb:10.2.7";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static MariaDBContainer mariaDBContainer = new MariaDBContainer(DOCKER_IMAGE);
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class Config extends BaseConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DataSource dataSource() throws SQLException {
|
||||||
|
MariaDbDataSource dataSource = new MariaDbDataSource(
|
||||||
|
mariaDBContainer.getJdbcUrl());
|
||||||
|
dataSource.setUserName(mariaDBContainer.getUsername());
|
||||||
|
dataSource.setPassword(mariaDBContainer.getPassword());
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014-2017 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 java.sql.SQLException;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.junit.ClassRule;
|
||||||
|
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.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.web.WebAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration tests for {@link JdbcOperationsSessionRepository} using MariaDB 5.x
|
||||||
|
* database.
|
||||||
|
*
|
||||||
|
* @author Vedran Pavic
|
||||||
|
*/
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@WebAppConfiguration
|
||||||
|
@ContextConfiguration
|
||||||
|
public class MariaDB5JdbcOperationsSessionRepositoryITests
|
||||||
|
extends AbstractJdbcOperationsSessionRepositoryITests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "mariadb:5.5.56";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static MariaDBContainer mariaDBContainer = new MariaDBContainer(DOCKER_IMAGE);
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class Config extends BaseConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DataSource dataSource() throws SQLException {
|
||||||
|
MariaDbDataSource dataSource = new MariaDbDataSource(
|
||||||
|
mariaDBContainer.getJdbcUrl());
|
||||||
|
dataSource.setUserName(mariaDBContainer.getUsername());
|
||||||
|
dataSource.setPassword(mariaDBContainer.getPassword());
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014-2017 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.mysql.jdbc.jdbc2.optional.MysqlDataSource;
|
||||||
|
import org.junit.ClassRule;
|
||||||
|
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.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.web.WebAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration tests for {@link JdbcOperationsSessionRepository} using MySQL 5.x database.
|
||||||
|
*
|
||||||
|
* @author Vedran Pavic
|
||||||
|
*/
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@WebAppConfiguration
|
||||||
|
@ContextConfiguration
|
||||||
|
public class MySQL5JdbcOperationsSessionRepositoryITests
|
||||||
|
extends AbstractJdbcOperationsSessionRepositoryITests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "mysql:5.7.18";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static MySQLContainer mySQLContainer = new MySQLContainer(DOCKER_IMAGE);
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class Config extends BaseConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DataSource dataSource() {
|
||||||
|
MysqlDataSource dataSource = new MysqlDataSource();
|
||||||
|
dataSource.setUrl(mySQLContainer.getJdbcUrl());
|
||||||
|
dataSource.setUser(mySQLContainer.getUsername());
|
||||||
|
dataSource.setPassword(mySQLContainer.getPassword());
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014-2017 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 org.junit.ClassRule;
|
||||||
|
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.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.web.WebAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration tests for {@link JdbcOperationsSessionRepository} using PostgreSQL
|
||||||
|
* database.
|
||||||
|
*
|
||||||
|
* @author Vedran Pavic
|
||||||
|
*/
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@WebAppConfiguration
|
||||||
|
@ContextConfiguration
|
||||||
|
public class PostgreSQL9JdbcOperationsSessionRepositoryITests
|
||||||
|
extends AbstractJdbcOperationsSessionRepositoryITests {
|
||||||
|
|
||||||
|
private static final String DOCKER_IMAGE = "postgres:9.6.3";
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer(
|
||||||
|
DOCKER_IMAGE);
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class Config extends BaseConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DataSource dataSource() {
|
||||||
|
PGSimpleDataSource dataSource = new PGSimpleDataSource();
|
||||||
|
dataSource.setUrl(postgreSQLContainer.getJdbcUrl());
|
||||||
|
dataSource.setUser(postgreSQLContainer.getUsername());
|
||||||
|
dataSource.setPassword(postgreSQLContainer.getPassword());
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user