1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-22 17:35:35 +03:00
systemd/test/fuzz/generate-directives.py
Michal Koutný 7e343b530e 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).
2022-10-20 14:43:50 +02:00

27 lines
622 B
Python

#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later
import sys
import collections, re
d = collections.defaultdict(list)
for line in open(sys.argv[1]):
m = re.match(r'^([a-zA-Z0-9-]+)\.([a-zA-Z0-9-]+),', line)
if m:
d[m.group(1)] += [m.group(2)]
sec_rx = sys.argv[2] if len(sys.argv) > 2 else '.'
sec_rx = re.compile(sec_rx)
unit_type = sys.argv[3] if len(sys.argv) > 3 else None
if unit_type:
print(unit_type)
for section, items in d.items():
if not sec_rx.match(section):
continue
print(f'[{section}]')
for item in items:
print(f'{item}=')
print()