@@ -516,3 +516,111 @@ def test_sshfp_create():
516
516
assert record .data .fp_type == 1
517
517
assert record .data .fingerprint == b"abcdefg"
518
518
assert record .ttl == 300
519
+
520
+
521
+ def test_zone_replace (dns_store ):
522
+ zone = DNSZone ("example.com." )
523
+ record1 = A .create (name = "www.example.com." , ip = "192.0.2.1" )
524
+ record2 = A .create (name = "api.example.com." , ip = "192.0.2.2" )
525
+ zone .add_record (record1 )
526
+ dns_store .add_zone (zone )
527
+
528
+ zone .replace ([record2 ])
529
+
530
+ records = dns_store .query ("www.example.com." , RecordType .A )
531
+ assert len (records ) == 0
532
+ records = dns_store .query ("api.example.com." , RecordType .A )
533
+ assert len (records ) == 1
534
+ assert record2 in records
535
+
536
+
537
+ def test_zone_replace_multiple_records ():
538
+ zone = DNSZone ("example.com." )
539
+ record1 = A .create (name = "www.example.com." , ip = "192.0.2.1" )
540
+ record2 = A .create (name = "www.example.com." , ip = "192.0.2.2" )
541
+
542
+ zone .replace ([record1 , record2 ])
543
+ records = zone .get_records ("www.example.com." , RecordType .A )
544
+ assert len (records ) == 2
545
+ assert record1 in records
546
+ assert record2 in records
547
+
548
+
549
+ def test_zone_replace_empty ():
550
+ zone = DNSZone ("example.com." )
551
+ record = A .create (name = "www.example.com." , ip = "192.0.2.1" )
552
+ zone .add_record (record )
553
+
554
+ zone .replace ([])
555
+ records = zone .get_records ("www.example.com." , RecordType .A )
556
+ assert len (records ) == 0
557
+
558
+
559
+ def test_zone_replace_invalid_record ():
560
+ zone = DNSZone ("example.com." )
561
+ record = A .create (name = "www.other.com." , ip = "192.0.2.1" )
562
+
563
+ with pytest .raises (ValueError , match = "does not belong to zone" ):
564
+ zone .replace ([record ])
565
+
566
+
567
+ def test_store_replace_basic (dns_store ):
568
+ zone1 = DNSZone ("example.com." )
569
+ record1 = A .create (name = "www.example.com." , ip = "192.0.2.1" )
570
+ zone1 .add_record (record1 )
571
+ dns_store .add_zone (zone1 )
572
+
573
+ zone2 = DNSZone ("test.com." )
574
+ record2 = A .create (name = "www.test.com." , ip = "192.0.2.2" )
575
+ zone2 .add_record (record2 )
576
+ dns_store .add_zone (zone2 )
577
+
578
+ # Replace with new data
579
+ new_record1 = A .create (name = "api.example.com." , ip = "192.0.2.3" )
580
+ new_record2 = A .create (name = "api.test.com." , ip = "192.0.2.4" )
581
+
582
+ dns_store .replace ({
583
+ "example.com." : [new_record1 ],
584
+ "test.com." : [new_record2 ],
585
+ })
586
+
587
+ # Check old records are gone
588
+ records = dns_store .query ("www.example.com." , RecordType .A )
589
+ assert len (records ) == 0
590
+ records = dns_store .query ("www.test.com." , RecordType .A )
591
+ assert len (records ) == 0
592
+
593
+ # Check new records are present
594
+ records = dns_store .query ("api.example.com." , RecordType .A )
595
+ assert len (records ) == 1
596
+ assert new_record1 in records
597
+ records = dns_store .query ("api.test.com." , RecordType .A )
598
+ assert len (records ) == 1
599
+ assert new_record2 in records
600
+
601
+
602
+ def test_store_replace_empty (dns_store ):
603
+ zone = DNSZone ("example.com." )
604
+ record = A .create (name = "www.example.com." , ip = "192.0.2.1" )
605
+ zone .add_record (record )
606
+ dns_store .add_zone (zone )
607
+
608
+ dns_store .replace ({})
609
+
610
+ assert dns_store .get_zone ("example.com." ) is None
611
+ records = dns_store .query ("www.example.com." , RecordType .A )
612
+ assert len (records ) == 0
613
+
614
+
615
+ def test_store_replace_multiple_records_per_zone (dns_store ):
616
+ new_record1 = A .create (name = "www.example.com." , ip = "192.0.2.1" )
617
+ new_record2 = A .create (name = "www.example.com." , ip = "192.0.2.2" )
618
+
619
+ dns_store .replace ({
620
+ "example.com." : [new_record1 , new_record2 ],
621
+ })
622
+
623
+ records = dns_store .query ("www.example.com." , RecordType .A )
624
+ assert len (records ) == 2
625
+ assert new_record1 in records
626
+ assert new_record2 in records
0 commit comments