Skip to content

Commit 50c0f9b

Browse files
committed
Ensure that test are run inside their own directory
1 parent 7d36d05 commit 50c0f9b

File tree

1 file changed

+37
-7
lines changed

1 file changed

+37
-7
lines changed

tests/supervisor/test_qemu_instance.py

+37-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import asyncio
22
import logging
3+
import tempfile
34
from asyncio.subprocess import Process
45
from pathlib import Path
56

@@ -53,12 +54,25 @@ async def test_create_qemu_instance(mocker):
5354
No network.
5455
We don't actually check that the system ping since there is no network
5556
"""
57+
original_linux_path = settings.LINUX_PATH
5658
mocker.patch.object(settings, "ALLOW_VM_NETWORKING", False)
5759
mocker.patch.object(settings, "USE_FAKE_INSTANCE_BASE", True)
5860
mocker.patch.object(settings, "FAKE_INSTANCE_MESSAGE", settings.FAKE_INSTANCE_QEMU_MESSAGE)
59-
mocker.patch.object(settings, "FAKE_INSTANCE_BASE", settings.FAKE_INSTANCE_QEMU_MESSAGE)
61+
mocker.patch.object(settings, "FAKE_INSTANCE_BASE", settings.FAKE_QEMU_INSTANCE_BASE)
6062
mocker.patch.object(settings, "ENABLE_CONFIDENTIAL_COMPUTING", False)
6163
mocker.patch.object(settings, "USE_JAILER", False)
64+
tmp_dir = tempfile.TemporaryDirectory(prefix="alephtest_")
65+
tmp_path = Path(tmp_dir.name)
66+
cache_root = tmp_path / "cache"
67+
exec_root = tmp_path / "exec"
68+
mocker.patch.object(settings, "CACHE_ROOT", cache_root)
69+
mocker.patch.object(settings, "EXECUTION_ROOT", exec_root)
70+
mocker.patch.object(settings, "PERSISTENT_VOLUMES_DIR", exec_root / "volumes" / "persistent")
71+
mocker.patch.object(settings, "JAILER_BASE_DIRECTORY", exec_root / "jailer")
72+
mocker.patch.object(settings, "EXECUTION_LOG_DIRECTORY", exec_root / "executions")
73+
74+
# Patch journal.stream so the output of qemu proecss is shown in the test output
75+
mocker.patch("aleph.vm.hypervisors.qemu.qemuvm.journal.stream", return_value=None)
6276

6377
# Patch journal.stream so the output of qemu proecss is shown in the test output
6478
mocker.patch("aleph.vm.hypervisors.qemu.qemuvm.journal.stream", return_value=None)
@@ -69,10 +83,12 @@ async def test_create_qemu_instance(mocker):
6983
)
7084

7185
logging.basicConfig(level=logging.DEBUG)
72-
86+
logger = logging.getLogger(__name__)
7387
# Ensure that the settings are correct and required files present.
7488
settings.setup()
7589
settings.check()
90+
logger.info(settings.EXECUTION_ROOT)
91+
logger.info(settings.PERSISTENT_VOLUMES_DIR)
7692

7793
# The database is required for the metrics and is currently not optional.
7894
engine = metrics.setup_engine()
@@ -110,6 +126,7 @@ async def test_create_qemu_instance(mocker):
110126
await qemu_execution.qemu_process.wait()
111127
assert qemu_execution.qemu_process.returncode is not None
112128
await execution.stop()
129+
settings.LINUX_PATH = original_linux_path
113130

114131

115132
@pytest.mark.asyncio
@@ -118,26 +135,37 @@ async def test_create_qemu_instance_online(mocker):
118135
Create an instance and check that it start / init / stop properly.
119136
With network, wait for ping
120137
"""
138+
original_linux_path = settings.LINUX_PATH
121139
mocker.patch.object(settings, "ALLOW_VM_NETWORKING", True)
122140
mocker.patch.object(settings, "USE_FAKE_INSTANCE_BASE", True)
123141
mocker.patch.object(settings, "FAKE_INSTANCE_MESSAGE", settings.FAKE_INSTANCE_QEMU_MESSAGE)
124-
mocker.patch.object(settings, "FAKE_INSTANCE_BASE", settings.FAKE_INSTANCE_QEMU_MESSAGE)
142+
mocker.patch.object(settings, "FAKE_INSTANCE_BASE", settings.FAKE_QEMU_INSTANCE_BASE)
125143
mocker.patch.object(settings, "ENABLE_CONFIDENTIAL_COMPUTING", False)
126144
mocker.patch.object(settings, "USE_JAILER", False)
127145

146+
tmp_dir = tempfile.TemporaryDirectory(prefix="alephtest_")
147+
tmp_path = Path(tmp_dir.name)
148+
cache_root = tmp_path / "cache"
149+
exec_root = tmp_path / "exec"
150+
mocker.patch.object(settings, "CACHE_ROOT", cache_root)
151+
mocker.patch.object(settings, "EXECUTION_ROOT", exec_root)
152+
mocker.patch.object(settings, "PERSISTENT_VOLUMES_DIR", exec_root / "volumes" / "persistent")
153+
mocker.patch.object(settings, "JAILER_BASE_DIRECTORY", exec_root / "jailer")
154+
mocker.patch.object(settings, "EXECUTION_LOG_DIRECTORY", exec_root / "executions")
155+
128156
# Patch journal.stream so the output of qemu proecss is shown in the test output
129157
mocker.patch("aleph.vm.hypervisors.qemu.qemuvm.journal.stream", return_value=None)
130158

131159
if not settings.FAKE_INSTANCE_BASE.exists():
132160
pytest.xfail(
133-
"Test instance disk {} not setup. run `cd runtimes/instance-rootfs && sudo ./create-debian-12-qemu-disk.sh` ".format(
134-
settings.FAKE_QEMU_INSTANCE_BASE
135-
)
161+
f"Test instance disk {settings.FAKE_QEMU_INSTANCE_BASE} not setup. run `cd runtimes/instance-rootfs && sudo ./create-debian-12-qemu-disk.sh` "
136162
)
163+
logger = logging.getLogger(__name__)
137164
# Ensure that the settings are correct and required files present.
138165
settings.setup()
139166
settings.check()
140-
167+
logger.info(settings.EXECUTION_ROOT)
168+
logger.info(settings.PERSISTENT_VOLUMES_DIR)
141169
# The database is required for the metrics and is currently not optional.
142170
engine = metrics.setup_engine()
143171
await metrics.create_tables(engine)
@@ -192,3 +220,5 @@ async def test_create_qemu_instance_online(mocker):
192220
qemu_execution, process = await mock_systemd_manager.stop_and_disable(execution.vm_hash)
193221
await execution.stop()
194222
assert qemu_execution is None
223+
224+
settings.LINUX_PATH = original_linux_path

0 commit comments

Comments
 (0)