@@ -516,3 +516,111 @@ def test_sshfp_create():
516516 assert record .data .fp_type == 1
517517 assert record .data .fingerprint == b"abcdefg"
518518 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