Skip to content

Commit 24b1cbf

Browse files
committed
feat: Run testcases in parallel
This PR lets testcases run in parallel to speed up things. On my Mac, 16 parallel tests take 196.31 seconds instead of 645.86 seconds with `--parallel 1`. The main changes here are to allocate sepearate subnets for each testcase run, so Docker can keep them separated. We also need to pass that network configration into the simulator via environment variables. We're also collecting log messages during the tests and print them after a test ends, to reduce interleaved output. Depends on quic-interop/quic-network-simulator#143
1 parent 56023e7 commit 24b1cbf

File tree

5 files changed

+438
-211
lines changed

5 files changed

+438
-211
lines changed

docker-compose.yml

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,45 @@
11
services:
22
sim:
33
image: martenseemann/quic-network-simulator
4-
container_name: sim
54
hostname: sim
65
stdin_open: true
76
tty: true
87
environment:
98
- WAITFORSERVER=$WAITFORSERVER
109
- SCENARIO=$SCENARIO
10+
- CLIENT_V4_ADDR=${CLIENT_V4_ADDR}
11+
- CLIENT_V4_GATEWAY=${CLIENT_V4_NET}.2
12+
- CLIENT_V6_ADDR=${CLIENT_V6_ADDR}
13+
- CLIENT_V6_GATEWAY=${CLIENT_V6_NET}::2
14+
- SERVER_V4_ADDR=${SERVER_V4_ADDR}
15+
- SERVER_V4_GATEWAY=${SERVER_V4_NET}.2
16+
- SERVER_V6_ADDR=${SERVER_V6_ADDR}
17+
- SERVER_V6_GATEWAY=${SERVER_V6_NET}::2
18+
- SUBNET_V4=${SUBNET_V4}
19+
- SUBNET_V6=${SUBNET_V6}
20+
- V4_PREFIX=${V4_PREFIX}
21+
- V6_PREFIX=${V6_PREFIX}
22+
- LEFTNET_NAME=eth0
23+
- RIGHTNET_NAME=eth1
1124
cap_add:
1225
- NET_ADMIN
1326
- NET_RAW
1427
expose:
1528
- "57832"
1629
networks:
1730
leftnet:
18-
ipv4_address: 193.167.0.2
19-
ipv6_address: fd00:cafe:cafe:0::2
31+
ipv4_address: ${CLIENT_V4_NET}.2
32+
ipv6_address: ${CLIENT_V6_NET}::2
2033
interface_name: eth0
2134
rightnet:
22-
ipv4_address: 193.167.100.2
23-
ipv6_address: fd00:cafe:cafe:100::2
35+
ipv4_address: ${SERVER_V4_NET}.2
36+
ipv6_address: ${SERVER_V6_NET}::2
2437
interface_name: eth1
2538
extra_hosts:
26-
- "server:193.167.100.100"
39+
- "server:${SERVER_V4_ADDR}"
2740

2841
server:
2942
image: $SERVER
30-
container_name: server
3143
hostname: server
3244
stdin_open: true
3345
tty: true
@@ -41,6 +53,11 @@ services:
4153
- SSLKEYLOGFILE=/logs/keys.log
4254
- QLOGDIR=/logs/qlog/
4355
- TESTCASE=$TESTCASE_SERVER
56+
- SUBNET_V4_PREFIX=${SUBNET_V4_PREFIX}
57+
- SUBNET_V4_SUBNET=${SUBNET_V4_SUBNET}
58+
- SUBNET_V4=${SUBNET_V4}
59+
- SUBNET_V6_PREFIX=${SUBNET_V6_PREFIX}
60+
- SUBNET_V6=${SUBNET_V6}
4461
depends_on:
4562
- sim
4663
cap_add:
@@ -49,16 +66,15 @@ services:
4966
memlock: 67108864
5067
networks:
5168
rightnet:
52-
ipv4_address: 193.167.100.100
53-
ipv6_address: fd00:cafe:cafe:100::100
69+
ipv4_address: ${SERVER_V4_ADDR}
70+
ipv6_address: ${SERVER_V6_ADDR}
5471
interface_name: eth0
5572
extra_hosts:
56-
- "server4:193.167.100.100"
57-
- "server6:fd00:cafe:cafe:100::100"
73+
- "server4:${SERVER_V4_ADDR}"
74+
- "server6:${SERVER_V6_ADDR}"
5875

5976
client:
6077
image: $CLIENT
61-
container_name: client
6278
hostname: client
6379
stdin_open: true
6480
tty: true
@@ -73,6 +89,11 @@ services:
7389
- QLOGDIR=/logs/qlog/
7490
- TESTCASE=$TESTCASE_CLIENT
7591
- REQUESTS=$REQUESTS
92+
- SUBNET_V4_PREFIX=${SUBNET_V4_PREFIX}
93+
- SUBNET_V4_SUBNET=${SUBNET_V4_SUBNET}
94+
- SUBNET_V4=${SUBNET_V4}
95+
- SUBNET_V6_PREFIX=${SUBNET_V6_PREFIX}
96+
- SUBNET_V6=${SUBNET_V6}
7697
depends_on:
7798
- sim
7899
cap_add:
@@ -81,18 +102,17 @@ services:
81102
memlock: 67108864
82103
networks:
83104
leftnet:
84-
ipv4_address: 193.167.0.100
85-
ipv6_address: fd00:cafe:cafe:0::100
105+
ipv4_address: ${CLIENT_V4_ADDR}
106+
ipv6_address: ${CLIENT_V6_ADDR}
86107
interface_name: eth0
87108
extra_hosts:
88-
- "server4:193.167.100.100"
89-
- "server6:fd00:cafe:cafe:100::100"
90-
- "server46:193.167.100.100"
91-
- "server46:fd00:cafe:cafe:100::100"
109+
- "server4:${SERVER_V4_ADDR}"
110+
- "server6:${SERVER_V6_ADDR}"
111+
- "server46:${SERVER_V4_ADDR}"
112+
- "server46:${SERVER_V6_ADDR}"
92113

93114
iperf_server:
94115
image: martenseemann/quic-interop-iperf-endpoint
95-
container_name: iperf_server
96116
stdin_open: true
97117
tty: true
98118
environment:
@@ -105,17 +125,16 @@ services:
105125
- NET_ADMIN
106126
networks:
107127
rightnet:
108-
ipv4_address: 193.167.100.110
109-
ipv6_address: fd00:cafe:cafe:100::110
128+
ipv4_address: ${SERVER_V4_NET}.110
129+
ipv6_address: ${SERVER_V6_NET}::110
110130
extra_hosts:
111-
- "client4:193.167.0.90"
112-
- "client6:fd00:cafe:cafe:0::100"
113-
- "client46:193.167.0.90"
114-
- "client46:fd00:cafe:cafe:0::100"
131+
- "client4:${CLIENT_V4_NET}.90"
132+
- "client6:${CLIENT_V6_NET}::100"
133+
- "client46:${CLIENT_V4_NET}.90"
134+
- "client46:${CLIENT_V6_NET}::100"
115135

116136
iperf_client:
117137
image: martenseemann/quic-interop-iperf-endpoint
118-
container_name: iperf_client
119138
stdin_open: true
120139
tty: true
121140
environment:
@@ -127,13 +146,13 @@ services:
127146
- NET_ADMIN
128147
networks:
129148
leftnet:
130-
ipv4_address: 193.167.0.90
131-
ipv6_address: fd00:cafe:cafe:0::90
149+
ipv4_address: ${CLIENT_V4_NET}.90
150+
ipv6_address: ${CLIENT_V6_NET}::90
132151
extra_hosts:
133-
- "server4:193.167.100.110"
134-
- "server6:fd00:cafe:cafe:100::110"
135-
- "server46:193.167.100.110"
136-
- "server46:fd00:cafe:cafe:100::110"
152+
- "server4:${SERVER_V4_NET}.110"
153+
- "server6:${SERVER_V6_NET}::110"
154+
- "server46:${SERVER_V4_NET}.110"
155+
- "server46:${SERVER_V6_NET}::110"
137156

138157
networks:
139158
leftnet:
@@ -143,15 +162,14 @@ networks:
143162
enable_ipv6: true
144163
ipam:
145164
config:
146-
- subnet: 193.167.0.0/24
147-
- subnet: fd00:cafe:cafe:0::/64
165+
- subnet: ${CLIENT_V4_NET}.0/${V4_PREFIX}
166+
- subnet: ${CLIENT_V6_NET}::/${V6_PREFIX}
148167
rightnet:
149168
driver: bridge
150169
driver_opts:
151170
com.docker.network.bridge.enable_ip_masquerade: 'false'
152171
enable_ipv6: true
153172
ipam:
154173
config:
155-
- subnet: 193.167.100.0/24
156-
- subnet: fd00:cafe:cafe:100::/64
157-
174+
- subnet: ${SERVER_V4_NET}.0/${V4_PREFIX}
175+
- subnet: ${SERVER_V6_NET}::/${V6_PREFIX}

0 commit comments

Comments
 (0)