2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 18:19:42 +00:00
bind/util/pairwise-testing.sh
Aydın Mercan 5cd6c173ff
replace the build system with meson
Meson is a modern build system that has seen a rise in adoption and some
version of it is available in almost every platform supported.

Compared to automake, meson has the following advantages:

* Meson provides a significant boost to the build and configuration time
  by better exploiting parallelism.

* Meson is subjectively considered to be better in readability.

These merits alone justify experimenting with meson as a way of
improving development time and ergonomics. However, there are some
compromises to ensure the transition goes relatively smooth:

* The system tests currently rely on various files within the source
  directory. Changing this requirement is a non-trivial task that can't
  be currently justified. Currently the last compiled build directory
  writes into the source tree which is in turn used by pytest.

* The minimum version supported has been fixed at 0.61. Increasing this
  value will require choosing a baseline of distributions that can
  package with meson. On the contrary, there will likely be an attempt
  to decrease this value to ensure almost universal support for building
  BIND 9 with meson.
2025-06-11 10:30:12 +03:00

83 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# 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.
set -e
set -o pipefail
NAMED_CONF="
options {
port 5300;
listen-on { 127.0.0.1; };
listen-on-v6 { ::1; };
};
zone \".\" {
type primary;
file \"zone.db\";
};
"
ZONE_CONTENTS="
\$TTL 300
@ SOA localhost. localhost.localhost. 1 30 10 3600000 300
@ NS localhost.
localhost A 127.0.0.1
AAAA ::1
"
if ! command -v pict >/dev/null 2>&1; then
echo "This script requires the 'pict' utility to be present in PATH." >&2
exit 1
fi
if ! command -v timeout >/dev/null 2>&1; then
echo "This script requires the 'timeout' utility to be present in PATH." >&2
exit 1
fi
meson setup build-pairwise-default
meson introspect build-pairwise-default --buildoptions | ./util/pairwise-construct.jq >pairwise-model.txt
pict pairwise-model.txt | tr "\t" " " | sed "1d" >pairwise-commands.txt
rm -rf build-pairwire-default
while read -r -a configure_switches; do
runid=${RANDOM}
mkdir "pairwise-${runid}"
cd "pairwise-${runid}"
echo "Configuration:" "${configure_switches[@]}" | tee "../pairwise-output.${runid}.txt"
meson setup build .. "${configure_switches[@]}" >>"../pairwise-output.${runid}.txt" 2>&1
# ../configure --enable-option-checking=fatal "${configure_switches[@]}" >>"../pairwise-output.${runid}.txt" 2>&1
echo "Building..."
ninja -C build >>"../pairwise-output.${runid}.txt" 2>&1
# make "-j${BUILD_PARALLEL_JOBS:-1}" all >>"../pairwise-output.${runid}.txt" 2>&1
echo "Running..."
echo "${NAMED_CONF}" >named.conf
echo "${ZONE_CONTENTS}" >zone.db
ret=0
timeout --kill-after=5s 5s build/named -c named.conf -g >>"../pairwise-output.${runid}.txt" 2>&1 || ret=$?
# "124" is the exit code "timeout" returns when it terminates
# the command; in other words, the command-under-test times
# out, i.e., was still running and didn't crash.
if [ "${ret}" -ne 124 ]; then
echo "Unexpected exit code from the 'timeout' utility (${ret})"
exit 1
fi
rm -rf build
# "timeout" is unable to report a crash on shutdown via its exit
# code.
cd ..
done <pairwise-commands.txt