Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #79 from lordofthejars/JENKINS-33107
[JENKINS-33107]  Docker Fixtures might fail using Docker-Machine
  • Loading branch information
rsandell committed Feb 25, 2016
2 parents 590918c + 585ebc3 commit ad3855e
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 1 deletion.
17 changes: 17 additions & 0 deletions pom.xml
Expand Up @@ -33,6 +33,7 @@
<groovy.version>2.3.1</groovy.version>
<shrinkwrap.version>1.2.2</shrinkwrap.version>
<monte.version>0.7.7</monte.version>
<mockito.version>1.10.19</mockito.version>
<cucumber.options />
</properties>

Expand Down Expand Up @@ -392,6 +393,22 @@
<type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-library</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
<exclusion>
<artifactId>hamcrest-all</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<build>
Expand Down
Expand Up @@ -5,17 +5,22 @@

import java.io.File;
import java.io.IOException;
import java.net.URI;

/**
* Container image, a template to launch virtual machines from.
*
* @author Kohsuke Kawaguchi
*/
public class DockerImage {

public static final String DEFAULT_DOCKER_HOST = "127.0.0.1";
public final String tag;
DockerHostResolver dockerHostResolver;

public DockerImage(String tag) {
this.tag = tag;
dockerHostResolver = new DockerHostResolver();
}

public <T extends DockerContainer> T start(Class<T> type, CommandBuilder options, CommandBuilder cmd,int portOffset) throws InterruptedException, IOException {
Expand All @@ -29,7 +34,7 @@ public <T extends DockerContainer> T start(Class<T> type, CommandBuilder options
}

public <T extends DockerContainer> T start(Class<T> type, int[] ports, CommandBuilder options, CommandBuilder cmd) throws InterruptedException, IOException {
return start(type,ports,0,"127.0.0.1",options,cmd);
return start(type,ports,0, getDockerHost(),options,cmd);
}
/**
* Starts a container from this image.
Expand Down Expand Up @@ -107,8 +112,26 @@ public <T extends DockerContainer> T start(Class<T> type, int[] ports,int localP
}
}

// package for tests
String getDockerHost() {
final String dockerHostEnvironmentVariable = dockerHostResolver.getDockerHostEnvironmentVariable();
return dockerHostEnvironmentVariable != null ? getIp(dockerHostEnvironmentVariable) : DEFAULT_DOCKER_HOST;
}

private String getIp(String uri) {
final URI dockerHost = URI.create(uri);
final String host = dockerHost.getHost();
return host != null ? host : DEFAULT_DOCKER_HOST;
}

@Override
public String toString() {
return "DockerImage: "+tag;
}

static class DockerHostResolver {
public String getDockerHostEnvironmentVariable() {
return System.getenv("DOCKER_HOST");
}
}
}
@@ -0,0 +1,53 @@
package org.jenkinsci.test.acceptance.docker;

import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class DockerImageTest {

@Mock
DockerImage.DockerHostResolver dockerHostResolver;

@Test
public void shouldReturnLocalhostIfDockerHostEnvironmentNotSet() {
Mockito.when(dockerHostResolver.getDockerHostEnvironmentVariable()).thenReturn(null);
DockerImage dockerImage = new DockerImage("a");
dockerImage.dockerHostResolver = dockerHostResolver;

Assert.assertThat(dockerImage.getDockerHost(), CoreMatchers.is("127.0.0.1"));
}

@Test
public void shouldReturnIpFromDockerHostEnvironmentVariable() {
Mockito.when(dockerHostResolver.getDockerHostEnvironmentVariable()).thenReturn("tcp://192.168.99.100:2376");
DockerImage dockerImage = new DockerImage("a");
dockerImage.dockerHostResolver = dockerHostResolver;

Assert.assertThat(dockerImage.getDockerHost(), CoreMatchers.is("192.168.99.100"));
}

@Test
public void shouldReturnLocalhostInCaseOfInvalidUri() {
Mockito.when(dockerHostResolver.getDockerHostEnvironmentVariable()).thenReturn("hfdsdfah");
DockerImage dockerImage = new DockerImage("a");
dockerImage.dockerHostResolver = dockerHostResolver;

Assert.assertThat(dockerImage.getDockerHost(), CoreMatchers.is("127.0.0.1"));
}

@Test
public void shouldReturnLocalhostInCaseOfUnixSocket() {
Mockito.when(dockerHostResolver.getDockerHostEnvironmentVariable()).thenReturn("unix:///var/run/docker.sock");
DockerImage dockerImage = new DockerImage("a");
dockerImage.dockerHostResolver = dockerHostResolver;

Assert.assertThat(dockerImage.getDockerHost(), CoreMatchers.is("127.0.0.1"));
}

}

0 comments on commit ad3855e

Please sign in to comment.