Skip to content

Commit 4a525bc

Browse files
committed
Merge pull request #94 from DevFactory/df-docker-plugin-unit-tests
Unit test samples
2 parents 0bc4abb + a01d774 commit 4a525bc

File tree

5 files changed

+240
-1
lines changed

5 files changed

+240
-1
lines changed

pom.xml

+21
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
<properties>
5555
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
5656
<slf4j.version>1.6.1</slf4j.version>
57+
<powermock.version>1.6.3</powermock.version>
5758
</properties>
5859

5960
<dependencies>
@@ -122,6 +123,26 @@
122123
<version>4.12</version>
123124
<scope>test</scope>
124125
</dependency>
126+
<dependency>
127+
<groupId>org.apache.maven</groupId>
128+
<artifactId>maven-artifact</artifactId>
129+
<version>2.0.6</version>
130+
<scope>provided</scope>
131+
</dependency>
132+
133+
<!-- PowerMockito for unit tests -->
134+
<dependency>
135+
<groupId>org.powermock</groupId>
136+
<artifactId>powermock-module-junit4</artifactId>
137+
<version>${powermock.version}</version>
138+
<scope>test</scope>
139+
</dependency>
140+
<dependency>
141+
<groupId>org.powermock</groupId>
142+
<artifactId>powermock-api-mockito</artifactId>
143+
<version>${powermock.version}</version>
144+
<scope>test</scope>
145+
</dependency>
125146
</dependencies>
126147

127148
<build>

src/main/java/com/alexecollins/docker/mojo/AbstractDockerMojo.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.alexecollins.docker.orchestration.model.BuildFlag;
66
import com.alexecollins.docker.util.MavenLogAppender;
77
import com.github.dockerjava.api.DockerClient;
8-
import com.github.dockerjava.api.DockerException;
8+
import com.github.dockerjava.api.exception.DockerException;
99
import com.github.dockerjava.api.command.VersionCmd;
1010
import com.github.dockerjava.api.model.Version;
1111
import com.github.dockerjava.core.DockerClientBuilder;
@@ -167,6 +167,7 @@ public final void execute() throws MojoExecutionException, MojoFailureException
167167
getLog().info("Docker version " + docker.versionCmd().exec().getVersion());
168168
doExecute(dockerOrchestrator(properties, docker));
169169
} catch (Exception e) {
170+
e.printStackTrace();
170171
throw new MojoExecutionException(e.getMessage(), e);
171172
}
172173
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.alexecollins.docker.mojo;
2+
3+
import com.alexecollins.docker.orchestration.DockerOrchestrator;
4+
import com.github.dockerjava.api.DockerClient;
5+
import org.apache.maven.plugin.MojoExecutionException;
6+
import org.junit.Before;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.powermock.api.mockito.PowerMockito;
10+
import org.powermock.core.classloader.annotations.PrepareForTest;
11+
import org.powermock.modules.junit4.PowerMockRunner;
12+
import org.powermock.reflect.Whitebox;
13+
14+
import static org.junit.Assert.fail;
15+
import static org.mockito.Matchers.any;
16+
import static org.mockito.Mockito.doThrow;
17+
import static org.mockito.Mockito.mock;
18+
import static org.mockito.Mockito.never;
19+
import static org.mockito.Mockito.verify;
20+
21+
@RunWith(PowerMockRunner.class)
22+
@PrepareForTest(AbstractDockerMojo.class)
23+
public class AbstractDockerMojoTest extends MojoTestSupport {
24+
25+
private AbstractDockerMojo dockerMojo;
26+
27+
@Before
28+
public void setUp() throws Exception {
29+
// prepare mojo
30+
dockerMojo = PowerMockito.spy(new AbstractDockerMojo() {
31+
@Override
32+
protected void doExecute(DockerOrchestrator orchestrator) throws Exception {
33+
// do nothing
34+
}
35+
});
36+
37+
DockerClient mockDockerClient = mock(DockerClient.class);
38+
DockerOrchestrator mockDockerOrchestrator = mock(DockerOrchestrator.class);
39+
40+
prepareMojo(dockerMojo, mockDockerClient, mockDockerOrchestrator);
41+
}
42+
43+
44+
@Test
45+
public void testSkip() throws Exception {
46+
// given
47+
Whitebox.setInternalState(dockerMojo, "skip", true);
48+
49+
// when
50+
dockerMojo.execute();
51+
52+
// then
53+
verify(dockerMojo, never()).doExecute(any(DockerOrchestrator.class));
54+
}
55+
56+
@Test(expected = MojoExecutionException.class)
57+
public void testExecutionThrowsException() throws Exception {
58+
// given
59+
doThrow(Exception.class).when(dockerMojo).doExecute(any(DockerOrchestrator.class));
60+
61+
// when
62+
dockerMojo.execute();
63+
64+
// then
65+
fail("AbstractDockerMojo should throw MojoExecutionException when execution fails");
66+
}
67+
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.alexecollins.docker.mojo;
2+
3+
import com.alexecollins.docker.orchestration.DockerOrchestrator;
4+
import com.github.dockerjava.api.DockerClient;
5+
import org.apache.maven.plugin.MojoExecutionException;
6+
import org.apache.maven.plugin.MojoFailureException;
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
import org.junit.runner.RunWith;
10+
import org.powermock.api.mockito.PowerMockito;
11+
import org.powermock.core.classloader.annotations.PrepareForTest;
12+
import org.powermock.modules.junit4.PowerMockRunner;
13+
import org.powermock.reflect.Whitebox;
14+
15+
import static org.mockito.Mockito.mock;
16+
import static org.mockito.Mockito.never;
17+
import static org.mockito.Mockito.verify;
18+
19+
@RunWith(PowerMockRunner.class)
20+
@PrepareForTest(CleanMojo.class)
21+
public class CleanMojoTest extends MojoTestSupport {
22+
23+
private CleanMojo cleanMojo;
24+
25+
private DockerOrchestrator mockDockerOrchestrator;
26+
27+
@Before
28+
public void setUp() throws Exception {
29+
30+
cleanMojo = PowerMockito.spy(new CleanMojo());
31+
DockerClient mockDockerClient = mock(DockerClient.class);
32+
mockDockerOrchestrator = mock(DockerOrchestrator.class);
33+
34+
prepareMojo(cleanMojo, mockDockerClient, mockDockerOrchestrator);
35+
}
36+
37+
@Test
38+
public void testCleanAll() throws Exception {
39+
// when
40+
cleanMojo.execute();
41+
42+
// then
43+
verify(cleanMojo).doExecute(mockDockerOrchestrator);
44+
verify(mockDockerOrchestrator, never()).cleanContainers();
45+
verify(mockDockerOrchestrator).clean();
46+
}
47+
48+
@Test
49+
public void testCleanContainers() throws MojoFailureException, MojoExecutionException {
50+
// given
51+
Whitebox.setInternalState(cleanMojo, "cleanContainerOnly", true);
52+
53+
// when
54+
cleanMojo.execute();
55+
56+
// then
57+
verify(cleanMojo).doExecute(mockDockerOrchestrator);
58+
verify(mockDockerOrchestrator).cleanContainers();
59+
verify(mockDockerOrchestrator, never()).clean();
60+
}
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.alexecollins.docker.mojo;
2+
3+
import com.alexecollins.docker.orchestration.DockerOrchestrator;
4+
import com.github.dockerjava.api.DockerClient;
5+
import com.github.dockerjava.api.command.VersionCmd;
6+
import com.github.dockerjava.api.model.Version;
7+
import org.apache.maven.model.Build;
8+
import org.apache.maven.project.MavenProject;
9+
import org.mockito.Mockito;
10+
import org.powermock.api.mockito.PowerMockito;
11+
import org.powermock.reflect.Whitebox;
12+
13+
import java.util.Properties;
14+
15+
import static org.mockito.Mockito.mock;
16+
import static org.mockito.Mockito.when;
17+
18+
public class MojoTestSupport {
19+
20+
protected static final String PROJECT_GROUP_ID = "id.group";
21+
22+
protected static final String PROJECT_ARTIFACT_ID = "artifact-id";
23+
24+
protected static final String PROJECT_VERSION = "1.2.3-SNAPSHOT";
25+
26+
protected static final String PROJECT_NAME = "project-name";
27+
28+
protected static final String PROJECT_DESCRIPTION = "Project Description";
29+
30+
protected static final String BUILD_DIRECTORY = "/build/directory";
31+
32+
protected static final String BUILD_FINAL_NAME = "buildFinalName";
33+
34+
35+
protected void prepareMojo(
36+
AbstractDockerMojo dockerMojo,
37+
DockerClient mockDockerClient,
38+
DockerOrchestrator mockDockerOrchestrator) throws Exception {
39+
40+
MavenProject mavenProject = createMavenProject();
41+
Whitebox.setInternalState(dockerMojo, "project", mavenProject);
42+
43+
// prepare docker client
44+
if (mockDockerClient != null) {
45+
VersionCmd mockVersionCmd = mock(VersionCmd.class);
46+
Version mockVersion = mock(Version.class);
47+
48+
PowerMockito.doReturn(mockDockerClient).when(dockerMojo, "dockerClient");
49+
50+
when(mockDockerClient.versionCmd()).thenReturn(mockVersionCmd);
51+
when(mockVersionCmd.exec()).thenReturn(mockVersion);
52+
when(mockVersion.getVersion()).thenReturn("1.0");
53+
}
54+
55+
// prepare docker orchestrator
56+
if (mockDockerOrchestrator != null) {
57+
PowerMockito.doReturn(mockDockerOrchestrator)
58+
.when(dockerMojo, "dockerOrchestrator",
59+
Mockito.any(Properties.class),
60+
Mockito.any(DockerClient.class)
61+
);
62+
}
63+
}
64+
65+
protected MavenProject createMavenProject() {
66+
67+
MavenProject mavenProject = new MavenProject();
68+
mavenProject.setGroupId(PROJECT_GROUP_ID);
69+
mavenProject.setArtifactId(PROJECT_ARTIFACT_ID);
70+
mavenProject.setVersion(PROJECT_VERSION);
71+
mavenProject.setName(PROJECT_NAME);
72+
mavenProject.setDescription(PROJECT_DESCRIPTION);
73+
mavenProject.setBuild(createBuild());
74+
75+
return mavenProject;
76+
}
77+
78+
protected Build createBuild() {
79+
80+
Build build = new Build();
81+
82+
build.setDirectory(BUILD_DIRECTORY);
83+
build.setFinalName(BUILD_FINAL_NAME);
84+
85+
return build;
86+
}
87+
88+
}

0 commit comments

Comments
 (0)