mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-10 17:41:50 -04:00
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.
32 lines
852 B
Python
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
|