Files
couchos/tests/test_display_audio.py
jackmhny 04ef2a0d74
Some checks failed
ci / verify (push) Has been cancelled
feat: build CouchOS Melee appliance
2026-08-03 02:52:28 +02:00

185 lines
5.5 KiB
Python

import os
import subprocess
import tempfile
import unittest
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
class DisplayAudioHelperTests(unittest.TestCase):
def test_prefers_hdmi_1080p_mode_disables_edp_and_selects_hdmi_sink(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
temp_path = Path(temp_dir)
bin_dir = temp_path / "bin"
state_dir = temp_path / "state"
bin_dir.mkdir()
state_dir.mkdir()
log_file = state_dir / "calls.log"
(bin_dir / "xrandr").write_text(
f"""#!/usr/bin/env bash
set -Eeuo pipefail
if [[ "${{1:-}}" == "--query" ]]; then
cat <<'EOF'
HDMI-1 connected primary 1920x1080+0+0
1920x1080 60.00*+ 59.94
eDP-1 connected 1920x1080+1920+0
1920x1080 120.00*+ 60.00
EOF
exit 0
fi
printf 'xrandr %s\\n' "$*" >>"{log_file}"
""",
encoding="utf-8",
)
(bin_dir / "pactl").write_text(
f"""#!/usr/bin/env bash
set -Eeuo pipefail
case "$*" in
"list short cards")
cat <<'EOF'
1\talsa_card.pci-0000_00_1f.3\tmodule-alsa-card.c
EOF
;;
"list short sinks")
cat <<'EOF'
0\talsa_output.pci-0000_00_1f.3.analog-stereo\tmodule-alsa-card.c\ts16le 2ch 44100Hz\tSUSPENDED
1\talsa_output.pci-0000_00_1f.3.hdmi-stereo-extra1\tmodule-alsa-card.c\ts16le 2ch 44100Hz\tIDLE
EOF
;;
"list cards")
cat <<'EOF'
Card #1
\tName: alsa_card.pci-0000_00_1f.3
\tProfiles:
\t\toutput:analog-stereo: Analog Stereo (available: yes)
\t\toutput:hdmi-stereo-extra1: Digital Stereo (HDMI 2) (available: yes)
EOF
;;
set-card-profile*|set-default-sink*)
printf 'pactl %s\\n' "$*" >>"{log_file}"
;;
*)
exit 1
;;
esac
""",
encoding="utf-8",
)
(bin_dir / "logger").write_text("#!/usr/bin/env bash\nexit 0\n", encoding="utf-8")
for path in bin_dir.iterdir():
path.chmod(0o755)
result = subprocess.run(
["bash", str(REPO_ROOT / "scripts/configure_display_audio.sh")],
env={**os.environ, "PATH": f"{bin_dir}:{os.environ['PATH']}"},
capture_output=True,
text=True,
check=False,
)
self.assertEqual(result.returncode, 0, result.stderr)
calls = log_file.read_text(encoding="utf-8")
self.assertIn(
"xrandr --output HDMI-1 --primary --mode 1920x1080 --rate 60.00 --output eDP-1 --off",
calls,
)
self.assertIn(
"pactl set-card-profile alsa_card.pci-0000_00_1f.3 output:hdmi-stereo-extra1",
calls,
)
self.assertIn(
"pactl set-default-sink alsa_output.pci-0000_00_1f.3.hdmi-stereo-extra1",
calls,
)
def test_requeries_sink_after_switching_hdmi_profile(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
temp_path = Path(temp_dir)
bin_dir = temp_path / "bin"
state_dir = temp_path / "state"
bin_dir.mkdir()
state_dir.mkdir()
log_file = state_dir / "calls.log"
sink_state = state_dir / "sink-state"
sink_state.write_text("before", encoding="utf-8")
(bin_dir / "xrandr").write_text(
f"""#!/usr/bin/env bash
set -Eeuo pipefail
if [[ "${{1:-}}" == "--query" ]]; then
cat <<'EOF'
HDMI-1 connected primary 1920x1080+0+0
1920x1080 60.00*+ 59.94
eDP-1 connected 1920x1080+1920+0
1920x1080 120.00*+ 60.00
EOF
exit 0
fi
printf 'xrandr %s\\n' "$*" >>"{log_file}"
""",
encoding="utf-8",
)
(bin_dir / "pactl").write_text(
f"""#!/usr/bin/env bash
set -Eeuo pipefail
case "$*" in
"list cards")
cat <<'EOF'
Card #1
\tName: alsa_card.pci-0000_00_1f.3
\tProfiles:
\t\toutput:analog-stereo: Analog Stereo (available: yes)
\t\toutput:hdmi-stereo-extra1: Digital Stereo (HDMI 2) (available: yes)
EOF
;;
"list short sinks")
if [[ "$(cat "{sink_state}")" == "after" ]]; then
cat <<'EOF'
1\talsa_output.pci-0000_00_1f.3.hdmi-stereo-extra1\tmodule-alsa-card.c\ts16le 2ch 44100Hz\tIDLE
EOF
else
cat <<'EOF'
0\talsa_output.pci-0000_00_1f.3.analog-stereo\tmodule-alsa-card.c\ts16le 2ch 44100Hz\tSUSPENDED
EOF
fi
;;
set-card-profile*)
printf 'pactl %s\\n' "$*" >>"{log_file}"
printf 'after' >"{sink_state}"
;;
set-default-sink*)
printf 'pactl %s\\n' "$*" >>"{log_file}"
;;
*)
exit 1
;;
esac
""",
encoding="utf-8",
)
(bin_dir / "logger").write_text("#!/usr/bin/env bash\nexit 0\n", encoding="utf-8")
for path in bin_dir.iterdir():
path.chmod(0o755)
result = subprocess.run(
["bash", str(REPO_ROOT / "scripts/configure_display_audio.sh")],
env={**os.environ, "PATH": f"{bin_dir}:{os.environ['PATH']}"},
capture_output=True,
text=True,
check=False,
)
self.assertEqual(result.returncode, 0, result.stderr)
calls = log_file.read_text(encoding="utf-8")
self.assertIn(
"pactl set-card-profile alsa_card.pci-0000_00_1f.3 output:hdmi-stereo-extra1",
calls,
)
self.assertIn(
"pactl set-default-sink alsa_output.pci-0000_00_1f.3.hdmi-stereo-extra1",
calls,
)