46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from uvm.errors import ValidationError
|
|
from uvm.validation import parse_cpu, parse_password, parse_ram, parse_username
|
|
|
|
|
|
class ValidationTests(unittest.TestCase):
|
|
def test_parse_ram_uses_mib_by_default(self) -> None:
|
|
self.assertEqual(parse_ram("512"), 512)
|
|
self.assertEqual(parse_ram("1G"), 1024)
|
|
self.assertEqual(parse_ram("512MiB"), 512)
|
|
self.assertEqual(parse_ram("134217728B"), 128)
|
|
|
|
def test_parse_ram_rejects_small_and_invalid_values(self) -> None:
|
|
for value in ("127M", "nonsense", "-1G", "1T"):
|
|
with self.subTest(value=value):
|
|
with self.assertRaises(ValidationError):
|
|
parse_ram(value)
|
|
|
|
def test_parse_cpu_requires_a_positive_finite_value(self) -> None:
|
|
self.assertEqual(parse_cpu("0.5"), 0.5)
|
|
for value in ("0", "-1", "nan", "inf", "cpu"):
|
|
with self.subTest(value=value):
|
|
with self.assertRaises(ValidationError):
|
|
parse_cpu(value)
|
|
|
|
def test_guest_username_is_validated(self) -> None:
|
|
self.assertEqual(parse_username("root"), "root")
|
|
self.assertEqual(parse_username("app-user"), "app-user")
|
|
for value in ("", "Root", "9user", "user name", "a" * 33):
|
|
with self.subTest(value=value):
|
|
with self.assertRaises(ValidationError):
|
|
parse_username(value)
|
|
|
|
def test_guest_password_rejects_empty_control_or_oversized_values(self) -> None:
|
|
self.assertEqual(
|
|
parse_password("correct horse battery staple"),
|
|
"correct horse battery staple",
|
|
)
|
|
for value in ("", "line\nbreak", "tab\tvalue", "a" * 129):
|
|
with self.subTest(value=value):
|
|
with self.assertRaises(ValidationError):
|
|
parse_password(value)
|