Skip to content
This repository was archived by the owner on Mar 21, 2022. It is now read-only.

Commit e1c7d47

Browse files
authored
Merge pull request #1090 from spotify/dxia/replace-flaky-test
Replace flaky testInspectTask IT with unit test
2 parents b67562e + a3ed338 commit e1c7d47

4 files changed

Lines changed: 126 additions & 63 deletions

File tree

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,13 @@
241241
<groupId>com.spotify</groupId>
242242
<artifactId>hamcrest-jackson</artifactId>
243243
<version>1.1.3</version>
244+
<scope>test</scope>
245+
</dependency>
246+
<dependency>
247+
<groupId>com.spotify</groupId>
248+
<artifactId>hamcrest-pojo</artifactId>
249+
<version>1.1.3</version>
250+
<scope>test</scope>
244251
</dependency>
245252
</dependencies>
246253

src/test/java/com/spotify/docker/client/DefaultDockerClientTest.java

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -5429,69 +5429,6 @@ public void testRemoveService() throws Exception {
54295429
assertThat(sut.listServices(), is(empty()));
54305430
}
54315431

5432-
@Test
5433-
public void testInspectTask() throws Exception {
5434-
requireDockerApiVersionAtLeast("1.24", "swarm support");
5435-
final Set<Task> priorTasks = new HashSet<>(sut.listTasks());
5436-
5437-
final Date start = new Date();
5438-
5439-
final ServiceSpec serviceSpec = createServiceSpec(randomName());
5440-
final int initialNumTasks = sut.listTasks().size();
5441-
final ServiceCreateResponse serviceCreateResponse = sut.createService(serviceSpec);
5442-
await().until(numberOfTasks(sut), is(greaterThan(initialNumTasks)));
5443-
5444-
final Set<Task> tasks = new HashSet<>(sut.listTasks());
5445-
5446-
final Set<Task> newTasks = Sets.difference(tasks, priorTasks);
5447-
final Task someTask = newTasks.iterator().next();
5448-
5449-
final Task inspectedTask = sut.inspectTask(someTask.id());
5450-
final Date now = new Date();
5451-
assertThat(inspectedTask.id(), notNullValue());
5452-
assertThat(inspectedTask.version().index(), allOf(notNullValue(), greaterThan(0L)));
5453-
assertThat(inspectedTask.createdAt(),
5454-
allOf(notNullValue(), greaterThanOrEqualTo(start), lessThanOrEqualTo(now)));
5455-
assertThat(inspectedTask.updatedAt(),
5456-
allOf(notNullValue(), greaterThanOrEqualTo(start), lessThanOrEqualTo(now)));
5457-
assertThat(inspectedTask.slot(), allOf(notNullValue(), greaterThan(0)));
5458-
assertThat(inspectedTask.status(), notNullValue());
5459-
assertThat(inspectedTask.name(), nullValue());
5460-
assertEquals(serviceCreateResponse.id(), inspectedTask.serviceId());
5461-
if (serviceSpec.labels() == null || serviceSpec.labels().isEmpty()) {
5462-
// Hamcrest has generally bad support for "is null or empty",
5463-
// and no support at all for empty maps
5464-
assertTrue(inspectedTask.labels() == null || inspectedTask.labels().isEmpty());
5465-
} else {
5466-
assertEquals(serviceSpec.labels(), inspectedTask.labels());
5467-
}
5468-
assertThat(inspectedTask.desiredState(), is(anything()));
5469-
assertThat(inspectedTask.networkAttachments(), is(anything()));
5470-
5471-
final TaskSpec taskSpecTemplate = serviceSpec.taskTemplate();
5472-
final TaskSpec taskSpecActual = inspectedTask.spec();
5473-
assertEquals(taskSpecTemplate.resources(), taskSpecActual.resources());
5474-
assertEquals(taskSpecTemplate.restartPolicy(), taskSpecActual.restartPolicy());
5475-
assertEquals(taskSpecTemplate.placement(), taskSpecActual.placement());
5476-
assertEquals(taskSpecTemplate.networks(), taskSpecActual.networks());
5477-
assertEquals(taskSpecTemplate.logDriver(), taskSpecActual.logDriver());
5478-
5479-
final ContainerSpec containerSpecTemplate = taskSpecTemplate.containerSpec();
5480-
final ContainerSpec containerSpecActual = taskSpecActual.containerSpec();
5481-
assertThat(containerSpecActual.image(),
5482-
latestImageNameMatcher(containerSpecTemplate.image()));
5483-
assertEquals(containerSpecTemplate.labels(), containerSpecActual.labels());
5484-
assertEquals(containerSpecTemplate.command(), containerSpecActual.command());
5485-
assertEquals(containerSpecTemplate.args(), containerSpecActual.args());
5486-
assertEquals(containerSpecTemplate.env(), containerSpecActual.env());
5487-
assertEquals(containerSpecTemplate.dir(), containerSpecActual.dir());
5488-
assertEquals(containerSpecTemplate.user(), containerSpecActual.user());
5489-
assertEquals(containerSpecTemplate.groups(), containerSpecActual.groups());
5490-
assertEquals(containerSpecTemplate.tty(), containerSpecActual.tty());
5491-
assertEquals(containerSpecTemplate.mounts(), containerSpecActual.mounts());
5492-
assertEquals(containerSpecTemplate.stopGracePeriod(), containerSpecActual.stopGracePeriod());
5493-
}
5494-
54955432
@Test
54965433
public void testListTasks() throws Exception {
54975434
requireDockerApiVersionAtLeast("1.24", "swarm support");

src/test/java/com/spotify/docker/client/DefaultDockerClientUnitTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static com.spotify.hamcrest.jackson.JsonMatchers.jsonArray;
2525
import static com.spotify.hamcrest.jackson.JsonMatchers.jsonObject;
2626
import static com.spotify.hamcrest.jackson.JsonMatchers.jsonText;
27+
import static com.spotify.hamcrest.pojo.IsPojo.pojo;
2728
import static java.util.Collections.singletonList;
2829
import static org.hamcrest.Matchers.allOf;
2930
import static org.hamcrest.Matchers.contains;
@@ -79,14 +80,19 @@
7980
import com.spotify.docker.client.messages.swarm.NodeSpec;
8081
import com.spotify.docker.client.messages.swarm.Placement;
8182
import com.spotify.docker.client.messages.swarm.Preference;
83+
import com.spotify.docker.client.messages.swarm.ResourceRequirements;
8284
import com.spotify.docker.client.messages.swarm.Service;
8385
import com.spotify.docker.client.messages.swarm.ServiceSpec;
8486
import com.spotify.docker.client.messages.swarm.Spread;
8587
import com.spotify.docker.client.messages.swarm.SwarmJoin;
88+
import com.spotify.docker.client.messages.swarm.Task;
8689
import com.spotify.docker.client.messages.swarm.TaskSpec;
90+
import com.spotify.docker.client.messages.swarm.Version;
8791
import java.io.IOException;
8892
import java.nio.file.Path;
8993
import java.nio.file.Paths;
94+
import java.sql.Date;
95+
import java.time.Instant;
9096
import java.util.HashSet;
9197
import java.util.List;
9298
import java.util.Set;
@@ -1241,6 +1247,36 @@ public void testGetDistribution() throws Exception {
12411247
)));
12421248
}
12431249

1250+
@Test
1251+
public void testInspectTask() throws Exception {
1252+
final DefaultDockerClient dockerClient = new DefaultDockerClient(builder);
1253+
1254+
enqueueServerApiVersion("1.24");
1255+
enqueueServerApiResponse(200, "fixtures/1.24/task.json");
1256+
1257+
final Task task = dockerClient.inspectTask("0kzzo1i0y4jz6027t0k7aezc7");
1258+
1259+
assertThat(task, is(pojo(Task.class)
1260+
.where("id", is("0kzzo1i0y4jz6027t0k7aezc7"))
1261+
.where("version", is(pojo(Version.class)
1262+
.where("index", is(71L))
1263+
))
1264+
.where("createdAt", is(Date.from(Instant.parse("2016-06-07T21:07:31.171892745Z"))))
1265+
.where("updatedAt", is(Date.from(Instant.parse("2016-06-07T21:07:31.376370513Z"))))
1266+
.where("spec", is(pojo(TaskSpec.class)
1267+
.where("containerSpec", is(pojo(ContainerSpec.class)
1268+
.where("image", is("redis"))
1269+
))
1270+
.where("resources", is(pojo(ResourceRequirements.class)
1271+
.where("limits",
1272+
is(pojo(com.spotify.docker.client.messages.swarm.Resources.class)))
1273+
.where("reservations",
1274+
is(pojo(com.spotify.docker.client.messages.swarm.Resources.class)))
1275+
))
1276+
))
1277+
));
1278+
}
1279+
12441280
private void enqueueServerApiResponse(final int statusCode, final String fileName)
12451281
throws IOException {
12461282
server.enqueue(new MockResponse()
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{
2+
"ID": "0kzzo1i0y4jz6027t0k7aezc7",
3+
"Version": {
4+
"Index": 71
5+
},
6+
"CreatedAt": "2016-06-07T21:07:31.171892745Z",
7+
"UpdatedAt": "2016-06-07T21:07:31.376370513Z",
8+
"Spec": {
9+
"ContainerSpec": {
10+
"Image": "redis"
11+
},
12+
"Resources": {
13+
"Limits": {},
14+
"Reservations": {}
15+
},
16+
"RestartPolicy": {
17+
"Condition": "any",
18+
"MaxAttempts": 0
19+
},
20+
"Placement": {}
21+
},
22+
"ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",
23+
"Slot": 1,
24+
"NodeID": "60gvrl6tm78dmak4yl7srz94v",
25+
"Status": {
26+
"Timestamp": "2016-06-07T21:07:31.290032978Z",
27+
"State": "running",
28+
"Message": "started",
29+
"ContainerStatus": {
30+
"ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035",
31+
"PID": 677
32+
}
33+
},
34+
"DesiredState": "running",
35+
"NetworksAttachments": [
36+
{
37+
"Network": {
38+
"ID": "4qvuz4ko70xaltuqbt8956gd1",
39+
"Version": {
40+
"Index": 18
41+
},
42+
"CreatedAt": "2016-06-07T20:31:11.912919752Z",
43+
"UpdatedAt": "2016-06-07T21:07:29.955277358Z",
44+
"Spec": {
45+
"Name": "ingress",
46+
"Labels": {
47+
"com.docker.swarm.internal": "true"
48+
},
49+
"DriverConfiguration": {},
50+
"IPAMOptions": {
51+
"Driver": {},
52+
"Configs": [
53+
{
54+
"Subnet": "10.255.0.0/16",
55+
"Gateway": "10.255.0.1"
56+
}
57+
]
58+
}
59+
},
60+
"DriverState": {
61+
"Name": "overlay",
62+
"Options": {
63+
"com.docker.network.driver.overlay.vxlanid_list": "256"
64+
}
65+
},
66+
"IPAMOptions": {
67+
"Driver": {
68+
"Name": "default"
69+
},
70+
"Configs": [
71+
{
72+
"Subnet": "10.255.0.0/16",
73+
"Gateway": "10.255.0.1"
74+
}
75+
]
76+
}
77+
},
78+
"Addresses": [
79+
"10.255.0.10/16"
80+
]
81+
}
82+
]
83+
}

0 commit comments

Comments
 (0)