mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-09 03:36:48 +00:00
The create-network form only checked the characters of its subnets, so 192.0.2.0/33 or 999.0.2.0/24 passed and network_size raised a ValueError: the user got a server error instead of a message. So did a subnet too small for the gateway, DHCP range and broadcast address that network_size derives (0.0.0.0/32, 255.255.255.255/32), and 192.0.2.0/31 or a bare address gave an inverted DHCP range. Each subnet field now parses its value as a network of its IP version and refuses it with a field error otherwise. An IPv4 prefix must be /30 or shorter; the IPv6 prefix must be /64, which the view checked after the form and now the form does.
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
"""The create-network form takes real subnets of the right IP version; one
|
|
it refuses is a field error, not a server error."""
|
|
|
|
from django.test import SimpleTestCase
|
|
from networks.forms import AddNetPool
|
|
|
|
|
|
def form(**fields):
|
|
return AddNetPool({"name": "wvc-test-net", "forward": "nat", **fields})
|
|
|
|
|
|
class SubnetTests(SimpleTestCase):
|
|
def test_subnets_are_accepted(self):
|
|
for subnet in ("192.0.2.0/24", "192.0.2.0/30", "255.255.255.252/30"):
|
|
with self.subTest(subnet=subnet):
|
|
self.assertTrue(form(subnet=subnet, subnet6="2001:db8::/64").is_valid())
|
|
self.assertTrue(form().is_valid()) # both optional
|
|
|
|
def test_a_subnet_that_is_not_one_is_refused(self):
|
|
for field, value in (
|
|
("subnet", "192.0.2.0/33"),
|
|
("subnet", "999.0.2.0/24"),
|
|
("subnet", "2001:db8::/64"),
|
|
("subnet6", "2001:db8::/129"),
|
|
("subnet6", "192.0.2.0/24"),
|
|
# no room for a gateway, a DHCP range and a broadcast address
|
|
("subnet", "192.0.2.0"),
|
|
("subnet", "192.0.2.0/31"),
|
|
("subnet", "0.0.0.0/32"),
|
|
("subnet", "255.255.255.255/32"),
|
|
# libvirt takes only /64 for IPv6
|
|
("subnet6", "2001:db8::"),
|
|
("subnet6", "2001:db8::/120"),
|
|
("subnet6", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"),
|
|
):
|
|
with self.subTest(field=field, value=value):
|
|
self.assertIn(field, form(**{field: value}).errors)
|