11import asyncio
22import logging
3+ import tempfile
34from asyncio .subprocess import Process
45from pathlib import Path
56
@@ -53,14 +54,24 @@ 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" )
6273
63- # Patch journal.stream so the output of qemu proecss is shown in the test output
74+ # Patch journal.stream so the output of qemu process is shown in the test output
6475 mocker .patch ("aleph.vm.hypervisors.qemu.qemuvm.journal.stream" , return_value = None )
6576
6677 if not settings .FAKE_INSTANCE_BASE .exists ():
@@ -69,10 +80,12 @@ async def test_create_qemu_instance(mocker):
6980 )
7081
7182 logging .basicConfig (level = logging .DEBUG )
72-
83+ logger = logging . getLogger ( __name__ )
7384 # Ensure that the settings are correct and required files present.
7485 settings .setup ()
7586 settings .check ()
87+ logger .info (settings .EXECUTION_ROOT )
88+ logger .info (settings .PERSISTENT_VOLUMES_DIR )
7689
7790 # The database is required for the metrics and is currently not optional.
7891 engine = metrics .setup_engine ()
@@ -110,6 +123,7 @@ async def test_create_qemu_instance(mocker):
110123 await qemu_execution .qemu_process .wait ()
111124 assert qemu_execution .qemu_process .returncode is not None
112125 await execution .stop ()
126+ settings .LINUX_PATH = original_linux_path
113127
114128
115129@pytest .mark .asyncio
@@ -118,26 +132,37 @@ async def test_create_qemu_instance_online(mocker):
118132 Create an instance and check that it start / init / stop properly.
119133 With network, wait for ping
120134 """
135+ original_linux_path = settings .LINUX_PATH
121136 mocker .patch .object (settings , "ALLOW_VM_NETWORKING" , True )
122137 mocker .patch .object (settings , "USE_FAKE_INSTANCE_BASE" , True )
123138 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 )
139+ mocker .patch .object (settings , "FAKE_INSTANCE_BASE" , settings .FAKE_QEMU_INSTANCE_BASE )
125140 mocker .patch .object (settings , "ENABLE_CONFIDENTIAL_COMPUTING" , False )
126141 mocker .patch .object (settings , "USE_JAILER" , False )
127142
143+ tmp_dir = tempfile .TemporaryDirectory (prefix = "alephtest_" )
144+ tmp_path = Path (tmp_dir .name )
145+ cache_root = tmp_path / "cache"
146+ exec_root = tmp_path / "exec"
147+ mocker .patch .object (settings , "CACHE_ROOT" , cache_root )
148+ mocker .patch .object (settings , "EXECUTION_ROOT" , exec_root )
149+ mocker .patch .object (settings , "PERSISTENT_VOLUMES_DIR" , exec_root / "volumes" / "persistent" )
150+ mocker .patch .object (settings , "JAILER_BASE_DIRECTORY" , exec_root / "jailer" )
151+ mocker .patch .object (settings , "EXECUTION_LOG_DIRECTORY" , exec_root / "executions" )
152+
128153 # Patch journal.stream so the output of qemu process is shown in the test output
129154 mocker .patch ("aleph.vm.hypervisors.qemu.qemuvm.journal.stream" , return_value = None )
130155
131156 if not settings .FAKE_INSTANCE_BASE .exists ():
132157 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- )
158+ f"Test instance disk { settings .FAKE_QEMU_INSTANCE_BASE } not setup. run `cd runtimes/instance-rootfs && sudo ./create-debian-12-qemu-disk.sh` "
136159 )
160+ logger = logging .getLogger (__name__ )
137161 # Ensure that the settings are correct and required files present.
138162 settings .setup ()
139163 settings .check ()
140-
164+ logger .info (settings .EXECUTION_ROOT )
165+ logger .info (settings .PERSISTENT_VOLUMES_DIR )
141166 # The database is required for the metrics and is currently not optional.
142167 engine = metrics .setup_engine ()
143168 await metrics .create_tables (engine )
@@ -192,3 +217,5 @@ async def test_create_qemu_instance_online(mocker):
192217 qemu_execution , process = await mock_systemd_manager .stop_and_disable (execution .vm_hash )
193218 await execution .stop ()
194219 assert qemu_execution is None
220+
221+ settings .LINUX_PATH = original_linux_path
0 commit comments