mirror of
https://github.com/home-assistant/core.git
synced 2025-11-12 20:40:18 +00:00
Skip adding providers if the camera has native WebRTC (#129808)
* Skip adding providers if the camera has native WebRTC * Update homeassistant/components/camera/__init__.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Implement suggestion * Add tests * Shorten test name * Fix test --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
@@ -34,7 +34,7 @@ from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers import issue_registry as ir
|
||||
from homeassistant.setup import async_setup_component
|
||||
|
||||
from .common import STREAM_SOURCE, WEBRTC_ANSWER
|
||||
from .common import STREAM_SOURCE, WEBRTC_ANSWER, SomeTestProvider
|
||||
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
@@ -51,46 +51,6 @@ HLS_STREAM_SOURCE = "http://127.0.0.1/example.m3u"
|
||||
TEST_INTEGRATION_DOMAIN = "test"
|
||||
|
||||
|
||||
class SomeTestProvider(CameraWebRTCProvider):
|
||||
"""Test provider."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""Initialize the provider."""
|
||||
self._is_supported = True
|
||||
|
||||
@property
|
||||
def domain(self) -> str:
|
||||
"""Return the integration domain of the provider."""
|
||||
return "some_test"
|
||||
|
||||
@callback
|
||||
def async_is_supported(self, stream_source: str) -> bool:
|
||||
"""Determine if the provider supports the stream source."""
|
||||
return self._is_supported
|
||||
|
||||
async def async_handle_async_webrtc_offer(
|
||||
self,
|
||||
camera: Camera,
|
||||
offer_sdp: str,
|
||||
session_id: str,
|
||||
send_message: WebRTCSendMessage,
|
||||
) -> None:
|
||||
"""Handle the WebRTC offer and return the answer via the provided callback.
|
||||
|
||||
Return value determines if the offer was handled successfully.
|
||||
"""
|
||||
send_message(WebRTCAnswer(answer="answer"))
|
||||
|
||||
async def async_on_webrtc_candidate(
|
||||
self, session_id: str, candidate: RTCIceCandidate
|
||||
) -> None:
|
||||
"""Handle the WebRTC candidate."""
|
||||
|
||||
@callback
|
||||
def async_close_session(self, session_id: str) -> None:
|
||||
"""Close the session."""
|
||||
|
||||
|
||||
class Go2RTCProvider(SomeTestProvider):
|
||||
"""go2rtc provider."""
|
||||
|
||||
@@ -179,20 +139,6 @@ async def init_test_integration(
|
||||
return test_camera
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def register_test_provider(
|
||||
hass: HomeAssistant,
|
||||
) -> AsyncGenerator[SomeTestProvider]:
|
||||
"""Add WebRTC test provider."""
|
||||
await async_setup_component(hass, "camera", {})
|
||||
|
||||
provider = SomeTestProvider()
|
||||
unsub = async_register_webrtc_provider(hass, provider)
|
||||
await hass.async_block_till_done()
|
||||
yield provider
|
||||
unsub()
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("mock_camera", "mock_stream", "mock_stream_source")
|
||||
async def test_async_register_webrtc_provider(
|
||||
hass: HomeAssistant,
|
||||
@@ -393,7 +339,7 @@ async def test_ws_get_client_config(
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("mock_camera_webrtc_native_sync_offer")
|
||||
@pytest.mark.usefixtures("mock_test_webrtc_cameras")
|
||||
async def test_ws_get_client_config_sync_offer(
|
||||
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
|
||||
) -> None:
|
||||
@@ -403,7 +349,7 @@ async def test_ws_get_client_config_sync_offer(
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json_auto_id(
|
||||
{"type": "camera/webrtc/get_client_config", "entity_id": "camera.test"}
|
||||
{"type": "camera/webrtc/get_client_config", "entity_id": "camera.sync"}
|
||||
)
|
||||
msg = await client.receive_json()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user