mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-22 17:57:49 +03:00
test: rewrite tests for renaming network interface
- use `udevadm wait` instead of `udevadm info --wait-initialized`, - use `timeout` command instead of the fixed time sleep, - add basic tests for #25106, - add brief comment about #25115.
This commit is contained in:
parent
c89d0c3b05
commit
9918dfb98b
@ -1,59 +1,105 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
set -ex
|
||||
|
||||
# disable shellcheck warning about '"aaa"' type quotation
|
||||
# shellcheck disable=SC2016
|
||||
|
||||
set -eux
|
||||
set -o pipefail
|
||||
|
||||
# shellcheck source=test/units/assert.sh
|
||||
. "$(dirname "$0")"/assert.sh
|
||||
|
||||
mkdir -p /run/udev/rules.d/
|
||||
|
||||
# test for ID_RENAMING= udev property and device unit state
|
||||
|
||||
cat >/run/udev/rules.d/50-testsuite.rules <<EOF
|
||||
ACTION=="remove", GOTO="lo_end"
|
||||
ACTION=="remove", GOTO="hoge_end"
|
||||
SUBSYSTEM!="net", GOTO="hoge_end"
|
||||
KERNEL!="hoge", GOTO="hoge_end"
|
||||
|
||||
SUBSYSTEM=="net", KERNEL=="lo", OPTIONS="log_level=debug"
|
||||
SUBSYSTEM=="net", KERNEL=="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/net/devices/lo"
|
||||
OPTIONS="log_level=debug"
|
||||
|
||||
ACTION!="change", GOTO="lo_end"
|
||||
# emulate renaming
|
||||
ACTION=="online", ENV{ID_RENAMING}="1"
|
||||
|
||||
SUBSYSTEM=="net", KERNEL=="lo", ENV{ID_RENAMING}="1"
|
||||
|
||||
LABEL="lo_end"
|
||||
LABEL="hoge_end"
|
||||
EOF
|
||||
|
||||
udevadm control --log-priority=debug --reload --timeout=600
|
||||
udevadm trigger --action=add --settle /sys/devices/virtual/net/lo
|
||||
udevadm info /sys/devices/virtual/net/lo
|
||||
sleep 1
|
||||
STATE=$(systemctl show --property=ActiveState --value sys-devices-virtual-net-lo.device)
|
||||
[[ $STATE == "active" ]] || exit 1
|
||||
|
||||
udevadm trigger --action=change --settle /sys/devices/virtual/net/lo
|
||||
udevadm info /sys/devices/virtual/net/lo
|
||||
sleep 1
|
||||
STATE=$(systemctl show --property=ActiveState --value sys-devices-virtual-net-lo.device)
|
||||
[[ $STATE == "inactive" ]] || exit 1
|
||||
|
||||
udevadm trigger --action=move --settle /sys/devices/virtual/net/lo
|
||||
udevadm info /sys/devices/virtual/net/lo
|
||||
sleep 1
|
||||
STATE=$(systemctl show --property=ActiveState --value sys-devices-virtual-net-lo.device)
|
||||
[[ $STATE == "active" ]] || exit 1
|
||||
|
||||
rm -f /run/udev/rules.d/50-testsuite.rules
|
||||
udevadm control --reload --timeout=600
|
||||
|
||||
# test for issue #16967
|
||||
udevadm control --log-priority=debug --reload --timeout=30
|
||||
|
||||
ip link add hoge type dummy
|
||||
udevadm info --wait-for-initialization=10s /sys/devices/virtual/net/hoge
|
||||
sleep 1
|
||||
if ! systemctl status sys-devices-virtual-net-hoge.device; then exit 1; fi
|
||||
if ! systemctl status sys-subsystem-net-devices-hoge.device; then exit 1; fi
|
||||
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/hoge
|
||||
assert_not_in "ID_RENAMING=" "$(udevadm info /sys/devices/virtual/net/hoge)"
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "active" ]]; do sleep .5; done'
|
||||
|
||||
udevadm trigger --action=online --settle /sys/devices/virtual/net/hoge
|
||||
assert_in "ID_RENAMING=" "$(udevadm info /sys/devices/virtual/net/hoge)"
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||
|
||||
udevadm trigger --action=move --settle /sys/devices/virtual/net/hoge
|
||||
assert_not_in "ID_RENAMING=" "$(udevadm info /sys/devices/virtual/net/hoge)"
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "active" ]]; do sleep .5; done'
|
||||
|
||||
# test for renaming interface with NAME= (issue #25106)
|
||||
|
||||
cat >/run/udev/rules.d/50-testsuite.rules <<EOF
|
||||
ACTION!="add", GOTO="hoge_end"
|
||||
SUBSYSTEM!="net", GOTO="hoge_end"
|
||||
|
||||
OPTIONS="log_level=debug"
|
||||
|
||||
KERNEL=="hoge", NAME="foobar"
|
||||
KERNEL=="foobar", NAME="hoge"
|
||||
|
||||
LABEL="hoge_end"
|
||||
EOF
|
||||
|
||||
udevadm control --log-priority=debug --reload --timeout=30
|
||||
|
||||
# FIXME(?): the 'add' uevent is broadcast as for 'foobar', instead of 'hoge'. Hence, we cannot use --settle here.
|
||||
# See issue #25115.
|
||||
udevadm trigger --action=add /sys/devices/virtual/net/hoge
|
||||
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/foobar
|
||||
assert_not_in "ID_RENAMING=" "$(udevadm info /sys/devices/virtual/net/foobar)"
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/foobar)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/foobar)" != "active" ]]; do sleep .5; done'
|
||||
|
||||
udevadm trigger --action=add /sys/devices/virtual/net/foobar
|
||||
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/hoge
|
||||
assert_not_in "ID_RENAMING=" "$(udevadm info /sys/devices/virtual/net/hoge)"
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/foobar)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/foobar)" != "inactive" ]]; do sleep .5; done'
|
||||
|
||||
# cleanup
|
||||
rm -f /run/udev/rules.d/50-testsuite.rules
|
||||
udevadm control --reload --timeout=30
|
||||
|
||||
# test for renaming interface with an external tool (issue #16967)
|
||||
|
||||
ip link set hoge name foobar
|
||||
udevadm info --wait-for-initialization=10s /sys/devices/virtual/net/foobar
|
||||
sleep 1
|
||||
if systemctl status sys-devices-virtual-net-hoge.device; then exit 1; fi
|
||||
if systemctl status sys-subsystem-net-devices-hoge.device; then exit 1; fi
|
||||
if ! systemctl status sys-devices-virtual-net-foobar.device; then exit 1; fi
|
||||
if ! systemctl status sys-subsystem-net-devices-foobar.device; then exit 1; fi
|
||||
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/foobar
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/foobar)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/foobar)" != "active" ]]; do sleep .5; done'
|
||||
|
||||
ip link set foobar name hoge
|
||||
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/hoge
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "active" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/foobar)" != "inactive" ]]; do sleep .5; done'
|
||||
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/foobar)" != "inactive" ]]; do sleep .5; done'
|
||||
|
||||
# cleanup
|
||||
ip link del hoge
|
||||
|
||||
exit 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user