Skip to content

Commit 0203495

Browse files
authored
test(backend): Bootstrap integration test (#177)
* Bootstrap integration test * Add docker compose startup timeout * Move test config to external .env file * Cascade docker-compose files i.o.t. unmount volumes in testing
1 parent 0f4e9f5 commit 0203495

14 files changed

+1399
-303
lines changed

.github/workflows/checks.yml

+2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ jobs:
7070
node-version: ${{ matrix.node-version }}
7171
- name: Install dependencies
7272
run: npm ci
73+
- name: Copy .env.test
74+
run: cp ./evaluation/.env.test.template ./evaluation/.env.test
7375
- name: Run tests
7476
working-directory: ./ts/backend/
7577
run: npm test

evaluation/.env.test.template

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Overrides for test environment.
2+
#
3+
# Usage: Pass this .env file to docker compose **before** passing the default
4+
# .env file.
5+
6+
# overwrite ports so test and dev environments can be up at the same time
7+
RABBITMQ_MANAGEMENT_PORT=35672
8+
RABBITMQ_PORT=25672
9+
POSTGRES_PORT=25432
10+
PGADMIN_LISTEN_PORT=35432
11+
MINIO_PORT=29000
12+
MINIO_CONSOLE_PORT=29001
13+
REDIS_PORT=26379
14+
KEYCLOAK_PORT=28081

evaluation/docker-compose-base.yml

+153
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
services:
2+
postgres:
3+
image: postgres:15
4+
hostname: postgres
5+
env_file: .env
6+
environment:
7+
- POSTGRES_USER=${POSTGRES_USER}
8+
- POSTGRES_PASSWORD=${POSTGRES_USER}
9+
- POSTGRES_DB=${POSTGRES_DB}
10+
ports:
11+
- ${POSTGRES_PORT}:5432
12+
healthcheck:
13+
test: [ "CMD-SHELL", "pg_isready", "-d", "${POSTGRES_DB}" ]
14+
interval: 30s
15+
timeout: 60s
16+
retries: 5
17+
start_period: 80s
18+
networks:
19+
- flatland-benchmarks
20+
21+
redis:
22+
image: redis
23+
ports:
24+
- ${REDIS_PORT:-6379}:6379
25+
restart: unless-stopped
26+
logging:
27+
options:
28+
max-size: "20m"
29+
max-file: "5"
30+
networks:
31+
- flatland-benchmarks
32+
33+
redis-monitor:
34+
image: redis
35+
command: redis-cli -h redis -p 6379 monitor
36+
restart: unless-stopped
37+
logging:
38+
options:
39+
max-size: "20m"
40+
max-file: "5"
41+
depends_on:
42+
redis:
43+
condition: service_started
44+
networks:
45+
- flatland-benchmarks
46+
47+
rabbit:
48+
build:
49+
context: rabbitmq
50+
dockerfile: Dockerfile
51+
args:
52+
- WORKER_CONNECTION_TIMEOUT=${WORKER_CONNECTION_TIMEOUT}
53+
hostname: rabbit
54+
env_file: .env
55+
environment:
56+
- http_proxy=${RABBITMQ_HTTP_PROXY}
57+
- https_proxy=${RABBITMQ_HTTPS_PROXY}
58+
- no_proxy=${RABBITMQ_NO_PROXY}
59+
ports:
60+
- ${RABBITMQ_MANAGEMENT_PORT:-15672}:15672
61+
- ${RABBITMQ_PORT}:5672
62+
restart: unless-stopped
63+
logging:
64+
options:
65+
max-size: "20m"
66+
max-file: "5"
67+
healthcheck:
68+
test: rabbitmqctl status
69+
interval: 10s
70+
timeout: 10s
71+
retries: 30
72+
networks:
73+
- flatland-benchmarks
74+
75+
minio:
76+
hostname: minio
77+
image: "minio/minio:RELEASE.2024-11-07T00-52-20Z"
78+
restart: on-failure
79+
ports:
80+
- "${MINIO_PORT}:${MINIO_PORT}"
81+
- "${MINIO_CONSOLE_PORT}:${MINIO_CONSOLE_PORT}"
82+
environment:
83+
MINIO_ROOT_USER: "${MINIO_ROOT_USER}"
84+
MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD}"
85+
healthcheck:
86+
test: [ "CMD", "bash", "-c", "curl -v --fail 127.0.0.1:${MINIO_PORT}/minio/health/ready" ]
87+
interval: 5s
88+
timeout: 1s
89+
retries: 5
90+
command: server /data --address :${MINIO_PORT} --console-address :${MINIO_CONSOLE_PORT}
91+
networks:
92+
- flatland-benchmarks
93+
94+
minio_setup:
95+
image: minio/mc:RELEASE.2024-11-05T11-29-45Z
96+
depends_on:
97+
minio:
98+
condition: service_healthy
99+
entrypoint: [ "/bin/sh","-c" ]
100+
command:
101+
- |
102+
set -x
103+
set -e
104+
/usr/bin/mc config host add myminio http://minio:${MINIO_PORT} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}
105+
106+
/usr/bin/mc mb myminio/${S3_BUCKET}
107+
108+
echo "createbuckets successful"
109+
networks:
110+
- flatland-benchmarks
111+
112+
compute_worker:
113+
# https://docs.celeryq.dev/en/stable/reference/cli.html#celery-worker
114+
command: python -m celery -A tasks worker -l info -n compute-worker@%n
115+
build:
116+
context: ./compute_worker
117+
dockerfile: Dockerfile_docker_compose
118+
depends_on:
119+
rabbit:
120+
condition: service_healthy
121+
minio_setup:
122+
condition: service_completed_successfully
123+
volumes:
124+
- /var/run/docker.sock:/var/run/docker.sock
125+
- ./compute_worker/tasks_docker_compose.py:/app/tasks.py
126+
env_file: .env
127+
environment:
128+
- BROKER_URL=pyamqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@${RABBITMQ_HOST}:5672//
129+
- REDIS_IP=redis://redis:6379
130+
- HOST_DIRECTORY=${PWD}
131+
- BENCHMARKING_NETWORK=${COMPOSE_PROJECT_NAME}_flatland-benchmarks
132+
- S3_BUCKET=${S3_BUCKET}
133+
# for backend to S3 communication, use internal docker hostname
134+
- AWS_ENDPOINT_URL=http://minio:${MINIO_PORT}
135+
- AWS_ACCESS_KEY_ID=${MINIO_ROOT_USER}
136+
- AWS_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}
137+
# TODO remove:
138+
- S3_UPLOAD_PATH_TEMPLATE=${S3_UPLOAD_PATH_TEMPLATE}
139+
- S3_UPLOAD_WITH_SUBMISSION_ID=true
140+
- S3_UPLOAD_PATH_TEMPLATE_USE_SUBMISSION_ID=${S3_UPLOAD_PATH_TEMPLATE_USE_SUBMISSION_ID}
141+
142+
logging:
143+
options:
144+
max-size: "20m"
145+
max-file: "5"
146+
healthcheck:
147+
test: celery -A tasks inspect ping
148+
networks:
149+
- flatland-benchmarks
150+
151+
networks:
152+
flatland-benchmarks:
153+

evaluation/docker-compose-demo.yml

+22-136
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,38 @@
11
services:
22
postgres:
3-
image: postgres:15
4-
hostname: postgres
5-
env_file: .env
6-
environment:
7-
- POSTGRES_USER=${POSTGRES_USER}
8-
- POSTGRES_PASSWORD=${POSTGRES_USER}
9-
- POSTGRES_DB=${POSTGRES_DB}
10-
ports:
11-
- ${POSTGRES_PORT}:5432
3+
extends:
4+
file: docker-compose-base.yml
5+
service: postgres
126

13-
healthcheck:
14-
test: [ "CMD-SHELL", "pg_isready", "-d", "${POSTGRES_DB}" ]
15-
interval: 30s
16-
timeout: 60s
17-
retries: 5
18-
start_period: 80s
19-
networks:
20-
- flatland-benchmarks
217
redis:
22-
image: redis
23-
ports:
24-
- ${REDIS_PORT:-6379}:6379
25-
restart: unless-stopped
26-
logging:
27-
options:
28-
max-size: "20m"
29-
max-file: "5"
30-
networks:
31-
- flatland-benchmarks
8+
extends:
9+
file: docker-compose-base.yml
10+
service: redis
3211

3312
redis-monitor:
34-
image: redis
35-
command: redis-cli -h redis -p 6379 monitor
36-
restart: unless-stopped
37-
logging:
38-
options:
39-
max-size: "20m"
40-
max-file: "5"
41-
depends_on:
42-
redis:
43-
condition: service_started
44-
networks:
45-
- flatland-benchmarks
13+
extends:
14+
file: docker-compose-base.yml
15+
service: redis-monitor
4616

4717
rabbit:
48-
build:
49-
context: rabbitmq
50-
dockerfile: Dockerfile
51-
args:
52-
- WORKER_CONNECTION_TIMEOUT=${WORKER_CONNECTION_TIMEOUT}
53-
hostname: rabbit
54-
env_file: .env
55-
environment:
56-
- http_proxy=${RABBITMQ_HTTP_PROXY}
57-
- https_proxy=${RABBITMQ_HTTPS_PROXY}
58-
- no_proxy=${RABBITMQ_NO_PROXY}
59-
ports:
60-
- ${RABBITMQ_MANAGEMENT_PORT:-15672}:15672
61-
- ${RABBITMQ_PORT}:5672
62-
restart: unless-stopped
63-
logging:
64-
options:
65-
max-size: "20m"
66-
max-file: "5"
67-
healthcheck:
68-
test: rabbitmqctl status
69-
interval: 10s
70-
timeout: 10s
71-
retries: 30
72-
networks:
73-
- flatland-benchmarks
18+
extends:
19+
file: docker-compose-base.yml
20+
service: rabbit
7421

7522
minio:
76-
hostname: minio
77-
image: "minio/minio:RELEASE.2024-11-07T00-52-20Z"
78-
restart: on-failure
79-
ports:
80-
- "${MINIO_PORT}:${MINIO_PORT}"
81-
- "${MINIO_CONSOLE_PORT}:${MINIO_CONSOLE_PORT}"
82-
environment:
83-
MINIO_ROOT_USER: "${MINIO_ROOT_USER}"
84-
MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD}"
85-
healthcheck:
86-
test: [ "CMD", "bash", "-c", "curl -v --fail 127.0.0.1:${MINIO_PORT}/minio/health/ready" ]
87-
interval: 5s
88-
timeout: 1s
89-
retries: 5
90-
command: server /data --address :${MINIO_PORT} --console-address :${MINIO_CONSOLE_PORT}
91-
networks:
92-
- flatland-benchmarks
23+
extends:
24+
file: docker-compose-base.yml
25+
service: minio
9326

9427
minio_setup:
95-
image: minio/mc:RELEASE.2024-11-05T11-29-45Z
96-
depends_on:
97-
minio:
98-
condition: service_healthy
99-
entrypoint: [ "/bin/sh","-c" ]
100-
command:
101-
- |
102-
set -x
103-
set -e
104-
/usr/bin/mc config host add myminio http://minio:${MINIO_PORT} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}
28+
extends:
29+
file: docker-compose-base.yml
30+
service: minio_setup
10531

106-
/usr/bin/mc mb myminio/${S3_BUCKET}
107-
108-
echo "createbuckets successful"
109-
networks:
110-
- flatland-benchmarks
11132
compute_worker:
112-
# https://docs.celeryq.dev/en/stable/reference/cli.html#celery-worker
113-
command: python -m celery -A tasks worker -l info -n compute-worker@%n
114-
build:
115-
context: ./compute_worker
116-
dockerfile: Dockerfile_docker_compose
117-
depends_on:
118-
rabbit:
119-
condition: service_healthy
120-
minio_setup:
121-
condition: service_completed_successfully
122-
volumes:
123-
- /var/run/docker.sock:/var/run/docker.sock
124-
- ./compute_worker/tasks_docker_compose.py:/app/tasks.py
125-
env_file: .env
126-
environment:
127-
- BROKER_URL=pyamqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@${RABBITMQ_HOST}:5672//
128-
- REDIS_IP=redis://redis:6379
129-
- HOST_DIRECTORY=${PWD}
130-
- BENCHMARKING_NETWORK=${COMPOSE_PROJECT_NAME}_flatland-benchmarks
131-
- S3_BUCKET=${S3_BUCKET}
132-
# for backend to S3 communication, use internal docker hostname
133-
- AWS_ENDPOINT_URL=http://minio:${MINIO_PORT}
134-
- AWS_ACCESS_KEY_ID=${MINIO_ROOT_USER}
135-
- AWS_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}
136-
# TODO remove:
137-
- S3_UPLOAD_PATH_TEMPLATE=${S3_UPLOAD_PATH_TEMPLATE}
138-
- S3_UPLOAD_WITH_SUBMISSION_ID=true
139-
- S3_UPLOAD_PATH_TEMPLATE_USE_SUBMISSION_ID=${S3_UPLOAD_PATH_TEMPLATE_USE_SUBMISSION_ID}
140-
141-
142-
logging:
143-
options:
144-
max-size: "20m"
145-
max-file: "5"
146-
healthcheck:
147-
test: celery -A tasks inspect ping
148-
networks:
149-
- flatland-benchmarks
33+
extends:
34+
file: docker-compose-base.yml
35+
service: compute_worker
15036

15137
fab-backend:
15238
image: ghcr.io/flatland-association/fab-backend:latest
@@ -171,6 +57,6 @@ services:
17157
condition: service_healthy
17258
ports:
17359
- 80:80
60+
17461
networks:
17562
flatland-benchmarks:
176-

0 commit comments

Comments
 (0)