Integration test with docker-compose-rule
authorGustavo Martin Morcuende <gu.martinm@gmail.com>
Sun, 25 Dec 2016 21:27:15 +0000 (22:27 +0100)
committerGustavo Martin Morcuende <gu.martinm@gmail.com>
Sun, 25 Dec 2016 21:27:15 +0000 (22:27 +0100)
SpringJava/Gradle/spring-jpa-persistence/README [new file with mode: 0644]
SpringJava/Gradle/spring-jpa-persistence/build.gradle
SpringJava/Gradle/spring-jpa-persistence/src/integTest/java/de/spring/example/persistence/repository/AdDescriptionRepositoryShould.java [new file with mode: 0644]
SpringJava/Gradle/spring-jpa-persistence/src/integTest/resources/docker/docker-compose.yml [new file with mode: 0644]
SpringJava/Gradle/spring-jpa-persistence/src/integTest/resources/spring-configuration-docker-test/datasource-test-configuration.xml [new file with mode: 0644]

diff --git a/SpringJava/Gradle/spring-jpa-persistence/README b/SpringJava/Gradle/spring-jpa-persistence/README
new file mode 100644 (file)
index 0000000..fdc0e75
--- /dev/null
@@ -0,0 +1,3 @@
+
+Custom version of docker-compose. Variable required by docker-compose-rule.
+export DOCKER_COMPOSE_LOCATION=/mnt/docker/docker-compose
index 8bb8363..1c8882c 100644 (file)
@@ -25,6 +25,7 @@ sourceCompatibility = 1.8
 
 repositories {
     mavenCentral()
+    maven { url 'https://dl.bintray.com/palantir/releases' }
 }
 
 eclipse {
@@ -108,6 +109,7 @@ dependencies {
     testCompile('com.h2database:h2:1.4.193')
     // or MYSQL with docker :)
     testCompile('mysql:mysql-connector-java:6.0.5')
+    testCompile 'com.palantir.docker.compose:docker-compose-rule:0.28.1'
 }
 
 sourceSets {
diff --git a/SpringJava/Gradle/spring-jpa-persistence/src/integTest/java/de/spring/example/persistence/repository/AdDescriptionRepositoryShould.java b/SpringJava/Gradle/spring-jpa-persistence/src/integTest/java/de/spring/example/persistence/repository/AdDescriptionRepositoryShould.java
new file mode 100644 (file)
index 0000000..ffaa3ad
--- /dev/null
@@ -0,0 +1,41 @@
+package de.spring.example.persistence.repository;
+
+import javax.inject.Inject;
+
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.palantir.docker.compose.DockerComposeRule;
+import com.palantir.docker.compose.connection.waiting.HealthChecks;
+
+import de.spring.example.persistence.domain.AdDescription;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration( {"classpath*:spring-configuration/*.xml",
+       "classpath*:spring-configuration-docker-test/*.xml"} )
+@Transactional
+public class AdDescriptionRepositoryShould {
+       
+       @Inject
+       AdDescriptionRepository adDescriptionRepository;
+
+       @ClassRule
+    public static final DockerComposeRule DOCKER = DockerComposeRule.builder()
+            .file("src/integTest/resources/docker/docker-compose.yml")
+            .waitingForService("mysql", HealthChecks.toHaveAllPortsOpen())
+            .saveLogsTo("build/dockerLogs")
+            .build();
+       
+       @Test public void
+       find_ad_descriptions_by_ad() {
+               Iterable<AdDescription> adDescriptions = adDescriptionRepository.findAll();
+               
+               Iterable<AdDescription> lol = adDescriptions;
+               
+       }
+       
+}
diff --git a/SpringJava/Gradle/spring-jpa-persistence/src/integTest/resources/docker/docker-compose.yml b/SpringJava/Gradle/spring-jpa-persistence/src/integTest/resources/docker/docker-compose.yml
new file mode 100644 (file)
index 0000000..4c815b3
--- /dev/null
@@ -0,0 +1,7 @@
+mysql:
+  image: mysql
+  ports:
+    - "3737:3306"
+  privileged: true
+  environment:
+    MYSQL_ROOT_PASSWORD: "root"
diff --git a/SpringJava/Gradle/spring-jpa-persistence/src/integTest/resources/spring-configuration-docker-test/datasource-test-configuration.xml b/SpringJava/Gradle/spring-jpa-persistence/src/integTest/resources/spring-configuration-docker-test/datasource-test-configuration.xml
new file mode 100644 (file)
index 0000000..4296799
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans xmlns="http://www.springframework.org/schema/beans"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xmlns:util="http://www.springframework.org/schema/util"\r
+       xmlns:tx="http://www.springframework.org/schema/tx"\r
+       xmlns:jee="http://www.springframework.org/schema/jee"\r
+       xsi:schemaLocation="http://www.springframework.org/schema/beans\r
+        http://www.springframework.org/schema/beans/spring-beans.xsd\r
+        http://www.springframework.org/schema/util\r
+        http://www.springframework.org/schema/util/spring-util.xsd\r
+        http://www.springframework.org/schema/tx \r
+        http://www.springframework.org/schema/tx/spring-tx.xsd\r
+        http://www.springframework.org/schema/jee\r
+        http://www.springframework.org/schema/jee/spring-jee.xsd">\r
+       \r
+       <!-- \r
+               1. There are two beans with the same id "dataSource"\r
+                  One declared in datasource-configuration.xml\r
+                  Another one declared in datasource-test-configuration.xml\r
+               2. Both beans are declared in different XML files.\r
+               3. Because there are in different XML files Spring does not complain about having duplicate beans.\r
+               4. Because files in src/test will be loaded in class path after files in src/main this bean will\r
+                  override the one declared in datasource-configuration.xml when running JUnit Tests :)\r
+        -->\r
+       <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">\r
+               <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />\r
+               <property name="url" value="jdbc:mysql://127.0.0.1:3737/mybatis_example?createDatabaseIfNotExist=true&amp;allowMultiQueries=true&amp;autoReconnect=true&amp;characterEncoding=UTF-8" />\r
+               <property name="username" value="root" />\r
+               <property name="password" value="root" />\r
+       </bean>\r
+       \r
+</beans>\r