Создание машины: диск больше свободного места создаётся только с подтверждением, в шаге «Мощность» видно свободное место; раньше установка падала с ошибкой virt-install

Этот коммит содержится в:
2026-09-27 16:43:13 +09:00
родитель 2a4bffc7df
Коммит cc3abe3f4a
4 изменённых файлов: 53 добавлений и 3 удалений
+1
Просмотреть файл
@@ -171,6 +171,7 @@ def data_dirs(tmp_path, monkeypatch):
monkeypatch.setattr(update_core, "STATE_FILE", dirs["update"] / "state.json")
monkeypatch.setattr(update_core, "LOG_FILE", dirs["update"] / "update.log")
monkeypatch.setattr(update_core, "SOURCE_DIR", ROOT)
monkeypatch.setattr(app, "images_free_bytes", lambda: 500 * 1024 ** 3) # временная папка тестов бывает маленькой (tmpfs)
for module in (app, core, network_core, host_profile, *feature_modules()):
monkeypatch.setattr(module, "run_cmd", fake_run_cmd)
return dirs
+24
Просмотреть файл
@@ -196,3 +196,27 @@ def test_uploader_collects_file_before_disabling_input():
assert "input.disabled = active" in uploader
assert uploader.index("new FormData(form)") < uploader.index("setActive(true)")
assert "xhr.send(data)" in uploader
def test_vm_create_disk_bigger_than_free_space_needs_confirmation(logged_in, data_dirs, monkeypatch):
"""virt-install отказывал с английской ошибкой; теперь панель предупреждает сама и создаёт только с подтверждением."""
iso = data_dirs["iso"] / "smk.iso"
iso.write_bytes(b"iso")
started = []
monkeypatch.setattr(app, "start_background_operation", lambda operation, cmd: started.append(cmd))
monkeypatch.setattr(app.network_core, "create_nat_network", lambda: {})
monkeypatch.setattr(app, "images_free_bytes", lambda: 25 * 1024 ** 3)
form = {"name": "smk", "memory": 4096, "vcpus": 2, "disk_size": 40, "iso_path": str(iso), "source_type": "iso", "network_mode": "nat"}
page = logged_in.get("/vm/create").text
assert "Свободно на сервере: 25" in page and 'name="allow_overcommit"' not in page
response = logged_in.post("/vm/create", data=form)
assert response.status_code == 400 and started == []
assert "Диск на 40 ГБ больше, чем свободно на сервере" in response.text and 'name="allow_overcommit"' in response.text
response = logged_in.post("/vm/create", data={**form, "allow_overcommit": "1"}, follow_redirects=False)
assert response.status_code == 303, response.text[:300]
assert started[0][-2:] == ["--check", "disk_size=off"]
response = logged_in.post("/vm/create", data={**form, "name": "small", "disk_size": 20}, follow_redirects=False)
assert response.status_code == 303 and "--check" not in started[1]