blob: 6f99ecadd81424b51bd062ca19346d6dd3a350f5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail
# shellcheck source=test/units/test-control.sh
. "$(dirname "$0")"/test-control.sh
# shellcheck source=test/units/util.sh
. "$(dirname "$0")"/util.sh
restore_hostname() {
if [[ -e /tmp/hostname.bak ]]; then
mv /tmp/hostname.bak /etc/hostname
else
rm -f /etc/hostname
fi
}
testcase_hostname() {
local orig=
if [[ -f /etc/hostname ]]; then
cp /etc/hostname /tmp/hostname.bak
orig=$(cat /etc/hostname)
fi
trap restore_hostname RETURN
# should activate daemon and work
if [[ -n "$orig" ]]; then
assert_in "Static hostname: $orig" "$(hostnamectl)"
fi
assert_in "Kernel: $(uname -s) $(uname -r)" "$(hostnamectl)"
# change hostname
assert_rc 0 hostnamectl set-hostname testhost
assert_eq "$(cat /etc/hostname)" "testhost"
assert_in "Static hostname: testhost" "$(hostnamectl)"
if [[ -n "$orig" ]]; then
# reset to original
assert_rc 0 hostnamectl set-hostname "$orig"
assert_eq "$(cat /etc/hostname)" "$orig"
assert_in "Static hostname: $orig" "$(hostnamectl)"
fi
}
restore_machine_info() {
if [[ -e /tmp/machine-info.bak ]]; then
mv /tmp/machine-info.bak /etc/machine-info
else
rm -f /etc/machine-info
fi
}
get_chassis() (
# shellcheck source=/dev/null
. /etc/machine-info
echo "$CHASSIS"
)
testcase_chassis() {
local i
if [[ -f /etc/machine-info ]]; then
cp /etc/machine-info /tmp/machine-info.bak
fi
trap restore_machine_info RETURN
# Invalid chassis type is refused
assert_rc 1 hostnamectl chassis hoge
# Valid chassis types
for i in vm container desktop laptop convertible server tablet handset watch embedded; do
hostnamectl chassis "$i"
assert_eq "$(hostnamectl chassis)" "$i"
assert_eq "$(get_chassis)" "$i"
done
systemctl stop systemd-hostnamed.service
rm -f /etc/machine-info
# fallback chassis type
if systemd-detect-virt --quiet --container; then
assert_eq "$(hostnamectl chassis)" container
elif systemd-detect-virt --quiet --vm; then
assert_eq "$(hostnamectl chassis)" vm
fi
}
restore_sysfs_dmi() {
umount /sys/class/dmi/id
rm -rf /run/systemd/system/systemd-hostnamed.service.d
systemctl daemon-reload
systemctl stop systemd-hostnamed
}
testcase_firmware_date() {
# No DMI on s390x or ppc
if [[ ! -d /sys/class/dmi/id ]]; then
echo "/sys/class/dmi/id not found, skipping firmware date tests."
return 0
fi
trap restore_sysfs_dmi RETURN
# Ignore /sys being mounted as tmpfs
mkdir -p /run/systemd/system/systemd-hostnamed.service.d/
cat >/run/systemd/system/systemd-hostnamed.service.d/override.conf <<EOF
[Service]
Environment="SYSTEMD_DEVICE_VERIFY_SYSFS=0"
Environment="SYSTEMD_HOSTNAME_FORCE_DMI=1"
EOF
systemctl daemon-reload
mount -t tmpfs none /sys/class/dmi/id
echo '1' >/sys/class/dmi/id/uevent
echo '01/01/2000' >/sys/class/dmi/id/bios_date
systemctl stop systemd-hostnamed
assert_in '2000-01-01' "$(hostnamectl)"
echo '2022' >/sys/class/dmi/id/bios_date
systemctl stop systemd-hostnamed
assert_not_in 'Firmware Date' "$(hostnamectl)"
echo 'garbage' >/sys/class/dmi/id/bios_date
systemctl stop systemd-hostnamed
assert_not_in 'Firmware Date' "$(hostnamectl)"
}
: >/failed
run_testcases
touch /testok
rm /failed
|