sintonia/playout/tests/liquidsoap/entrypoint_test.py

117 lines
3.2 KiB
Python
Raw Permalink Normal View History

from pathlib import Path
from subprocess import CalledProcessError, check_call, check_output
from unittest import mock
import pytest
from libretime_playout.config import Config
from libretime_playout.liquidsoap.entrypoint import generate_entrypoint
from libretime_playout.liquidsoap.models import Info, StreamPreferences
from libretime_playout.liquidsoap.version import get_liquidsoap_version
from .conftest import LIQ_VERSION
from .fixtures import TEST_STREAM_CONFIGS, make_config_with_stream
@pytest.mark.parametrize(
"version",
[pytest.param((1, 4, 4), id="1.4")],
)
@pytest.mark.parametrize(
"stream_config",
TEST_STREAM_CONFIGS,
)
def test_generate_entrypoint(
stream_config: Config,
stream_preferences: StreamPreferences,
version,
snapshot,
):
with mock.patch(
"libretime_playout.liquidsoap.entrypoint.here",
Path("/fake"),
):
found = generate_entrypoint(
log_filepath=Path("/var/log/radio.log"),
config=stream_config,
preferences=stream_preferences,
info=Info(
station_name="LibreTime",
),
version=version,
)
assert found == snapshot
@pytest.mark.skipif(
LIQ_VERSION >= (2, 0, 0),
reason="unsupported liquidsoap >= 2.0.0",
)
@pytest.mark.parametrize(
"stream_config",
TEST_STREAM_CONFIGS,
)
def test_liquidsoap_syntax(
tmp_path: Path,
stream_config: Config,
stream_preferences: StreamPreferences,
):
entrypoint_filepath = tmp_path / "radio.liq"
log_filepath = tmp_path / "radio.log"
entrypoint_filepath.write_text(
generate_entrypoint(
log_filepath=log_filepath,
config=stream_config,
preferences=stream_preferences,
info=Info(
station_name="LibreTime",
),
version=get_liquidsoap_version(),
),
encoding="utf-8",
)
check_call(["liquidsoap", "--check", str(entrypoint_filepath)])
@pytest.mark.skipif(
LIQ_VERSION >= (2, 0, 0),
reason="unsupported liquidsoap >= 2.0.0",
)
def test_liquidsoap_unsupported_output_aac(
tmp_path: Path,
stream_preferences: StreamPreferences,
):
entrypoint_filepath = tmp_path / "radio.liq"
log_filepath = tmp_path / "radio.log"
entrypoint_filepath.write_text(
generate_entrypoint(
log_filepath=log_filepath,
config=make_config_with_stream(
outputs={
"icecast": [
{
"enabled": True,
"mount": "main.aac",
"source_password": "hackme",
"audio": {"format": "aac", "bitrate": 128},
}
]
}
),
preferences=stream_preferences,
info=Info(
station_name="LibreTime",
),
version=get_liquidsoap_version(),
),
encoding="utf-8",
)
with pytest.raises(CalledProcessError) as exception:
check_output(["liquidsoap", "--check", str(entrypoint_filepath)])
assert b"You must be missing an optional dependency." in exception.value.stdout