mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-22 10:10:06 +00:00
This test ensures that named will correctly shutdown when receiving multiple control connections after processing of either "rncd stop" or "kill -SIGTERM" commands. Before the fix, named was crashing due to a race condition happening between two threads, one running shutdown logic in named/server.c and other handling control logic in controlconf.c. This test tries to reproduce the above scenario by issuing multiple queries to a target named instance, issuing either rndc stop or kill -SIGTERM command to the same named instance, then starting multiple rndc status connections to ensure it is not crashing anymore.
59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
############################################################################
|
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# 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 http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# See the COPYRIGHT file distributed with this work for additional
|
|
# information regarding copyright ownership.
|
|
############################################################################
|
|
|
|
import os
|
|
import pytest
|
|
|
|
|
|
def pytest_configure(config):
|
|
config.addinivalue_line(
|
|
"markers", "dnspython: mark tests that need dnspython to function"
|
|
)
|
|
|
|
|
|
def pytest_collection_modifyitems(config, items):
|
|
# pylint: disable=unused-argument,unused-import,too-many-branches
|
|
# pylint: disable=import-outside-toplevel
|
|
|
|
# Test for dnspython module
|
|
skip_dnspython = pytest.mark.skip(
|
|
reason="need dnspython module to run")
|
|
try:
|
|
import dns.query # noqa: F401
|
|
except ModuleNotFoundError:
|
|
for item in items:
|
|
if "dnspython" in item.keywords:
|
|
item.add_marker(skip_dnspython)
|
|
|
|
|
|
@pytest.fixture
|
|
def named_port(request):
|
|
# pylint: disable=unused-argument
|
|
port = os.getenv("PORT")
|
|
if port is None:
|
|
port = 5301
|
|
else:
|
|
port = int(port)
|
|
|
|
return port
|
|
|
|
|
|
@pytest.fixture
|
|
def control_port(request):
|
|
# pylint: disable=unused-argument
|
|
port = os.getenv("CONTROLPORT")
|
|
if port is None:
|
|
port = 5301
|
|
else:
|
|
port = int(port)
|
|
|
|
return port
|