mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
Occasionally there are truncated journals failing this test: [ 884.181701] H TEST-04-JOURNAL.sh[12104]: ++ journalctl --no-hostname -n 1 -t bash --invocation=fe8122a7d8eb42c7bf357ac5fafa95e1 [ 884.181749] H TEST-04-JOURNAL.sh[12091]: + assert_in 'invocation 1 fe8122a7d8eb42c7bf357ac5fafa95e1' 'Nov 06 17:27:10 bash[11985]: invocation 1 fe8122a7d8eb42c7bf357ac5fafa95e1' [ 884.181773] H TEST-04-JOURNAL.sh[12105]: + set +ex [ 884.181819] H TEST-04-JOURNAL.sh[12091]: + read -r idx invocation _ [ 884.181819] H TEST-04-JOURNAL.sh[12091]: + i=2 [ 884.181865] H TEST-04-JOURNAL.sh[12106]: ++ journalctl --no-hostname -n 1 -t bash --invocation=2 -u invocation-id-test-20992 [ 884.181865] H TEST-04-JOURNAL.sh[12106]: Journal file /var/log/journal/936183a66e7c47939693ae37a967e4fd/system.journal is truncated, ignoring file. [ 884.181865] H TEST-04-JOURNAL.sh[12106]: No journal entry found for the invocation (+2). [ 884.181952] H TEST-04-JOURNAL.sh[12091]: + assert_in 'invocation 2 07d0bd6b5c654b148541d798abccaa96' '' [ 884.181972] H TEST-04-JOURNAL.sh[12107]: + set +ex [ 884.181972] H TEST-04-JOURNAL.sh[12107]: FAIL: 'invocation 2 07d0bd6b5c654b148541d798abccaa96' not found in: Rotate it at the beginning of the test case to try and avoid this. Fixes https://github.com/systemd/systemd/issues/39601
88 lines
4.7 KiB
Bash
Executable File
88 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
# shellcheck disable=SC2002
|
|
set -eux
|
|
set -o pipefail
|
|
|
|
# shellcheck source=test/units/util.sh
|
|
. "$(dirname "$0")"/util.sh
|
|
|
|
BASE=test-"$RANDOM"
|
|
SERVICE_NAME_SHORT=invocation-id-"$BASE"
|
|
SERVICE_NAME="$SERVICE_NAME_SHORT".service
|
|
SERVICE_NAME_GLOB="invocation-*-${BASE}.service"
|
|
|
|
TMP_DIR=$(mktemp -d)
|
|
|
|
# FIXME: if the maximum log level of PID1 is debug, then journal entries of
|
|
# service stdout will not contain _SYSTEMD_INVOCATION_ID field.
|
|
SAVED_LOG_LEVEL=$(systemctl log-level)
|
|
systemctl log-level info
|
|
journalctl --rotate
|
|
|
|
# Note, if the service exits extremely fast, journald cannot find the source of the
|
|
# stream. Hence, we need to call 'journalctl --sync' before service exits.
|
|
for i in {1..10}; do
|
|
systemd-run --wait -u "$SERVICE_NAME" bash -c "echo invocation ${i} \$INVOCATION_ID; journalctl --sync"
|
|
done
|
|
|
|
# Sync journal again here to ensure the following message is stored to journal.
|
|
# systemd[1]: invocation-id-test-26448.service: Deactivated successfully.
|
|
journalctl --sync
|
|
|
|
journalctl --list-invocation -u "$SERVICE_NAME_SHORT" | tee "$TMP_DIR"/short
|
|
journalctl --list-invocation -u "$SERVICE_NAME_GLOB" | tee "$TMP_DIR"/glob
|
|
journalctl --list-invocation -u "$SERVICE_NAME" | tee "$TMP_DIR"/10
|
|
journalctl --list-invocation -u "$SERVICE_NAME" --reverse | tee "$TMP_DIR"/10-r
|
|
journalctl --list-invocation -u "$SERVICE_NAME" -n +10 | tee "$TMP_DIR"/p10
|
|
journalctl --list-invocation -u "$SERVICE_NAME" -n +10 --reverse | tee "$TMP_DIR"/p10-r
|
|
journalctl --list-invocation -u "$SERVICE_NAME" -n 5 | tee "$TMP_DIR"/5
|
|
journalctl --list-invocation -u "$SERVICE_NAME" -n 5 --reverse | tee "$TMP_DIR"/5-r
|
|
journalctl --list-invocation -u "$SERVICE_NAME" -n +5 | tee "$TMP_DIR"/p5
|
|
journalctl --list-invocation -u "$SERVICE_NAME" -n +5 --reverse | tee "$TMP_DIR"/p5-r
|
|
|
|
[[ $(cat "$TMP_DIR"/10 | wc -l) == 11 ]]
|
|
[[ $(cat "$TMP_DIR"/10-r | wc -l) == 11 ]]
|
|
[[ $(cat "$TMP_DIR"/p10 | wc -l) == 11 ]]
|
|
[[ $(cat "$TMP_DIR"/p10-r | wc -l) == 11 ]]
|
|
[[ $(cat "$TMP_DIR"/5 | wc -l) == 6 ]]
|
|
[[ $(cat "$TMP_DIR"/5-r | wc -l) == 6 ]]
|
|
[[ $(cat "$TMP_DIR"/p5 | wc -l) == 6 ]]
|
|
[[ $(cat "$TMP_DIR"/p5-r | wc -l) == 6 ]]
|
|
|
|
diff "$TMP_DIR"/10 "$TMP_DIR"/short
|
|
diff "$TMP_DIR"/10 "$TMP_DIR"/glob
|
|
diff <(tail -n 10 "$TMP_DIR"/10 | tac) <(tail -n 10 "$TMP_DIR"/10-r)
|
|
diff <(tail -n 5 "$TMP_DIR"/10) <(tail -n 5 "$TMP_DIR"/5)
|
|
diff <(tail -n 5 "$TMP_DIR"/10 | tac) <(tail -n 5 "$TMP_DIR"/5-r)
|
|
diff <(tail -n 10 "$TMP_DIR"/p10 | tac) <(tail -n 10 "$TMP_DIR"/p10-r)
|
|
diff <(tail -n 10 "$TMP_DIR"/p10 | head -n 5) <(tail -n 5 "$TMP_DIR"/p5)
|
|
diff <(tail -n 10 "$TMP_DIR"/p10 | head -n 5 | tac) <(tail -n 5 "$TMP_DIR"/p5-r)
|
|
|
|
tail -n 10 "$TMP_DIR"/10 |
|
|
while read -r idx invocation _; do
|
|
i="$(( idx + 10 ))"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${i}" -u "$SERVICE_NAME_SHORT")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${idx}" -u "$SERVICE_NAME_SHORT")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${i}" -u "$SERVICE_NAME_GLOB")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${idx}" -u "$SERVICE_NAME_GLOB")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${i}" -u "$SERVICE_NAME")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${idx}" -u "$SERVICE_NAME")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${invocation}")"
|
|
done
|
|
|
|
tail -n 10 "$TMP_DIR"/p10 |
|
|
while read -r i invocation _; do
|
|
idx="$(( i - 10 ))"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${i}" -u "$SERVICE_NAME_SHORT")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${idx}" -u "$SERVICE_NAME_SHORT")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${i}" -u "$SERVICE_NAME_GLOB")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${idx}" -u "$SERVICE_NAME_GLOB")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${i}" -u "$SERVICE_NAME")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${idx}" -u "$SERVICE_NAME")"
|
|
assert_in "invocation ${i} ${invocation}" "$(journalctl --no-hostname -n 1 -t bash --invocation="${invocation}")"
|
|
done
|
|
|
|
# Restore the log level.
|
|
systemctl log-level "$SAVED_LOG_LEVEL"
|