1
0
Fork 0
util-linux/tests/ts/schedutils/coresched
Daniel Baumann c36e531662
Adding upstream version 2.41.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 11:26:35 +02:00

83 lines
3.1 KiB
Bash
Executable file

#!/bin/bash
# SPDX-License-Identifier: EUPL-1.2
#
# This file is part of util-linux
#
# Copyright (C) 2024 Thijs Raymakers
# Licensed under the EUPL v1.2
TS_TOPDIR="${0%/*}/../.."
TS_DESC="coresched"
. "$TS_TOPDIR"/functions.sh
ts_init "$*"
ts_check_test_command "$TS_CMD_CORESCHED"
ts_check_prog "tee"
ts_check_prog "sed"
# If coresched cannot succesfully run, skip the test suite
CORESCHED_TEST_KERNEL_SUPPORT_CMD=$($TS_CMD_CORESCHED 2>&1)
if [[ $CORESCHED_TEST_KERNEL_SUPPORT_CMD == *"CONFIG_SCHED_CORE"* ]]; then
ts_skip "Kernel has no CONFIG_SCHED_CORE support or SMT is not available"
fi
# The output of coresched contains PIDs and core scheduling cookies, both of which should be
# assumed to be random values as we have no control over them. The tests replace these values
# with sed before writing them to the output file, so it can match the expected output file.
# - The PID of this bash script is replaced with the placeholder `OWN_PID`
# - The core scheduling cookie of this bash script is replaced by `COOKIE`
# - Any other cookie is replaced by `DIFFERENT_COOKIE`
# The behavior of coresched does not depend on the exact values of these cookies, so using
# placeholder values does not change the behavior tests.
ts_init_subtest "set-cookie-parent-pid"
CORESCHED_OUTPUT=$( ($TS_CMD_CORESCHED -v new -d $$ \
| tee -a "$TS_OUTPUT") 3>&1 1>&2 2>&3 \
| sed "s/$$/PARENT_PID/g")
CORESCHED_PARENT_COOKIE=$(echo "$CORESCHED_OUTPUT" | sed 's/^.*\(0x.*$\)/\1/g')
if [ -z "$CORESCHED_PARENT_COOKIE" ]; then
ts_failed "empty value for CORESCHED_PARENT_COOKIE"
fi
CORESCHED_OUTPUT=$(echo "$CORESCHED_OUTPUT" \
| sed "s/$CORESCHED_PARENT_COOKIE/PARENT_COOKIE/g")
echo "$CORESCHED_OUTPUT" >> "$TS_ERRLOG"
ts_finalize_subtest
ts_init_subtest "get-cookie-parent-pid"
$TS_CMD_CORESCHED get -s $$ 2>> "$TS_ERRLOG" \
| sed -e "s/$$/PARENT_PID/g" \
-e "s/$CORESCHED_PARENT_COOKIE/PARENT_COOKIE/g" >> "$TS_OUTPUT"
ts_finalize_subtest
ts_init_subtest "get-cookie-own-pid"
$TS_CMD_CORESCHED get 2>> "$TS_ERRLOG" \
| sed -e "s/pid [0-9]\+/pid OWN_PID/g" \
-e "s/$CORESCHED_PARENT_COOKIE/PARENT_COOKIE/g" >> "$TS_OUTPUT"
ts_finalize_subtest
ts_init_subtest "new-child-with-new-cookie"
$TS_CMD_CORESCHED new -- "$TS_CMD_CORESCHED" get 2>> "$TS_ERRLOG" \
| sed -e 's/^.*\(0x.*$\)/\1/g' \
-e "s/$CORESCHED_PARENT_COOKIE/SAME_COOKIE/g" \
-e "s/0x.*$/DIFFERENT_COOKIE/g" >> "$TS_OUTPUT"
ts_finalize_subtest
ts_init_subtest "copy-from-parent-to-nested-child"
$TS_CMD_CORESCHED new -- /bin/bash -c \
"$TS_CMD_CORESCHED copy -s $$ -- $TS_CMD_CORESCHED get" \
2>> "$TS_ERRLOG" \
| sed -e 's/^.*\(0x.*$\)/\1/g' \
-e "s/$CORESCHED_PARENT_COOKIE/SAME_COOKIE/g" \
-e "s/0x.*$/DIFFERENT_COOKIE/g" >> "$TS_OUTPUT"
ts_finalize_subtest
ts_init_subtest "copy-from-child-to-parent"
$TS_CMD_CORESCHED new -- /bin/bash -c \
"$TS_CMD_CORESCHED copy -s \$\$ -d $$"
$TS_CMD_CORESCHED get 2>> "$TS_ERRLOG" \
| sed -e 's/^.*\(0x.*$\)/\1/g' \
-e "s/$CORESCHED_PARENT_COOKIE/SAME_COOKIE/g" \
-e "s/0x.*$/DIFFERENT_COOKIE/g" >> "$TS_OUTPUT"
ts_finalize_subtest
ts_finalize