1
1
import asyncio
2
2
import logging
3
+ import tempfile
3
4
from asyncio .subprocess import Process
4
5
from pathlib import Path
5
6
@@ -53,12 +54,25 @@ async def test_create_qemu_instance(mocker):
53
54
No network.
54
55
We don't actually check that the system ping since there is no network
55
56
"""
57
+ original_linux_path = settings .LINUX_PATH
56
58
mocker .patch .object (settings , "ALLOW_VM_NETWORKING" , False )
57
59
mocker .patch .object (settings , "USE_FAKE_INSTANCE_BASE" , True )
58
60
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 )
60
62
mocker .patch .object (settings , "ENABLE_CONFIDENTIAL_COMPUTING" , False )
61
63
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 )
62
76
63
77
# Patch journal.stream so the output of qemu proecss is shown in the test output
64
78
mocker .patch ("aleph.vm.hypervisors.qemu.qemuvm.journal.stream" , return_value = None )
@@ -69,10 +83,12 @@ async def test_create_qemu_instance(mocker):
69
83
)
70
84
71
85
logging .basicConfig (level = logging .DEBUG )
72
-
86
+ logger = logging . getLogger ( __name__ )
73
87
# Ensure that the settings are correct and required files present.
74
88
settings .setup ()
75
89
settings .check ()
90
+ logger .info (settings .EXECUTION_ROOT )
91
+ logger .info (settings .PERSISTENT_VOLUMES_DIR )
76
92
77
93
# The database is required for the metrics and is currently not optional.
78
94
engine = metrics .setup_engine ()
@@ -110,6 +126,7 @@ async def test_create_qemu_instance(mocker):
110
126
await qemu_execution .qemu_process .wait ()
111
127
assert qemu_execution .qemu_process .returncode is not None
112
128
await execution .stop ()
129
+ settings .LINUX_PATH = original_linux_path
113
130
114
131
115
132
@pytest .mark .asyncio
@@ -118,26 +135,37 @@ async def test_create_qemu_instance_online(mocker):
118
135
Create an instance and check that it start / init / stop properly.
119
136
With network, wait for ping
120
137
"""
138
+ original_linux_path = settings .LINUX_PATH
121
139
mocker .patch .object (settings , "ALLOW_VM_NETWORKING" , True )
122
140
mocker .patch .object (settings , "USE_FAKE_INSTANCE_BASE" , True )
123
141
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 )
125
143
mocker .patch .object (settings , "ENABLE_CONFIDENTIAL_COMPUTING" , False )
126
144
mocker .patch .object (settings , "USE_JAILER" , False )
127
145
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
+
128
156
# Patch journal.stream so the output of qemu proecss is shown in the test output
129
157
mocker .patch ("aleph.vm.hypervisors.qemu.qemuvm.journal.stream" , return_value = None )
130
158
131
159
if not settings .FAKE_INSTANCE_BASE .exists ():
132
160
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` "
136
162
)
163
+ logger = logging .getLogger (__name__ )
137
164
# Ensure that the settings are correct and required files present.
138
165
settings .setup ()
139
166
settings .check ()
140
-
167
+ logger .info (settings .EXECUTION_ROOT )
168
+ logger .info (settings .PERSISTENT_VOLUMES_DIR )
141
169
# The database is required for the metrics and is currently not optional.
142
170
engine = metrics .setup_engine ()
143
171
await metrics .create_tables (engine )
@@ -192,3 +220,5 @@ async def test_create_qemu_instance_online(mocker):
192
220
qemu_execution , process = await mock_systemd_manager .stop_and_disable (execution .vm_hash )
193
221
await execution .stop ()
194
222
assert qemu_execution is None
223
+
224
+ settings .LINUX_PATH = original_linux_path
0 commit comments