From 7e343b530e68c55f868a4a8261824ca543319a52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Koutn=C3=BD?= Date: Thu, 6 Oct 2022 16:48:01 +0200 Subject: meson: Generate fuzzer inputs with directives The lists of directives for fuzzer tests are maintained manually in the repo. There is a tools/check-directives.sh script that runs during test phase and reports stale directive lists. Let's rework the script into a generator so that these directive files are created on-the-flight and needn't be updated whenever a unit file directives change. The scripts is rewritten in Python to get rid of gawk dependency and each generated file is a separate meson target so that incremental builds refresh what is just necessary (and parallelize (negligible)). Note: test/fuzz/fuzz-unit-file/directives-all.slice is kept since there is not automated way to generate it (it is not covered by the check script neither). --- tools/check-directives.sh | 72 ----------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100755 tools/check-directives.sh (limited to 'tools') diff --git a/tools/check-directives.sh b/tools/check-directives.sh deleted file mode 100755 index 767833285b..0000000000 --- a/tools/check-directives.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: LGPL-2.1-or-later -set -eu -set -o pipefail - -SOURCE_ROOT="${1:?}" -BUILD_ROOT="${2:?}" - -command -v gawk &>/dev/null || exit 77 - -function generate_directives() { - gawk -v sec_rx="${2:-""}" -v unit_type="${3:-""}" ' - match($0, /^([^ \t\.]+)\.([^ \t\.,]+)/, m) { - # res[section][directive] = 1 - res[m[1]][m[2]] = 1; - } - END { - if (unit_type) - print unit_type - - for (section in res) { - if (sec_rx && section !~ sec_rx) - continue - - print "[" section "]"; - for (directive in res[section]) { - print directive "="; - } - } - } - ' "$1" -} - -ret=0 -if ! diff \ - <(generate_directives "$SOURCE_ROOT"/src/network/networkd-network-gperf.gperf | sort) \ - <(sort "$SOURCE_ROOT"/test/fuzz/fuzz-network-parser/directives); then - echo "Looks like test/fuzz/fuzz-network-parser/directives hasn't been updated" - ret=1 -fi - -if ! diff \ - <(generate_directives "$SOURCE_ROOT"/src/network/netdev/netdev-gperf.gperf | sort) \ - <(sort "$SOURCE_ROOT"/test/fuzz/fuzz-netdev-parser/directives.netdev); then - echo "Looks like test/fuzz/fuzz-netdev-parser/directives.netdev hasn't been updated" - ret=1 -fi - -if ! diff \ - <(generate_directives "$SOURCE_ROOT"/src/udev/net/link-config-gperf.gperf | sort) \ - <(sort "$SOURCE_ROOT"/test/fuzz/fuzz-link-parser/directives.link) ; then - echo "Looks like test/fuzz/fuzz-link-parser/directives.link hasn't been updated" - ret=1 -fi - -for section in Automount Mount Path Scope Slice Socket Swap Timer; do - if ! diff \ - <(generate_directives "$BUILD_ROOT"/src/core/load-fragment-gperf.gperf "$section" "${section,,}" | sort) \ - <(sort "$SOURCE_ROOT/test/fuzz/fuzz-unit-file/directives.${section,,}") ; then - echo "Looks like test/fuzz/fuzz-unit-file/directives.${section,,} hasn't been updated" - ret=1 - fi -done - -if ! diff \ - <(generate_directives "$BUILD_ROOT"/src/core/load-fragment-gperf.gperf "(Service|Unit|Install)" "service" | sort) \ - <(sort "$SOURCE_ROOT/test/fuzz/fuzz-unit-file/directives.service") ; then - echo "Looks like test/fuzz/fuzz-unit-file/directives.service hasn't been updated" - ret=1 -fi - -exit $ret -- cgit v1.2.1