@@ -331,6 +331,36 @@ def test_update_multiple_v4(self):
331331 self .assertIP (ipv4 = new_ip )
332332 self .assertIP (subname = "sub" , ipv4 = new_ip )
333333
334+ def test_update_multiple_with_overwrite (self ):
335+ # /nic/update?hostname=sub1.a.io,sub2.a.io,sub3.a.io&myip=1.2.3.4&ipv6=::1&b.io.ipv6=::2
336+ new_ip4 = "1.2.3.4"
337+ new_ip6 = "::1"
338+ new_ip6_overwrite = "::2"
339+ domain1 = "sub1." + self .my_domain .name
340+ domain2 = "sub2." + self .my_domain .name
341+ domain3 = "sub3." + self .my_domain .name
342+
343+ with self .assertRequests (
344+ self .request_pdns_zone_update (self .my_domain .name ),
345+ self .request_pdns_zone_axfr (self .my_domain .name ),
346+ ):
347+ response = self .client .get (
348+ self .reverse ("v1:dyndns12update" ),
349+ {
350+ "hostname" : f"{ domain1 } ,{ domain2 } ,{ domain3 } " ,
351+ "myip" : new_ip4 ,
352+ "ipv6" : new_ip6 ,
353+ f"{ domain2 .lower ()} .ipv6" : new_ip6_overwrite ,
354+ },
355+ )
356+
357+ self .assertStatus (response , status .HTTP_200_OK )
358+ self .assertEqual (response .data , "good" )
359+
360+ self .assertIP (subname = "sub1" , ipv4 = new_ip4 , ipv6 = new_ip6 )
361+ self .assertIP (subname = "sub2" , ipv4 = new_ip4 , ipv6 = new_ip6_overwrite )
362+ self .assertIP (subname = "sub3" , ipv4 = new_ip4 , ipv6 = new_ip6 )
363+
334364 def test_update_multiple_username_param (self ):
335365 # /nic/update?username=a.io,sub.a.io&myip=1.2.3.4
336366 new_ip = "1.2.3.4"
@@ -404,6 +434,36 @@ def test_update_multiple_with_subnet(self):
404434 self .assertIP (subname = "sub1" , ipv4 = "10.1.0.1" )
405435 self .assertIP (subname = "sub2" , ipv4 = "10.1.0.2" )
406436
437+ def test_update_multiple_with_subnet_and_ip_override (self ):
438+ # /nic/update?hostname=a.io,b.io&myip=10.1.0.0/16&a.io=192.168.1.1
439+ domain1 = "sub1." + self .my_domain .name
440+ domain2 = "sub2." + self .my_domain .name
441+ self .create_rr_set (
442+ self .my_domain , ["10.0.0.1" ], subname = "sub1" , type = "A" , ttl = 60
443+ )
444+ self .create_rr_set (
445+ self .my_domain , ["10.0.0.2" ], subname = "sub2" , type = "A" , ttl = 60
446+ )
447+
448+ with self .assertRequests (
449+ self .request_pdns_zone_update (self .my_domain .name ),
450+ self .request_pdns_zone_axfr (self .my_domain .name ),
451+ ):
452+ response = self .client .get (
453+ self .reverse ("v1:dyndns12update" ),
454+ {
455+ "hostname" : f"{ domain1 } ,{ domain2 } " ,
456+ "myip" : "10.1.0.0/16" ,
457+ f"{ domain1 .lower ()} .myip" : "192.168.1.1" ,
458+ },
459+ )
460+
461+ self .assertStatus (response , status .HTTP_200_OK )
462+ self .assertEqual (response .data , "good" )
463+
464+ self .assertIP (subname = "sub1" , ipv4 = "192.168.1.1" )
465+ self .assertIP (subname = "sub2" , ipv4 = "10.1.0.2" )
466+
407467 def test_update_multiple_with_one_being_already_up_to_date (self ):
408468 # /nic/update?hostname=a.io,sub.a.io&myip=1.2.3.4
409469 new_ip = "1.2.3.4"
@@ -447,6 +507,20 @@ def test_update_same_domain_twice(self):
447507
448508 self .assertIP (ipv4 = new_ip )
449509
510+ def test_update_overwrite_with_invalid_subnet (self ):
511+ # /nic/update?hostname=a.io&a.io.myip=1.2.3.4/64
512+ domain1 = self .create_domain (owner = self .owner ).name
513+
514+ with self .assertRequests ():
515+ response = self .client .get (
516+ self .reverse ("v1:dyndns12update" ),
517+ {"hostname" : f"{ domain1 } " , f"{ domain1 .lower ()} .myip" : "1.2.3.4/64" },
518+ )
519+
520+ self .assertContains (
521+ response , "invalid subnet" , status_code = status .HTTP_400_BAD_REQUEST
522+ )
523+
450524 def test_update_multiple_with_invalid_subnet (self ):
451525 # /nic/update?hostname=sub1.a.io,sub2.a.io&myip=1.2.3.4/64
452526 domain1 = "sub1." + self .my_domain .name
0 commit comments