mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-15 05:06:30 +00:00
Pass supervisor debug value to audio (#3752)
This commit is contained in:
parent
037e42e894
commit
ebeff31bf6
@ -12,10 +12,17 @@ from typing import Optional
|
|||||||
from awesomeversion import AwesomeVersion
|
from awesomeversion import AwesomeVersion
|
||||||
import jinja2
|
import jinja2
|
||||||
|
|
||||||
|
from ..const import LogLevel
|
||||||
from ..coresys import CoreSys
|
from ..coresys import CoreSys
|
||||||
from ..docker.audio import DockerAudio
|
from ..docker.audio import DockerAudio
|
||||||
from ..docker.stats import DockerStats
|
from ..docker.stats import DockerStats
|
||||||
from ..exceptions import AudioError, AudioUpdateError, DockerError
|
from ..exceptions import (
|
||||||
|
AudioError,
|
||||||
|
AudioUpdateError,
|
||||||
|
ConfigurationFileError,
|
||||||
|
DockerError,
|
||||||
|
)
|
||||||
|
from ..utils.json import write_json_file
|
||||||
from .base import PluginBase
|
from .base import PluginBase
|
||||||
from .const import FILE_HASSIO_AUDIO
|
from .const import FILE_HASSIO_AUDIO
|
||||||
from .validate import SCHEMA_AUDIO_CONFIG
|
from .validate import SCHEMA_AUDIO_CONFIG
|
||||||
@ -47,6 +54,11 @@ class PluginAudio(PluginBase):
|
|||||||
"""Return path of default asound config file."""
|
"""Return path of default asound config file."""
|
||||||
return self.sys_config.path_extern_audio.joinpath("asound")
|
return self.sys_config.path_extern_audio.joinpath("asound")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pulse_audio_config(self) -> Path:
|
||||||
|
"""Return Path to pulse audio config file."""
|
||||||
|
return Path(self.sys_config.path_audio, "pulse_audio.json")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def latest_version(self) -> Optional[AwesomeVersion]:
|
def latest_version(self) -> Optional[AwesomeVersion]:
|
||||||
"""Return latest version of Audio."""
|
"""Return latest version of Audio."""
|
||||||
@ -120,6 +132,7 @@ class PluginAudio(PluginBase):
|
|||||||
async def restart(self) -> None:
|
async def restart(self) -> None:
|
||||||
"""Restart Audio plugin."""
|
"""Restart Audio plugin."""
|
||||||
_LOGGER.info("Restarting Audio plugin")
|
_LOGGER.info("Restarting Audio plugin")
|
||||||
|
self._write_config()
|
||||||
try:
|
try:
|
||||||
await self.instance.restart()
|
await self.instance.restart()
|
||||||
except DockerError as err:
|
except DockerError as err:
|
||||||
@ -128,6 +141,7 @@ class PluginAudio(PluginBase):
|
|||||||
async def start(self) -> None:
|
async def start(self) -> None:
|
||||||
"""Run Audio plugin."""
|
"""Run Audio plugin."""
|
||||||
_LOGGER.info("Starting Audio plugin")
|
_LOGGER.info("Starting Audio plugin")
|
||||||
|
self._write_config()
|
||||||
try:
|
try:
|
||||||
await self.instance.run()
|
await self.instance.run()
|
||||||
except DockerError as err:
|
except DockerError as err:
|
||||||
@ -171,3 +185,17 @@ class PluginAudio(PluginBase):
|
|||||||
default_source=input_profile,
|
default_source=input_profile,
|
||||||
default_sink=output_profile,
|
default_sink=output_profile,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _write_config(self):
|
||||||
|
"""Write pulse audio config."""
|
||||||
|
try:
|
||||||
|
write_json_file(
|
||||||
|
self.pulse_audio_config,
|
||||||
|
{
|
||||||
|
"debug": self.sys_config.logging == LogLevel.DEBUG,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
except ConfigurationFileError as err:
|
||||||
|
raise AudioError(
|
||||||
|
f"Can't update pulse audio config: {err}", _LOGGER.error
|
||||||
|
) from err
|
||||||
|
50
tests/plugins/test_audio.py
Normal file
50
tests/plugins/test_audio.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
"""Test audio plugin."""
|
||||||
|
from pathlib import Path
|
||||||
|
from unittest.mock import AsyncMock, Mock, patch
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from supervisor.const import LogLevel
|
||||||
|
from supervisor.coresys import CoreSys
|
||||||
|
|
||||||
|
from tests.plugins.test_dns import fixture_docker_interface # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="write_json")
|
||||||
|
async def fixture_write_json() -> Mock:
|
||||||
|
"""Mock json file writer."""
|
||||||
|
with patch("supervisor.plugins.audio.write_json_file") as write_json_file:
|
||||||
|
yield write_json_file
|
||||||
|
|
||||||
|
|
||||||
|
async def test_config_write(
|
||||||
|
coresys: CoreSys,
|
||||||
|
docker_interface: tuple[AsyncMock, AsyncMock],
|
||||||
|
write_json: Mock,
|
||||||
|
):
|
||||||
|
"""Test config write on audio start and restart."""
|
||||||
|
await coresys.plugins.audio.start()
|
||||||
|
docker_interface[0].assert_called_once()
|
||||||
|
docker_interface[1].assert_not_called()
|
||||||
|
|
||||||
|
write_json.assert_called_once_with(
|
||||||
|
Path("/data/audio/pulse_audio.json"),
|
||||||
|
{
|
||||||
|
"debug": False,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
docker_interface[0].reset_mock()
|
||||||
|
write_json.reset_mock()
|
||||||
|
coresys.config.logging = LogLevel.DEBUG
|
||||||
|
|
||||||
|
await coresys.plugins.audio.restart()
|
||||||
|
docker_interface[0].assert_not_called()
|
||||||
|
docker_interface[1].assert_called_once()
|
||||||
|
|
||||||
|
write_json.assert_called_once_with(
|
||||||
|
Path("/data/audio/pulse_audio.json"),
|
||||||
|
{
|
||||||
|
"debug": True,
|
||||||
|
},
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user