omarchy-hw-hybrid-gpu gates the Hybrid GPU menu entry, and it queried supergfxctl unbounded — a wedged supergfxd stalled menu rendering forever. Bound the query with the same TERM-then-KILL escalation the toggle uses, and treat a daemon that cannot answer like a machine without supergfxctl: fall back to counting GPUs rather than hiding hardware that is really there. An ordinary supergfxctl failure still hides the entry. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
92 lines
2.6 KiB
Bash
92 lines
2.6 KiB
Bash
#!/bin/bash
|
|
|
|
source "$(dirname "$0")/base-test.sh"
|
|
|
|
test_tmp=$(mktemp -d) || fail "test temp directory is available"
|
|
trap 'rm -rf "$test_tmp"' EXIT
|
|
|
|
fake_bin="$test_tmp/bin"
|
|
mkdir -p "$fake_bin"
|
|
|
|
cat >"$fake_bin/supergfxctl" <<'STUB'
|
|
#!/bin/bash
|
|
|
|
[[ $1 == "-s" ]] || exit 64
|
|
|
|
case "${BLOCKED:-no}" in
|
|
kill-only)
|
|
trap '' TERM
|
|
/usr/bin/sleep 30
|
|
;;
|
|
term)
|
|
/usr/bin/sleep 30
|
|
;;
|
|
esac
|
|
|
|
((${FAIL_STATUS:-0})) && exit "$FAIL_STATUS"
|
|
|
|
printf '%s\n' "${SUPPORTED_MODES:-Integrated Hybrid}"
|
|
STUB
|
|
|
|
cat >"$fake_bin/lspci" <<'STUB'
|
|
#!/bin/bash
|
|
|
|
for _ in $(seq "${GPU_COUNT:-1}"); do
|
|
echo "0000:00:02.0 VGA compatible controller: Stub GPU"
|
|
done
|
|
STUB
|
|
|
|
chmod +x "$fake_bin"/*
|
|
|
|
hybrid_gpu() {
|
|
PATH="$fake_bin:$PATH" timeout --kill-after=1s 10s bash "$ROOT/bin/omarchy-hw-hybrid-gpu"
|
|
}
|
|
|
|
hybrid_gpu ||
|
|
fail "hybrid GPU detection sees a supported Hybrid mode"
|
|
pass "hybrid GPU detection sees a supported Hybrid mode"
|
|
|
|
SUPPORTED_MODES="Integrated Vfio" hybrid_gpu
|
|
status=$?
|
|
((status == 1)) ||
|
|
fail "hybrid GPU detection trusts supergfxctl when Hybrid is unsupported" "exit status: $status"
|
|
pass "hybrid GPU detection trusts supergfxctl when Hybrid is unsupported"
|
|
|
|
FAIL_STATUS=2 GPU_COUNT=2 hybrid_gpu
|
|
status=$?
|
|
((status == 1)) ||
|
|
fail "hybrid GPU detection hides on an ordinary supergfxctl failure" "exit status: $status"
|
|
pass "hybrid GPU detection hides on an ordinary supergfxctl failure"
|
|
|
|
BLOCKED=term GPU_COUNT=1 hybrid_gpu
|
|
status=$?
|
|
((status == 1)) ||
|
|
fail "hybrid GPU detection sees one GPU as non-hybrid after a clean timeout" "exit status: $status"
|
|
pass "hybrid GPU detection sees one GPU as non-hybrid after a clean timeout"
|
|
|
|
BLOCKED=term GPU_COUNT=2 hybrid_gpu ||
|
|
fail "hybrid GPU detection counts multiple GPUs after a clean timeout"
|
|
pass "hybrid GPU detection counts multiple GPUs after a clean timeout"
|
|
|
|
BLOCKED=kill-only GPU_COUNT=1 hybrid_gpu
|
|
status=$?
|
|
((status != 124 && status != 137)) ||
|
|
fail "hybrid GPU detection stays bounded when supergfxd ignores the timeout signal"
|
|
((status == 1)) ||
|
|
fail "hybrid GPU detection sees one GPU as non-hybrid when supergfxd is wedged" "exit status: $status"
|
|
pass "hybrid GPU detection stays bounded when supergfxd ignores the timeout signal"
|
|
|
|
BLOCKED=kill-only GPU_COUNT=2 hybrid_gpu ||
|
|
fail "hybrid GPU detection counts multiple GPUs when supergfxd is wedged"
|
|
pass "hybrid GPU detection counts multiple GPUs when supergfxd is wedged"
|
|
|
|
cat >"$fake_bin/omarchy-cmd-present" <<'STUB'
|
|
#!/bin/bash
|
|
exit 1
|
|
STUB
|
|
chmod +x "$fake_bin/omarchy-cmd-present"
|
|
|
|
GPU_COUNT=2 hybrid_gpu ||
|
|
fail "hybrid GPU detection counts GPUs without supergfxctl"
|
|
pass "hybrid GPU detection counts GPUs without supergfxctl"
|