diff options
author | Michal Koutný <mkoutny@suse.com> | 2022-10-06 16:48:01 +0200 |
---|---|---|
committer | Michal Koutný <mkoutny@suse.com> | 2022-10-20 14:43:50 +0200 |
commit | 7e343b530e68c55f868a4a8261824ca543319a52 (patch) | |
tree | 574f69cfdb251b477360e8a57a259ded6918feaa /tools | |
parent | 7db5761ddaa53eba197b5abc485e3290f47c661f (diff) | |
download | systemd-7e343b530e68c55f868a4a8261824ca543319a52.tar.gz |
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).
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/check-directives.sh | 72 |
1 files changed, 0 insertions, 72 deletions
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 |