import dns.name
import dns.rdataclass
-import dns.rdatatype
import dns.rdataset
+import dns.rdatatype
import dns.rrset
import dns.transaction
import dns.versioned
txn.add(rrset)
+def test_checks(db):
+ called = set()
+ with db.writer() as txn:
+ txn.check_put_rdataset(lambda t, n, r: called.add("put_rdataset"))
+ txn.check_delete_rdataset(lambda t, n, r, c: called.add("delete_rdataset"))
+ txn.check_delete_name(lambda t, n: called.add("delete_name"))
+ rrset = dns.rrset.from_text("foo", 300, "in", "A", "10.0.0.1", "10.0.0.2")
+ txn.add(rrset)
+ rrset = dns.rrset.from_text("foo", 300, "in", "AAAA", "::1")
+ txn.add(rrset)
+ assert "put_rdataset" in called
+ rrset = dns.rrset.from_text("foo", 300, "in", "txt", "foo")
+ txn.add(rrset)
+ called.clear()
+ txn.delete("foo", "txt")
+ assert "delete_rdataset" in called
+ called.clear()
+ rdata = dns.rdata.from_text("in", "a", "10.0.0.2")
+ txn.delete("foo", rdata)
+ # we get put here as we're storing an updated rrset, not deleting it
+ assert "put_rdataset" in called
+ called.clear()
+ rdata = dns.rdata.from_text("in", "a", "10.0.0.1")
+ # now we are deleting
+ txn.delete("foo", rdata)
+ assert "delete_rdataset" in called
+ # non-match calls nothing
+ called.clear()
+ txn.delete("foo", "rrsig", "a")
+ assert len(called) == 0
+ # delete the name
+ txn.delete("foo")
+ assert "delete_name" in called
+
+
example_text = """$TTL 3600
$ORIGIN example.
@ soa foo bar 1 2 3 4 5
txn.update_serial(0, False)
rdataset = zone.find_rdataset("@", "soa")
assert rdataset[0].serial == 1
+ # specifying the name explicitly works
+ with zone.writer() as txn:
+ txn.update_serial(1, True, "@")
+ rdataset = zone.find_rdataset("@", "soa")
+ assert rdataset[0].serial == 2
with pytest.raises(KeyError):
with zone.writer() as txn:
txn.update_serial(name=dns.name.from_text("unknown", None))