Skip to content

Commit

Permalink
Travis optimizations (testcontainers#366)
Browse files Browse the repository at this point in the history
* Speed up Travis configuration
* remove cache warmup
* cache whole ~/.m2 folder
* Update surefire plugin (better, colorful logging)
  • Loading branch information
bsideup authored and rnorth committed Jun 14, 2017
1 parent bd228ba commit cb2c382
Show file tree
Hide file tree
Showing 11 changed files with 299 additions and 288 deletions.
Binary file modified .mvn/wrapper/maven-wrapper.jar
100644 → 100755
Binary file not shown.
2 changes: 1 addition & 1 deletion .mvn/wrapper/maven-wrapper.properties
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1 +1 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
91 changes: 41 additions & 50 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,62 +17,53 @@ sudo: required
services:
- docker

before_install:
cache:
directories:
- '$HOME/.m2'

install:
- echo "MAVEN_OPTS='-XX:+TieredCompilation -XX:TieredStopAtLevel=1'" > ~/.mavenrc
- sudo apt-get update -qq
- sudo apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install docker-engine
- env
# Pre-fetch docker images - seems to need to be done before docker env vars are set
- docker pull redis:3.0.2
- docker pull rabbitmq:3.5.3
- docker pull mongo:3.1.5
- docker pull alpine:3.2
- docker pull mysql:latest
- docker pull mysql:5.5.43
- docker pull mysql:5.6
- docker pull mysql:5.5
- docker pull postgres:latest
- docker pull selenium/standalone-chrome-debug:2.52.0
- docker pull selenium/standalone-firefox-debug:2.52.0
- docker pull richnorth/vnc-recorder:latest
- docker pull nginx:1.9.4
- docker pull dduportal/docker-compose:1.6.0
- docker pull richnorth/ambassador:latest
# Update env vars required by testcontainers
- docker info
# Update env vars required by testcontainers
- export DOCKER_HOST=tcp://127.0.0.1:2375
- export DOCKER_TLS_VERIFY=0
- env
- ./mvnw -T4 -DskipTests=true -Dmaven.javadoc.skip=true install

install: mvn install -P !build-extras -DskipTests=true -Dmaven.javadoc.skip=true -B -V
jobs:
include:
- stage: test
env: [ NAME=core ]
script: ./mvnw -pl core test

script:
- mvn -B -P !build-extras test
# Run Docker-in-Docker tests
- |
DOCKER_HOST=unix:///var/run/docker.sock DOCKER_TLS_VERIFY= docker run --rm \
-v "$HOME/.m2":/root/.m2/ \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)":"$(pwd)" \
-w "$(pwd)" \
openjdk:8-jre \
./mvnw -B -P !build-extras -pl core test -Dtest=*GenericContainerRuleTest
# Run Docker-in-Docker tests inside Alpine
- |
DOCKER_HOST=unix:///var/run/docker.sock DOCKER_TLS_VERIFY= docker run --rm \
-v "$HOME/.m2":/root/.m2/ \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)":"$(pwd)" \
-w "$(pwd)" \
kiview/openjdk-alpine-bash:8u111 \
./mvnw -B -P !build-extras -pl core test -Dtest=*GenericContainerRuleTest
- mvn -B -P !build-extras test -f shade-test/pom.xml
- env: [ NAME=selenium ]
script: ./mvnw -pl modules/selenium test

deploy:
provider: script
script: release/deploy.sh
on:
tags: true
branch: master
- env: [ NAME=modules ]
script: ./mvnw -pl !core,!modules/selenium test

cache:
directories:
- '$HOME/.m2/repository'
# Run Docker-in-Docker tests inside Alpine
- env: [ NAME=docker-in-alpine-docker ]
script: |
DOCKER_HOST=unix:///var/run/docker.sock DOCKER_TLS_VERIFY= docker run -t --rm \
-v "$HOME/.m2":/root/.m2/ \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)":"$(pwd)" \
-w "$(pwd)" \
openjdk:8-jdk-alpine \
./mvnw -pl core test -Dtest=*GenericContainerRuleTest
- env: [ NAME=shade ]
script: ./mvnw test -f shade-test/pom.xml

- stage: deploy
install: skip
script: skip
deploy:
provider: script
script: release/deploy.sh
on:
tags: true
branch: master
8 changes: 5 additions & 3 deletions modules/jdbc-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@
<artifactId>postgresql</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>mariadb</artifactId>
<version>${project.version}</version>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
<scope>test</scope>
</dependency>

<!-- Database drivers for testing -->
Expand Down
20 changes: 0 additions & 20 deletions modules/nginx/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,5 @@
<artifactId>testcontainers</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>selenium</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>2.45.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>2.45.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.testcontainers.junit;

import lombok.Cleanup;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.NginxContainer;

import java.io.*;
Expand All @@ -20,18 +17,14 @@
*/
public class SimpleNginxTest {

@Rule
public NginxContainer nginx = new NginxContainer()
.withCustomContent(System.getProperty("user.home") + "/.tmp-test-container");
private static File contentFolder = new File(System.getProperty("user.home") + "/.tmp-test-container");

@Rule
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
.withDesiredCapabilities(DesiredCapabilities.chrome())
.withLinkToContainer(nginx, "nginx");
public NginxContainer nginx = new NginxContainer()
.withCustomContent(contentFolder.toString());

@BeforeClass
public static void setupContent() throws FileNotFoundException {
File contentFolder = new File(System.getProperty("user.home") + "/.tmp-test-container");
contentFolder.mkdir();
contentFolder.setReadable(true, false);
contentFolder.setWritable(true, false);
Expand All @@ -43,9 +36,8 @@ public static void setupContent() throws FileNotFoundException {
indexFile.setWritable(true, false);
indexFile.setExecutable(true, false);

PrintStream printStream = new PrintStream(new FileOutputStream(indexFile));
@Cleanup PrintStream printStream = new PrintStream(new FileOutputStream(indexFile));
printStream.println("<html><body>This worked</body></html>");
printStream.close();
}

@Test
Expand All @@ -54,21 +46,10 @@ public void testSimple() throws Exception {
info("Base URL is " + nginx.getBaseUrl("http", 80));

URLConnection urlConnection = nginx.getBaseUrl("http", 80).openConnection();
String line = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())).readLine();
@Cleanup BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line = reader.readLine();
System.out.println(line);

assertTrue("Using URLConnection, an HTTP GET from the nginx server returns the index.html from the custom content directory", line.contains("This worked"));
}

@Test
public void testWebDriverToNginxContainerAccessViaContainerLink() throws Exception {

info("Base URL is " + nginx.getBaseUrl("http", 80));

RemoteWebDriver driver = chrome.getWebDriver();

driver.get("http://nginx/");

assertEquals("Using selenium, an HTTP GET from the nginx server returns the index.html from the custom content directory", "This worked", driver.findElement(By.tagName("body")).getText());
}
}
7 changes: 7 additions & 0 deletions modules/selenium/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@
<version>6.1.25</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>nginx</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.testcontainers.junit;

import lombok.Cleanup;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.NginxContainer;

import java.io.*;

import static org.rnorth.visibleassertions.VisibleAssertions.*;


/**
* @author richardnorth
*/
public class LinkedContainerTest {

private static File contentFolder = new File(System.getProperty("user.home") + "/.tmp-test-container");

@Rule
public NginxContainer nginx = new NginxContainer()
.withCustomContent(contentFolder.toString());

@Rule
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
.withDesiredCapabilities(DesiredCapabilities.chrome())
.withLinkToContainer(nginx, "nginx");

@BeforeClass
public static void setupContent() throws FileNotFoundException {
contentFolder.mkdir();
contentFolder.setReadable(true, false);
contentFolder.setWritable(true, false);
contentFolder.setExecutable(true, false);


File indexFile = new File(contentFolder, "index.html");
indexFile.setReadable(true, false);
indexFile.setWritable(true, false);
indexFile.setExecutable(true, false);

@Cleanup PrintStream printStream = new PrintStream(new FileOutputStream(indexFile));
printStream.println("<html><body>This worked</body></html>");
}

@Test
public void testWebDriverToNginxContainerAccessViaContainerLink() throws Exception {
RemoteWebDriver driver = chrome.getWebDriver();

driver.get("http://nginx/");

assertEquals("Using selenium, an HTTP GET from the nginx server returns the index.html from the custom content directory", "This worked", driver.findElement(By.tagName("body")).getText());
}
}
Loading

0 comments on commit cb2c382

Please sign in to comment.