diff --git a/test/units/TEST-21-DFUZZER.sh b/test/units/TEST-21-DFUZZER.sh index ac49938c38..449c2d8b9d 100755 --- a/test/units/TEST-21-DFUZZER.sh +++ b/test/units/TEST-21-DFUZZER.sh @@ -43,61 +43,135 @@ trap at_exit EXIT systemctl log-level info -# FIXME: systemd-run doesn't play well with daemon-reexec -# See: https://github.com/systemd/systemd/issues/27204 -add_suppression "org.freedesktop.systemd1" "org.freedesktop.systemd1.Manager:Reexecute FIXME" - -add_suppression "org.freedesktop.systemd1" "org.freedesktop.systemd1.Manager:SoftReboot destructive" -add_suppression "org.freedesktop.login1" "Sleep destructive" - # Skip calling start and stop methods on unit objects, as doing that is not only time consuming, but it also # starts/stops units that interfere with the machine state. The actual code paths should be covered (to some # degree) by the respective method counterparts on the manager object. -for method in Start Stop Restart ReloadOrRestart ReloadOrTryRestart Kill; do +MANAGER_METHOD_FILTER=( + StartUnit + StartUnitWithFlags + StartUnitReplace + StopUnit + RestartUnit + TryRestartUnit + ReloadOrRestartUnit + ReloadOrTryRestartUnit + KillUnit + QueueSignalUnit + FreezeUnit + AttachProcessesToUnit + RemoveSubgroupFromUnit + AbandonScope + CancelJob + Exit + Reboot + SoftReboot + PowerOff + Halt + KExec + SwitchRoot + EnqueueMarkedJobs +) +UNIT_METHOD_FILTER=( + Start + Stop + Restart + TryRestart + ReloadOrRestart + ReloadOrTryRestart + Kill + QueueSignal + Freeze +) +SCOPE_METHOD_FILTER=( + Abandon +) +JOB_METHOD_FILTER=( + Cancel +) +LOGIN_METHOD_FILTER=( + FlushDevices # This triggers all devices and makes the system super heavy + PowerOff + PowerOffWithFlags + Reboot + RebootWithFlags + Halt + HaltWithFlags + Suspend + SuspendWithFlags + Hibernate + HibernateWithFlags + HybridSleep + HybridSleepWithFlags + SuspendThenHibernate + SuspendThenHibernateWithFlags + ScheduleShutdown +) +for method in "${MANAGER_METHOD_FILTER[@]}"; do + add_suppression "org.freedesktop.systemd1" "org.freedesktop.systemd1.Manager:$method" +done +for method in "${UNIT_METHOD_FILTER[@]}"; do add_suppression "org.freedesktop.systemd1" "org.freedesktop.systemd1.Unit:$method" done +for method in "${SCOPE_METHOD_FILTER[@]}"; do + add_suppression "org.freedesktop.systemd1" "org.freedesktop.systemd1.Scope:$method" +done +for method in "${JOB_METHOD_FILTER[@]}"; do + add_suppression "org.freedesktop.systemd1" "org.freedesktop.systemd1.Job:$method" +done +for method in "${LOGIN_METHOD_FILTER[@]}"; do + add_suppression "org.freedesktop.login1" "org.freedesktop.login1.Manager:$method" +done cat /etc/dfuzzer.conf # TODO # * check for possibly newly introduced buses? -BUS_LIST=( - org.freedesktop.home1 - org.freedesktop.hostname1 - org.freedesktop.import1 - org.freedesktop.locale1 - org.freedesktop.login1 - org.freedesktop.machine1 - org.freedesktop.portable1 - org.freedesktop.resolve1 - org.freedesktop.systemd1 - org.freedesktop.timedate1 +NAME_LIST=( + home + hostname + import + locale + login + machine + portable + resolve + timedate ) -# systemd-oomd requires PSI -if tail -n +1 /proc/pressure/{cpu,io,memory}; then - BUS_LIST+=( - org.freedesktop.oom1 - ) -fi - # Some services require specific conditions: +# - systemd-oomd requires PSI # - systemd-timesyncd can't run in a container # - systemd-networkd can run in a container if it has CAP_NET_ADMIN capability -if ! systemd-detect-virt --container; then - BUS_LIST+=( - org.freedesktop.network1 - org.freedesktop.timesync1 - ) -elif busctl introspect org.freedesktop.network1 / &>/dev/null; then - BUS_LIST+=( - org.freedesktop.network1 - ) +if tail -n +1 /proc/pressure/{cpu,io,memory}; then + NAME_LIST+=( oom ) fi -SESSION_BUS_LIST=( - org.freedesktop.systemd1 -) +if ! systemd-detect-virt --container; then + NAME_LIST+=( timesync ) +fi + +if ip link add dummy-fuzz type dummy; then + # if a dummy interface is created, then let's also setup it for resolved + ip link set dummy-fuzz up + ip address add 192.0.2.1/24 dev dummy-fuzz + + # When we can create a dummy interface, we definitely have CAP_NET_ADMIN + NAME_LIST+=( network ) + + # Create unit files for another dummy interface for networkd + mkdir -p /run/systemd/network + cat >/run/systemd/network/10-dummy-fuzz2.netdev </run/systemd/network/10-dummy-fuzz2.network <"/run/systemd/system/${service}.d/10-disable-debug.conf" <