- Introduced storage parameter in VmCreateRequest and VmResizeRequest models. - Implemented storage validation to ensure minimum and maximum limits. - Enhanced CLI to support storage options during VM creation and resizing. - Updated lifecycle management to handle pending resize operations for VM resources. - Added methods for resizing VM disks and validating storage capacity. - Updated API endpoints to accommodate new storage functionality. - Refactored related validation and configuration logic to support storage management.
71 lines
2.9 KiB
Python
71 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
from unittest.mock import patch
|
|
|
|
from uvm.config import Settings
|
|
from uvm.errors import ConfigurationError
|
|
|
|
|
|
class ArchitectureSettingsTests(unittest.TestCase):
|
|
def test_resolves_native_defaults_when_settings_are_created(self) -> None:
|
|
for machine, architecture in (
|
|
("x86_64", "x86_64"),
|
|
("AMD64", "x86_64"),
|
|
("aarch64", "aarch64"),
|
|
("arm64", "aarch64"),
|
|
):
|
|
for factory in (Settings, Settings.from_environment):
|
|
with (
|
|
self.subTest(machine=machine, factory=factory),
|
|
patch.dict(os.environ, {}, clear=True),
|
|
patch("uvm.config.os.uname", return_value=SimpleNamespace(machine=machine)),
|
|
):
|
|
settings = factory()
|
|
|
|
base = (
|
|
"https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/"
|
|
f"{architecture}"
|
|
)
|
|
self.assertEqual(settings.architecture, architecture)
|
|
self.assertEqual(settings.kernel_url, f"{base}/kernels/vmlinux.bin")
|
|
self.assertEqual(settings.rootfs_url, f"{base}/rootfs/bionic.rootfs.ext4")
|
|
|
|
def test_preserves_individual_environment_url_overrides_on_arm64(self) -> None:
|
|
kernel = "https://example.com/custom-arm64-kernel"
|
|
rootfs = "https://example.com/custom-arm64-rootfs.ext4"
|
|
base = "https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/aarch64"
|
|
for overrides in (
|
|
{"UVM_KERNEL_URL": kernel},
|
|
{"UVM_ROOTFS_URL": rootfs},
|
|
{"UVM_KERNEL_URL": kernel, "UVM_ROOTFS_URL": rootfs},
|
|
):
|
|
with (
|
|
self.subTest(overrides=overrides),
|
|
patch.dict(os.environ, overrides, clear=True),
|
|
patch("uvm.config.os.uname", return_value=SimpleNamespace(machine="aarch64")),
|
|
):
|
|
settings = Settings.from_environment()
|
|
|
|
self.assertEqual(
|
|
settings.kernel_url,
|
|
overrides.get("UVM_KERNEL_URL", f"{base}/kernels/vmlinux.bin"),
|
|
)
|
|
self.assertEqual(
|
|
settings.rootfs_url,
|
|
overrides.get("UVM_ROOTFS_URL", f"{base}/rootfs/bionic.rootfs.ext4"),
|
|
)
|
|
|
|
def test_rejects_unsupported_hosts_even_with_custom_guest_assets(self) -> None:
|
|
with (
|
|
patch.dict(os.environ, {
|
|
"UVM_KERNEL_URL": "https://example.com/kernel",
|
|
"UVM_ROOTFS_URL": "https://example.com/rootfs.ext4",
|
|
}, clear=True),
|
|
patch("uvm.config.os.uname", return_value=SimpleNamespace(machine="riscv64")),
|
|
self.assertRaisesRegex(ConfigurationError, "unsupported host architecture: riscv64"),
|
|
):
|
|
Settings.from_environment()
|