1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 19:26:48 +00:00
webvirtcloud/computes/tests/test_validators.py
catborise c55f52f025 test: each app keeps its tests in a tests package
131 test modules sat next to the code they test; instances alone had
51 of them beside views.py and utils.py. They move into a
tests/ package per app, and the JavaScript checks into
webvirtcloud/tests/js. Each non-empty tests.py becomes tests/test_views.py;
the empty generated stubs are removed.

Imports of the app's own modules become absolute, paths built from
__file__ go one level up, the live helper is instances.tests.livetest,
and coverage omits */tests/*. The suite discovers the same 960 tests as
before.
2026-10-12 15:17:30 +03:00

53 lines
1.9 KiB
Python

"""A compute's hostname and login go unquoted into libvirt connection URIs
and an ssh command line; they are validated so neither can inject a URI
parameter (e.g. ?command=, ?no_verify=) or an ssh option."""
import unittest
from django.core.exceptions import ValidationError
from computes.validators import validate_hostname, validate_login, validate_name
class HostnameValidatorTestCase(unittest.TestCase):
def test_accepts_ipv4_and_host_names(self):
for value in ("192.0.2.10", "localhost", "host.example.com", "a-b.example.", "host1"):
with self.subTest(value=value):
validate_hostname(value)
def test_rejects_uri_and_option_injection(self):
for value in (
"-x",
"a b;c",
"host:2222",
"192.0.2.1/system?command=/evil.sh&a=",
"host/system?no_verify=1",
"qemu+ssh://host/system",
"2001:db8::1",
"",
"host name",
):
with self.subTest(value=value):
with self.assertRaises(ValidationError):
validate_hostname(value)
class LoginValidatorTestCase(unittest.TestCase):
def test_accepts_plain_logins_and_empty(self):
# empty: TCP falls back to server auth, the socket transport ignores it
for value in ("", "root", "libvirt.user", "user-1", "_svc"):
with self.subTest(value=value):
validate_login(value)
def test_rejects_option_and_delimiter_injection(self):
for value in ("-oProxyCommand=x", "u@realm", "a/b", "a b", "a\\b", "a%b"):
with self.subTest(value=value):
with self.assertRaises(ValidationError):
validate_login(value)
class NameValidatorTestCase(unittest.TestCase):
def test_checks_the_value(self):
validate_name("good-name_1.2")
with self.assertRaises(ValidationError):
validate_name("bad name!")