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
|
#!/usr/bin/env bash
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
# 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
|
set -o pipefail
|
||||||
|
|
||||||
|
# shellcheck source=test/units/assert.sh
|
||||||
|
. "$(dirname "$0")"/assert.sh
|
||||||
|
|
||||||
mkdir -p /run/udev/rules.d/
|
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
|
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"
|
OPTIONS="log_level=debug"
|
||||||
SUBSYSTEM=="net", KERNEL=="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/net/devices/lo"
|
|
||||||
|
|
||||||
ACTION!="change", GOTO="lo_end"
|
# emulate renaming
|
||||||
|
ACTION=="online", ENV{ID_RENAMING}="1"
|
||||||
|
|
||||||
SUBSYSTEM=="net", KERNEL=="lo", ENV{ID_RENAMING}="1"
|
LABEL="hoge_end"
|
||||||
|
|
||||||
LABEL="lo_end"
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
udevadm control --log-priority=debug --reload --timeout=600
|
udevadm control --log-priority=debug --reload --timeout=30
|
||||||
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
|
|
||||||
|
|
||||||
ip link add hoge type dummy
|
ip link add hoge type dummy
|
||||||
udevadm info --wait-for-initialization=10s /sys/devices/virtual/net/hoge
|
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/hoge
|
||||||
sleep 1
|
assert_not_in "ID_RENAMING=" "$(udevadm info /sys/devices/virtual/net/hoge)"
|
||||||
if ! systemctl status sys-devices-virtual-net-hoge.device; then exit 1; fi
|
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "active" ]]; do sleep .5; done'
|
||||||
if ! systemctl status sys-subsystem-net-devices-hoge.device; then exit 1; fi
|
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
|
ip link set hoge name foobar
|
||||||
udevadm info --wait-for-initialization=10s /sys/devices/virtual/net/foobar
|
udevadm wait --timeout=30 --settle /sys/devices/virtual/net/foobar
|
||||||
sleep 1
|
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||||
if systemctl status sys-devices-virtual-net-hoge.device; then exit 1; fi
|
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/hoge)" != "inactive" ]]; do sleep .5; done'
|
||||||
if systemctl status sys-subsystem-net-devices-hoge.device; then exit 1; fi
|
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/devices/virtual/net/foobar)" != "active" ]]; do sleep .5; done'
|
||||||
if ! systemctl status sys-devices-virtual-net-foobar.device; then exit 1; fi
|
timeout 30 bash -c 'while [[ "$(systemctl show --property=ActiveState --value /sys/subsystem/net/devices/foobar)" != "active" ]]; do sleep .5; done'
|
||||||
if ! systemctl status sys-subsystem-net-devices-foobar.device; then exit 1; fi
|
|
||||||
|
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
|
exit 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user