Skip to content

Commit 88a0583

Browse files
authored
Enable buildkite and dockerize unit test runs (#280)
1 parent 5bc6776 commit 88a0583

File tree

14 files changed

+339
-28
lines changed

14 files changed

+339
-28
lines changed

.buildkite/pipeline.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
steps:
2+
- label: ":java: Unit test with test services"
3+
agents:
4+
queue: "workers"
5+
docker: "*"
6+
command: "./gradlew test"
7+
plugins:
8+
- docker-compose#v3.0.0:
9+
run: unit-test-test-service
10+
config: docker/buildkite/docker-compose.yaml
11+
12+
- label: ":java: Unit test with docker services sticky on"
13+
agents:
14+
queue: "workers"
15+
docker: "*"
16+
command: "./gradlew test"
17+
plugins:
18+
- docker-compose#v3.0.0:
19+
run: unit-test-docker-sticky-on
20+
config: docker/buildkite/docker-compose.yaml
21+
22+
- label: ":java: Unit test with docker services sticky off"
23+
agents:
24+
queue: "workers"
25+
docker: "*"
26+
command: "./gradlew test"
27+
plugins:
28+
- docker-compose#v3.0.0:
29+
run: unit-test-docker-sticky-off
30+
config: docker/buildkite/docker-compose.yaml
31+
- wait

build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,13 @@ publishing {
178178
}
179179
}
180180

181+
task registerDomain(type:JavaExec) {
182+
main = 'com.uber.cadence.RegisterTestDomain'
183+
classpath = sourceSets.test.runtimeClasspath
184+
}
185+
181186
test {
187+
dependsOn 'registerDomain'
182188
testLogging {
183189
events "passed", "skipped", "failed"
184190
exceptionFormat "full"

docker/buildkite/Dockerfile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM openjdk:8-jre
2+
3+
ENV APACHE_THRIFT_VERSION=0.9.3
4+
5+
RUN apt-get update && apt-get -y install build-essential && apt-get install -y wget
6+
7+
RUN set -ex ;\
8+
wget http://www-us.apache.org/dist/thrift/${APACHE_THRIFT_VERSION}/thrift-${APACHE_THRIFT_VERSION}.tar.gz ;\
9+
tar -xvf thrift-${APACHE_THRIFT_VERSION}.tar.gz ;\
10+
rm thrift-${APACHE_THRIFT_VERSION}.tar.gz ;\
11+
cd thrift-${APACHE_THRIFT_VERSION}/ ;\
12+
./configure --without-python --without-cpp ;\
13+
make -j2 && make install ;\
14+
cd .. && rm -rf thrift-${APACHE_THRIFT_VERSION}
15+
16+
RUN mkdir /cadence-java-client
17+
WORKDIR /cadence-java-client

docker/buildkite/Dockerfile-local

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM openjdk:8-jre
2+
3+
COPY --from=thrift:0.9.3 /usr/local/bin/thrift /usr/local/bin/thrift
4+
5+
RUN mkdir /cadence-java-client
6+
WORKDIR /cadence-java-client
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
version: '3.5'
2+
3+
services:
4+
cassandra:
5+
image: cassandra:3.11
6+
ports:
7+
- "9042:9042"
8+
networks:
9+
services-network:
10+
aliases:
11+
- cassandra
12+
13+
statsd:
14+
image: hopsoft/graphite-statsd
15+
ports:
16+
- "8080:80"
17+
- "2003:2003"
18+
- "8125:8125"
19+
- "8126:8126"
20+
networks:
21+
services-network:
22+
aliases:
23+
- statsd
24+
25+
cadence:
26+
image: ubercadence/server:0.5.6
27+
ports:
28+
- "7933:7933"
29+
- "7934:7934"
30+
- "7935:7935"
31+
- "7939:7939"
32+
environment:
33+
- "CASSANDRA_SEEDS=cassandra"
34+
- "STATSD_ENDPOINT=statsd:8125"
35+
depends_on:
36+
- cassandra
37+
- statsd
38+
networks:
39+
services-network:
40+
aliases:
41+
- cadence
42+
43+
unit-test-docker-sticky-off:
44+
build:
45+
context: ../../
46+
dockerfile: ./docker/buildkite/Dockerfile-local
47+
command: "./gradlew test"
48+
environment:
49+
- "USER=unittest"
50+
- "CADENCE_SEEDS=cadence"
51+
- "USE_DOCKER_SERVICE=true"
52+
- "STICKY_OFF=true"
53+
depends_on:
54+
- cadence
55+
volumes:
56+
- "../../:/cadence-java-client"
57+
networks:
58+
services-network:
59+
aliases:
60+
- unit-test-docker-sticky-off
61+
62+
unit-test-docker-sticky-on:
63+
build:
64+
context: ../../
65+
dockerfile: ./docker/buildkite/Dockerfile-local
66+
command: "./gradlew test"
67+
environment:
68+
- "USER=unittest"
69+
- "CADENCE_SEEDS=cadence"
70+
- "USE_DOCKER_SERVICE=true"
71+
- "STICKY_OFF=false"
72+
depends_on:
73+
- cadence
74+
volumes:
75+
- "../../:/cadence-java-client"
76+
networks:
77+
services-network:
78+
aliases:
79+
- unit-test-docker-sticky-on
80+
81+
unit-test-test-service:
82+
build:
83+
context: ../../
84+
dockerfile: ./docker/buildkite/Dockerfile-local
85+
command: "./gradlew test"
86+
environment:
87+
- "USER=unittest"
88+
- "USE_DOCKER_SERVICE=false"
89+
volumes:
90+
- "../../:/cadence-java-client"
91+
networks:
92+
services-network:
93+
aliases:
94+
- unit-test-test-service
95+
96+
networks:
97+
services-network:
98+
name: services-network
99+
driver: bridge

docker/buildkite/docker-compose.yaml

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
version: '3.5'
2+
3+
services:
4+
cassandra:
5+
image: cassandra:3.11
6+
ports:
7+
- "9042:9042"
8+
networks:
9+
services-network:
10+
aliases:
11+
- cassandra
12+
13+
statsd:
14+
image: hopsoft/graphite-statsd
15+
ports:
16+
- "8080:80"
17+
- "2003:2003"
18+
- "8125:8125"
19+
- "8126:8126"
20+
networks:
21+
services-network:
22+
aliases:
23+
- statsd
24+
25+
cadence:
26+
image: ubercadence/server:0.5.6
27+
ports:
28+
- "7933:7933"
29+
- "7934:7934"
30+
- "7935:7935"
31+
- "7939:7939"
32+
environment:
33+
- "CASSANDRA_SEEDS=cassandra"
34+
- "STATSD_ENDPOINT=statsd:8125"
35+
depends_on:
36+
- cassandra
37+
- statsd
38+
networks:
39+
services-network:
40+
aliases:
41+
- cadence
42+
43+
unit-test-docker-sticky-off:
44+
build:
45+
context: ../../
46+
dockerfile: ./docker/buildkite/Dockerfile
47+
command: "./gradlew test"
48+
environment:
49+
- "USER=unittest"
50+
- "CADENCE_SEEDS=cadence"
51+
- "USE_DOCKER_SERVICE=true"
52+
- "STICKY_OFF=true"
53+
depends_on:
54+
- cadence
55+
volumes:
56+
- "../../:/cadence-java-client"
57+
networks:
58+
services-network:
59+
aliases:
60+
- unit-test-docker-sticky-off
61+
62+
unit-test-docker-sticky-on:
63+
build:
64+
context: ../../
65+
dockerfile: ./docker/buildkite/Dockerfile
66+
command: "./gradlew test"
67+
environment:
68+
- "USER=unittest"
69+
- "CADENCE_SEEDS=cadence"
70+
- "USE_DOCKER_SERVICE=true"
71+
- "STICKY_OFF=false"
72+
depends_on:
73+
- cadence
74+
volumes:
75+
- "../../:/cadence-java-client"
76+
networks:
77+
services-network:
78+
aliases:
79+
- unit-test-docker-sticky-on
80+
81+
unit-test-test-service:
82+
build:
83+
context: ../../
84+
dockerfile: ./docker/buildkite/Dockerfile
85+
command: "./gradlew test"
86+
environment:
87+
- "USER=unittest"
88+
- "USE_DOCKER_SERVICE=false"
89+
volumes:
90+
- "../../:/cadence-java-client"
91+
networks:
92+
services-network:
93+
aliases:
94+
- unit-test-test-service
95+
96+
networks:
97+
services-network:
98+
name: services-network
99+
driver: bridge

src/main/java/com/uber/cadence/serviceclient/WorkflowServiceTChannel.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package com.uber.cadence.serviceclient;
1919

20+
import com.google.common.base.Strings;
2021
import com.google.common.collect.ImmutableMap;
2122
import com.uber.cadence.BadRequestError;
2223
import com.uber.cadence.DeprecateDomainRequest;
@@ -340,7 +341,12 @@ public ClientOptions build() {
340341
* on a default port (7933).
341342
*/
342343
public WorkflowServiceTChannel() {
343-
this(LOCALHOST, DEFAULT_LOCAL_CADENCE_SERVER_PORT, new ClientOptions.Builder().build());
344+
this(
345+
Strings.isNullOrEmpty(System.getenv("CADENCE_SEEDS"))
346+
? LOCALHOST
347+
: System.getenv("CADENCE_SEEDS"),
348+
DEFAULT_LOCAL_CADENCE_SERVER_PORT,
349+
new ClientOptions.Builder().build());
344350
}
345351

346352
/**
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.uber.cadence;
2+
3+
import static com.uber.cadence.workflow.WorkflowTest.DOMAIN;
4+
5+
import com.uber.cadence.serviceclient.IWorkflowService;
6+
import com.uber.cadence.serviceclient.WorkflowServiceTChannel;
7+
import org.apache.thrift.TException;
8+
9+
/** Waits for local service to become available and registers UnitTest domain. */
10+
public class RegisterTestDomain {
11+
private static final boolean useDockerService =
12+
Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE"));
13+
14+
public static void main(String[] args) throws TException, InterruptedException {
15+
if (!useDockerService) {
16+
return;
17+
}
18+
19+
IWorkflowService service = new WorkflowServiceTChannel();
20+
RegisterDomainRequest request =
21+
new RegisterDomainRequest().setName(DOMAIN).setWorkflowExecutionRetentionPeriodInDays(1);
22+
while (true) {
23+
try {
24+
service.RegisterDomain(request);
25+
break;
26+
} catch (DomainAlreadyExistsError e) {
27+
break;
28+
} catch (TException e) {
29+
String message = e.getMessage();
30+
if (message != null
31+
&& !message.contains("Failed to connect to the host")
32+
&& !message.contains("Connection timeout on identification")) {
33+
e.printStackTrace();
34+
}
35+
Thread.sleep(500);
36+
continue;
37+
} catch (Throwable e) {
38+
e.printStackTrace();
39+
System.exit(1);
40+
}
41+
}
42+
System.exit(0);
43+
}
44+
}

src/test/java/com/uber/cadence/worker/CleanWorkerShutdownTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,17 @@
5555
@RunWith(Parameterized.class)
5656
public class CleanWorkerShutdownTest {
5757

58-
private static final boolean skipDockerService =
59-
Boolean.parseBoolean(System.getenv("SKIP_DOCKER_SERVICE"));
58+
private static final boolean useDockerService =
59+
Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE"));
6060

6161
@Parameterized.Parameter public boolean useExternalService;
6262

6363
@Parameterized.Parameters(name = "{1}")
6464
public static Object[] data() {
65-
if (skipDockerService) {
65+
if (!useDockerService) {
6666
return new Object[][] {{false, "TestService"}};
6767
} else {
68-
return new Object[][] {{true, "Docker"}, {false, "TestService"}};
68+
return new Object[][] {{true, "Docker"}};
6969
}
7070
}
7171

src/test/java/com/uber/cadence/worker/StickyWorkerTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,17 @@
6969
@RunWith(Parameterized.class)
7070
public class StickyWorkerTest {
7171

72-
private static final boolean skipDockerService =
73-
Boolean.parseBoolean(System.getenv("SKIP_DOCKER_SERVICE"));
72+
private static final boolean useDockerService =
73+
Boolean.parseBoolean(System.getenv("USE_DOCKER_SERVICE"));
7474

7575
@Parameterized.Parameter public boolean useExternalService;
7676

7777
@Parameterized.Parameters(name = "{1}")
7878
public static Object[] data() {
79-
if (skipDockerService) {
79+
if (!useDockerService) {
8080
return new Object[][] {{false, "TestService"}};
8181
} else {
82-
return new Object[][] {{true, "Docker"}, {false, "TestService"}};
82+
return new Object[][] {{true, "Docker"}};
8383
}
8484
}
8585

@@ -92,7 +92,7 @@ public static Object[] data() {
9292

9393
@BeforeClass
9494
public static void setUp() {
95-
if (!skipDockerService) {
95+
if (useDockerService) {
9696
service = new WorkflowServiceTChannel();
9797
}
9898
}

0 commit comments

Comments
 (0)