bind9/bin/tests/system/randomizens/tests_randomizens.py
Colin Vidal c67b52684f system test covering NS randomization
Add randomizens system test which ensures that NS are randomly selected.
The test relies of the fact that `getaddresses_allowed()` logic won't
allow to query more than 3 NS at the top-level. The `example.` zone has
4 NS and the 3 formers are lame. As a result, if the resolved doesn't
randomize the NS selection, it will only quiery the 3 formers, which
won't give an answer, and fails. With randomization enabled, there is a
chance that the resolver queries the fourth NS, and gets the result.
2026-02-25 09:31:14 +01:00

32 lines
852 B
Python

# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
import dns.rcode
import isctest
def attempt_query(ns):
ns.rndc("flush")
msg = isctest.query.create("foo.example.", "A")
res = isctest.query.udp(msg, ns.ip)
if msg.rcode() == dns.rcode.NOERROR:
return len(res.answer) == 1
return False
def test_randomizens(ns6):
resolved = False
for _ in range(1, 25):
if attempt_query(ns6):
resolved = True
break
assert resolved