summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/TEST-73-LOCALE/meson.build2
-rwxr-xr-xtest/units/TEST-67-INTEGRITY.sh173
-rwxr-xr-xtest/units/util.sh1
3 files changed, 89 insertions, 87 deletions
diff --git a/test/TEST-73-LOCALE/meson.build b/test/TEST-73-LOCALE/meson.build
index e5b9f19015..4f50d66e55 100644
--- a/test/TEST-73-LOCALE/meson.build
+++ b/test/TEST-73-LOCALE/meson.build
@@ -4,7 +4,5 @@ integration_tests += [
integration_test_template + {
'name' : fs.name(meson.current_source_dir()),
'priority' : 10,
- # TODO: Remove when https://github.com/systemd/systemd/issues/35335 is fixed.
- 'coredump-exclude-regex' : '/systemd-localed',
},
]
diff --git a/test/units/TEST-67-INTEGRITY.sh b/test/units/TEST-67-INTEGRITY.sh
index eb3082d132..6a464c40ab 100755
--- a/test/units/TEST-67-INTEGRITY.sh
+++ b/test/units/TEST-67-INTEGRITY.sh
@@ -2,120 +2,123 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
set -euxo pipefail
-export DM_NAME="integrity_test"
-export FULL_DM_DEV_NAME="/dev/mapper/${DM_NAME}"
-export FS_UUID="01234567-ffff-eeee-eeee-0123456789ab"
-export GEN="/var/run/systemd/generator"
+DM_NAME="integrity_test"
+DM_NODE="/dev/mapper/${DM_NAME}"
+DM_SERVICE="systemd-integritysetup@${DM_NAME}.service"
+FS_UUID="01234567-ffff-eeee-eeee-0123456789ab"
-image_dir=""
+TMP_DIR=
+LOOP=
-cleanup()
-{
- if [ -z "${image_dir}" ]; then
- return
+cleanup() (
+ set +e
+
+ if [[ -n "${LOOP}" ]]; then
+ losetup -d "${LOOP}"
fi
- if [ -f "${image_dir}/image" ]; then
- if [ -e "${FULL_DM_DEV_NAME}" ]; then
- integritysetup close "${DM_NAME}"
- fi
- losetup -d "${loop}"
+ if [[ -n "${TMP_DIR}" ]]; then
+ rm -rf "${TMP_DIR}"
fi
- rm -rf "${image_dir}"
-}
+ rm -rf /run/udev/rules.d/
+ udevadm control --reload
+)
trap cleanup EXIT
-build_integrity_tab()
-{
-cat <<EOF >"/etc/integritytab"
-${DM_NAME} ${loop} - integrity-algorithm=$1
+udevadm settle
+
+# Enable debugging logs for loop and dm block devices.
+mkdir -p /run/udev/rules.d/
+cat >/run/udev/rules.d/00-integrity-test.rules <<EOF
+SUBSYSTEM=="block", KERNEL=="loop*|dm-*", OPTIONS="log_level=debug"
EOF
-}
-image_dir="$(mktemp -d -t -p / integrity.tmp.XXXXXX)"
-if [ -z "${image_dir}" ] || [ ! -d "${image_dir}" ]; then
- echo "mktemp under / failed"
- exit 1
-fi
+# FIXME:
+# There is no ordering restriction between underlying loopback block devices and DM devices.
+# Hence, we may get wrong device node symlinks. To workaround that issue, let's decrease the
+# priority for loopback block devices.
+cat >/run/udev/rules.d/99-priority.rules <<EOF
+SUBSYSTEM=="block", KERNEL=="loop*", OPTIONS="link_priority=-200"
+EOF
-dd if=/dev/zero of="${image_dir}/image" bs=1048576 count=64 || exit 1
-dd if=/dev/zero of="${image_dir}/data" bs=1048576 count=64 || exit 1
-loop="$(losetup --show -f "${image_dir}/image")"
+udevadm control --reload
-if [[ ! -e ${loop} ]]; then
- echo "Loopback device created not found!"
- exit 1
-fi
+TMP_DIR="$(mktemp -d -t -p / integrity.tmp.XXXXXX)"
+dd if=/dev/zero of="${TMP_DIR}/image" bs=1048576 count=64
+dd if=/dev/zero of="${TMP_DIR}/data" bs=1048576 count=64
+LOOP="$(losetup --show -f "${TMP_DIR}/image")"
+udevadm wait --timeout=30 --settle "${LOOP}"
-# Do one iteration with a separate data device, to test those branches
-separate_data=1
+test_cleanup() (
+ set +e
-for algorithm in crc32c crc32 xxhash64 sha1 sha256
-do
- if [ "${separate_data}" -eq 1 ]; then
- data_option="--data-device=${image_dir}/data"
- else
- data_option=""
+ if [[ -e "/run/systemd/generator/${DM_SERVICE}" ]]; then
+ systemctl stop "${DM_SERVICE}"
+ elif [[ -e "${DM_NODE}" ]]; then
+ integritysetup close "${DM_NAME}"
fi
- integritysetup format "${loop}" --batch-mode -I "${algorithm}" "${data_option}" || exit 1
- integritysetup open -I "${algorithm}" "${loop}" "${DM_NAME}" "${data_option}" || exit 1
- mkfs.ext4 -U "${FS_UUID}" "${FULL_DM_DEV_NAME}" || exit 1
- # Give userspace time to handle udev events for new FS showing up ...
- udevadm settle
+ udevadm wait --timeout=30 --settle --removed "${DM_NODE}"
+
+ # Clear integritytab.
+ rm -f /etc/integritytab
+
+ # Make the generator to re-run.
+ systemctl daemon-reload
+)
- integritysetup close "${DM_NAME}" || exit 1
+test_one() {
+ local algorithm="${1?}"
+ local separate_data="${2?}"
+ local data_option
- # create integritytab, generate units, start service
- if [ "${separate_data}" -eq 1 ]; then
- data_option=",data-device=${image_dir}/data"
+ trap test_cleanup RETURN
+
+ if [[ "${separate_data}" == 1 ]]; then
+ data_option="--data-device=${TMP_DIR}/data"
else
data_option=""
fi
- build_integrity_tab "${algorithm}${data_option}"
-
- # Cause the generator to re-run
- systemctl daemon-reload || exit 1
- # Check for existence of unit files...
- if [[ ! -e "/run/systemd/generator/systemd-integritysetup@${DM_NAME}.service" ]]; then
- echo "Service file does not exist!"
- exit 1
- fi
+ integritysetup format "${LOOP}" --batch-mode -I "${algorithm}" "${data_option}"
+ integritysetup open -I "${algorithm}" "${LOOP}" "${DM_NAME}" "${data_option}"
+ udevadm wait --timeout=30 --settle "${DM_NODE}"
+ mkfs.ext4 -U "${FS_UUID}" "${DM_NODE}"
+ # Wait for synthetic events being processed.
+ udevadm settle
+ integritysetup close "${DM_NAME}"
+ udevadm wait --timeout=30 --settle --removed "${DM_NODE}"
- # Make sure we are in a consistent state, e.g. not already active before we start
- systemctl stop systemd-integritysetup@"${DM_NAME}".service || exit 1
- systemctl start systemd-integritysetup@"${DM_NAME}".service || exit 1
- # Reset the start-limit counters, as we're going to restart the service a couple of times
- systemctl reset-failed systemd-integritysetup@"${DM_NAME}".service
-
- # Check the signature on the FS to ensure we can retrieve it and that is matches
- if [ -e "${FULL_DM_DEV_NAME}" ]; then
- # If a separate device is used for the metadata storage, then blkid will return one of the loop devices
- if [ "${separate_data}" -eq 1 ]; then
- dev_name="$(integritysetup status ${DM_NAME} | grep '^\s*device:' | awk '{print $2}')"
- else
- dev_name="${FULL_DM_DEV_NAME}"
- fi
- if [ "${dev_name}" != "$(blkid -U "${FS_UUID}")" ]; then
- echo "Failed to locate FS with matching UUID!"
- exit 1
- fi
+ # Create integritytab.
+ if [[ "${separate_data}" == 1 ]]; then
+ data_option=",data-device=${TMP_DIR}/data"
else
- echo "Failed to bring up integrity device!"
- exit 1
+ data_option=""
fi
+ cat >"/etc/integritytab" <<EOF
+${DM_NAME} ${LOOP} - integrity-algorithm=${algorithm}${data_option}
+EOF
- systemctl stop systemd-integritysetup@"${DM_NAME}".service || exit 1
+ # Make the generator to re-run.
+ systemctl daemon-reload
- if [ -e "${FULL_DM_DEV_NAME}" ]; then
- echo "Expecting ${FULL_DM_DEV_NAME} to not exist after stopping unit!"
- exit 1
- fi
+ # Check for existence of the unit file.
+ [[ -e "/run/systemd/generator/${DM_SERVICE}" ]]
+
+ # Make sure we are in a consistent state, e.g. not already active before we start.
+ [[ "$(systemctl is-active "${DM_SERVICE}")" == inactive ]]
+ systemctl start "${DM_SERVICE}"
+ udevadm wait --timeout=30 --settle "${DM_NODE}"
+
+ # Check the signature on the FS to ensure we can retrieve it and that is matches.
+ [[ "$(blkid -U "${FS_UUID}")" == "${DM_NODE}" ]]
+}
- separate_data=0
+for a in crc32c crc32 xxhash64 sha1 sha256; do
+ test_one "$a" 0
+ test_one "$a" 1
done
touch /testok
diff --git a/test/units/util.sh b/test/units/util.sh
index 51e0ad1ec0..7a39d4267e 100755
--- a/test/units/util.sh
+++ b/test/units/util.sh
@@ -182,6 +182,7 @@ create_dummy_container() {
fi
mkdir -p "$root"
+ chmod 555 "$root"
cp -a /usr/share/TEST-13-NSPAWN-container-template/* "$root"
coverage_create_nspawn_dropin "$root"
}