fix: never lower a serial or cap it at 99
This commit is contained in:
5 files changed
+74
-39
No files matched your search
+20
-1
@@ -1,6 +1,7 @@
|
||||
import pytest
|
||||
from freezegun import freeze_time
|
||||
|
||||
from mdb.models import DhcpConfig, Ip4Subnet, Ip6Subnet
|
||||
from mdb.models import DhcpConfig, Domain, Interface, Ip4Subnet, Ip6Subnet
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# pre_save signals: populate domain_name once, then leave it frozen
|
||||
@@ -65,3 +66,21 @@ def test_ip6_signal_sets_domain_name():
|
||||
domain_filename="db.reverse-v6",
|
||||
)
|
||||
assert subnet.domain_name == "0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# pre_delete Interface: the zones it was in get a new serial
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@freeze_time("2026-11-02")
|
||||
def test_deleting_interface_raises_zone_serials(domain):
|
||||
subnet = Interface.objects.get(pk=1).ip4address.subnet
|
||||
Domain.objects.filter(pk=domain.pk).update(domain_serial=2026110299)
|
||||
Ip4Subnet.objects.filter(pk=subnet.pk).update(domain_serial=2015010101)
|
||||
|
||||
Interface.objects.get(pk=1).delete()
|
||||
|
||||
# Past 99 the serial carries into the date instead of going back.
|
||||
assert Domain.objects.get(pk=domain.pk).domain_serial == 2026110300
|
||||
assert Ip4Subnet.objects.get(pk=subnet.pk).domain_serial == 2026110201
|
||||
@@ -0,0 +1,32 @@
|
||||
import pytest
|
||||
from freezegun import freeze_time
|
||||
|
||||
from mdb.utils import format_domain_serial_and_add_one
|
||||
|
||||
|
||||
@freeze_time("2026-11-02")
|
||||
@pytest.mark.parametrize(
|
||||
("serial", "expected"),
|
||||
[
|
||||
(2026110205, 2026110206), # today: next number
|
||||
(2025010107, 2026110201), # an earlier day: today's first
|
||||
(1, 2026110201), # not a date at all
|
||||
(2026110298, 2026110299),
|
||||
(2026110299, 2026110300), # used to stay at 99, so the change never synced
|
||||
(2026110300, 2026110301), # ahead of today: never goes back
|
||||
(2026110505, 2026110506),
|
||||
(None, 2026110201),
|
||||
("garbage", 2026110201),
|
||||
],
|
||||
)
|
||||
def test_next_serial(serial, expected):
|
||||
assert format_domain_serial_and_add_one(serial) == expected
|
||||
|
||||
|
||||
@freeze_time("2026-11-02")
|
||||
def test_serial_always_increases():
|
||||
serial = 2026110290
|
||||
for _ in range(30):
|
||||
new = format_domain_serial_and_add_one(serial)
|
||||
assert new > serial
|
||||
serial = new
|
||||
Reference in new issue
Block a user