Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9312484
D8225.id29670.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
D8225.id29670.diff
View Options
diff --git a/docker/tests/conftest.py b/docker/tests/conftest.py
--- a/docker/tests/conftest.py
+++ b/docker/tests/conftest.py
@@ -5,7 +5,6 @@
from os.path import join
import re
-import subprocess
import time
from typing import Generator, Mapping, Tuple
from urllib.parse import urljoin
@@ -36,67 +35,78 @@
</entry>
"""
+# wait-for-it timout
+WFI_TIMEOUT = 60
+
+@pytest.fixture(scope="session")
+def docker_host():
+ return testinfra.get_host("local://")
+
+@pytest.fixture(scope="session")
+def compose_cmd(docker_host):
+ try:
+ docker_host.check_output("docker compose version")
+ return "docker compose"
+ except AssertionError:
+ print("Fall back to old docker-compose command")
+ return "docker-compose"
+
# scope='session' so we use the same container for all the tests;
@pytest.fixture(scope="session")
-def docker_compose(request):
+def docker_compose(request, docker_host, compose_cmd):
# start the whole cluster
- subprocess.check_output(["docker-compose", "up", "-d"])
- yield
- # and stop it
- subprocess.check_call(["docker-compose", "down", "-v"])
+ docker_host.check_output(f"{compose_cmd} up -d")
+ # small hack: add a helper func to docker_host; so it's not necessary to
+ # use all 3 docker_compose, docker_host and compose_cmd fixtures everywhere
+ docker_host.check_compose_output = lambda command: docker_host.check_output(f"{compose_cmd} {command}")
+ yield docker_host
-@pytest.fixture(scope="session")
-def wfi_timeout():
- """
- wait-for-it timeout in seconds
- """
- return 60
+ # and stop the cluster
+ docker_host.check_output(f"{compose_cmd} down -v")
@pytest.fixture(scope="session")
-def scheduler_host(request, docker_compose, wfi_timeout):
+def scheduler_host(request, docker_compose):
# run a container in which test commands are executed
docker_id = (
- subprocess.check_output(
- ["docker-compose", "run", "-d", "swh-scheduler", "shell", "sleep", "1h"]
+ docker_compose.check_compose_output(
+ "run -d swh-scheduler shell sleep 1h"
)
- .decode()
.strip()
)
scheduler_host = testinfra.get_host("docker://" + docker_id)
- scheduler_host.check_output(f"wait-for-it swh-scheduler:5008 -t {wfi_timeout}")
- scheduler_host.check_output(f"wait-for-it swh-storage:5002 -t {wfi_timeout}")
+ scheduler_host.check_output(f"wait-for-it swh-scheduler:5008 -t {WFI_TIMEOUT}")
+ scheduler_host.check_output(f"wait-for-it swh-storage:5002 -t {WFI_TIMEOUT}")
# return a testinfra connection to the container
yield scheduler_host
# at the end of the test suite, destroy the container
- subprocess.check_call(["docker", "rm", "-f", docker_id])
+ docker_compose.check_output(f"docker rm -f {docker_id}")
# scope='session' so we use the same container for all the tests;
@pytest.fixture(scope="session")
-def deposit_host(request, docker_compose, wfi_timeout):
+def deposit_host(request, docker_compose):
# run a container in which test commands are executed
docker_id = (
- subprocess.check_output(
- ["docker-compose", "run", "-d", "swh-deposit", "shell", "sleep", "1h"]
+ docker_compose.check_compose_output(
+ "run -d swh-deposit shell sleep 1h"
)
- .decode()
.strip()
)
deposit_host = testinfra.get_host("docker://" + docker_id)
deposit_host.check_output("echo 'print(\"Hello World!\")\n' > /tmp/hello.py")
deposit_host.check_output("tar -C /tmp -czf /tmp/archive.tgz /tmp/hello.py")
deposit_host.check_output(f"echo '{SAMPLE_METADATA}' > /tmp/metadata.xml")
- deposit_host.check_output(f"wait-for-it swh-deposit:5006 -t {wfi_timeout}")
+ deposit_host.check_output(f"wait-for-it swh-deposit:5006 -t {WFI_TIMEOUT}")
# return a testinfra connection to the container
yield deposit_host
# at the end of the test suite, destroy the container
- subprocess.check_call(["docker", "rm", "-f", docker_id])
+ docker_compose.check_output(f"docker rm -f {docker_id}")
@pytest.fixture(scope="session")
@@ -105,7 +115,7 @@
@pytest.fixture(scope="session")
-def git_origin(scheduler_host, git_url):
+def git_origin(docker_compose, scheduler_host, git_url):
task = scheduler_host.check_output(f"swh scheduler task add load-git url={git_url}")
taskid = re.search(r"^Task (?P<id>\d+)$", task, flags=re.MULTILINE).group("id")
assert int(taskid) > 0
@@ -121,13 +131,13 @@
time.sleep(1)
continue
if "[failed]" in status:
- loader_logs = subprocess.check_output(
- ["docker-compose", "logs", "swh-loader"]
+ loader_logs = docker_compose.check_compose_output(
+ "logs swh-loader"
)
assert False, (
"Loading execution failed\n"
f"status: {status}\n"
- f"loader logs: " + loader_logs.decode(errors="replace")
+ f"loader logs: " + loader_logs
)
assert False, f"Loading execution failed, task status is {status}"
return git_url
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jul 2, 10:54 AM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3230224
Attached To
D8225: docker/tests: rework and improve fixture usage in conftest.py, and use compose v2 if available
Event Timeline
Log In to Comment