Improve SamsungTV ssdp test fixtures (#144376)

* Improve SamsungTV ssdp fixtures

* More

* More

* More

* More

* Improve
This commit is contained in:
epenet 2025-05-07 14:13:38 +02:00 committed by GitHub
parent 48a2dde16b
commit 704e4221f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 244 additions and 59 deletions

View File

@ -40,7 +40,7 @@ MOCK_ENTRYDATA_ENCRYPTED_WS = {
CONF_SESSION_ID: "2",
}
MOCK_ENTRYDATA_WS = {
CONF_HOST: "fake_host",
CONF_HOST: "10.10.12.34",
CONF_METHOD: METHOD_WEBSOCKET,
CONF_PORT: 8002,
CONF_MODEL: "any",

View File

@ -1,11 +1,54 @@
{
"ssdp_usn": "uuid:0d1cef00-00dc-1000-9c80-4844f7b172de::urn:samsung.com:service:MainTVAgent2:1",
"ssdp_usn": "uuid:055d4a80-005a-1000-b872-84a4668d8423::urn:samsung.com:service:MainTVAgent2:1",
"ssdp_st": "urn:samsung.com:service:MainTVAgent2:1",
"upnp": {
"friendlyName": "[TV] fake_name",
"manufacturer": "Samsung fake_manufacturer",
"modelName": "fake_model",
"UDN": "uuid:0d1cef00-00dc-1000-9c80-4844f7b172de"
"deviceType": "urn:samsung.com:device:MainTVServer2:1",
"friendlyName": "[TV]Samsung LED55",
"manufacturer": "Samsung Electronics",
"manufacturerURL": "http://www.samsung.com",
"modelDescription": "Samsung DTV MainTVServer2",
"modelName": "UE55H6400",
"modelNumber": "1.0",
"modelURL": "http://www.samsung.com",
"serialNumber": "20100621",
"UDN": "uuid:055d4a80-005a-1000-b872-84a4668d8423",
"UPC": "123456789012",
"deviceID": "ZPCNHA5IWYRV6",
"ProductCap": "Y2013",
"serviceList": {
"service": {
"serviceType": "urn:samsung.com:service:MainTVAgent2:1",
"serviceId": "urn:samsung.com:serviceId:MainTVAgent2",
"controlURL": "/smp_4_",
"eventSubURL": "/smp_5_",
"SCPDURL": "/smp_3_"
}
}
},
"ssdp_location": "https://fake_host:12345/tv_agent"
"ssdp_location": "http://10.10.12.34:7676/smp_2_",
"ssdp_nt": null,
"ssdp_udn": "uuid:055d4a80-005a-1000-b872-84a4668d8423",
"ssdp_ext": "",
"ssdp_server": "SHP, UPnP/1.0, Samsung UPnP SDK/1.0",
"ssdp_headers": {
"CACHE-CONTROL": "max-age:1800",
"Date": "Thu, 01 Jan 1970 00:06:48 GMT",
"EXT": "",
"LOCATION": "http://10.10.12.34:7676/smp_2_",
"SERVER": "SHP, UPnP/1.0, Samsung UPnP SDK/1.0",
"ST": "urn:samsung.com:service:MainTVAgent2:1",
"USN": "uuid:055d4a80-005a-1000-b872-84a4668d8423::urn:samsung.com:service:MainTVAgent2:1",
"Content-Length": "0",
"_host": "10.10.12.34",
"_udn": "uuid:055d4a80-005a-1000-b872-84a4668d8423",
"_location_original": "http://10.10.12.34:7676/smp_2_",
"location": "http://10.10.12.34:7676/smp_2_",
"_timestamp": "2025-04-30T07:30:24.160549",
"_remote_addr": ["10.10.12.34", 58482],
"_port": 58482,
"_local_addr": ["0.0.0.0", 0],
"_source": "search"
},
"ssdp_all_locations": ["http://10.10.12.34:7676/smp_2_"],
"x_homeassistant_matching_domains": ["samsungtv"]
}

View File

@ -1,11 +1,62 @@
{
"ssdp_usn": "uuid:0d1cef00-00dc-1000-9c80-4844f7b172de::urn:samsung.com:device:RemoteControlReceiver:1",
"ssdp_usn": "uuid:068e7781-006e-1000-bbbf-84a4668d8423::urn:samsung.com:device:RemoteControlReceiver:1",
"ssdp_st": "urn:samsung.com:device:RemoteControlReceiver:1",
"upnp": {
"friendlyName": "[TV] fake_name",
"manufacturer": "Samsung fake_manufacturer",
"modelName": "fake_model",
"UDN": "uuid:0d1cef00-00dc-1000-9c80-4844f7b172de"
"deviceType": "urn:samsung.com:device:RemoteControlReceiver:1",
"friendlyName": "[TV]Samsung LED55",
"manufacturer": "Samsung Electronics",
"manufacturerURL": "http://www.samsung.com/sec",
"modelDescription": "Samsung TV RCR",
"modelName": "UE55H6400",
"modelNumber": "1.0",
"modelURL": "http://www.samsung.com/sec",
"serialNumber": "20090804RCR",
"UDN": "uuid:068e7781-006e-1000-bbbf-84a4668d8423",
"deviceID": "ZPCNHA5IWYRV6",
"ProductCap": "Resolution:1920X1080,ImageZoom,ImageRotate,Y2014,ENC",
"serviceList": {
"service": {
"serviceType": "urn:samsung.com:service:MultiScreenService:1",
"serviceId": "urn:samsung.com:serviceId:MultiScreenService",
"controlURL": "/smp_9_",
"eventSubURL": "/smp_10_",
"SCPDURL": "/smp_8_"
}
},
"Capabilities": {
"Capability": {
"@name": "samsung:multiscreen:1",
"@port": "8001",
"@location": "/ms/1.0/"
}
}
},
"ssdp_location": "http://fake_host:7676/smp_7_"
"ssdp_location": "http://10.10.12.34:7676/smp_7_",
"ssdp_nt": "urn:samsung.com:device:RemoteControlReceiver:1",
"ssdp_udn": "uuid:068e7781-006e-1000-bbbf-84a4668d8423",
"ssdp_ext": "",
"ssdp_server": "SHP, UPnP/1.0, Samsung UPnP SDK/1.0",
"ssdp_headers": {
"CACHE-CONTROL": "max-age:1800",
"Date": "Thu, 01 Jan 1970 00:06:48 GMT",
"EXT": "",
"LOCATION": "http://10.10.12.34:7676/smp_7_",
"SERVER": "SHP, UPnP/1.0, Samsung UPnP SDK/1.0",
"ST": "urn:samsung.com:device:RemoteControlReceiver:1",
"USN": "uuid:068e7781-006e-1000-bbbf-84a4668d8423::urn:samsung.com:device:RemoteControlReceiver:1",
"Content-Length": "0",
"_host": "10.10.12.34",
"_udn": "uuid:068e7781-006e-1000-bbbf-84a4668d8423",
"_location_original": "http://10.10.12.34:7676/smp_7_",
"location": "http://10.10.12.34:7676/smp_7_",
"_timestamp": "2025-04-30T07:30:24.384758",
"_remote_addr": ["10.10.12.34", 24234],
"_port": 24234,
"_local_addr": ["0.0.0.0", 1900],
"HOST": "239.255.255.250:1900",
"NT": "urn:samsung.com:device:RemoteControlReceiver:1",
"NTS": "ssdp:alive"
},
"ssdp_all_locations": ["http://10.10.12.34:7676/smp_7_"],
"x_homeassistant_matching_domains": ["samsungtv"]
}

View File

@ -1,11 +1,105 @@
{
"ssdp_usn": "uuid:0d1cef00-00dc-1000-9c80-4844f7b172de::urn:schemas-upnp-org:service:RenderingControl:1",
"ssdp_usn": "uuid:09896802-00a0-1000-adfd-84a4668d8423::urn:schemas-upnp-org:service:RenderingControl:1",
"ssdp_st": "urn:schemas-upnp-org:service:RenderingControl:1",
"upnp": {
"friendlyName": "[TV] fake_name",
"manufacturer": "Samsung fake_manufacturer",
"modelName": "fake_model",
"UDN": "uuid:0d1cef00-00dc-1000-9c80-4844f7b172de"
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"X_compatibleId": "MS_DigitalMediaDeviceClass_DMR_V001",
"X_deviceCategory": "Display.TV.LCD Multimedia.DMR",
"X_DLNADOC": "DMR-1.50",
"friendlyName": "[TV]Samsung LED55",
"manufacturer": "Samsung Electronics",
"manufacturerURL": "http://www.samsung.com/sec",
"modelDescription": "Samsung TV DMR",
"modelName": "UE55H6400",
"modelNumber": "AllShare1.0",
"modelURL": "http://www.samsung.com/sec",
"serialNumber": "20110517DMR",
"UDN": "uuid:09896802-00a0-1000-adfd-84a4668d8423",
"deviceID": "ZPCNHA5IWYRV6",
"iconList": {
"icon": [
{
"mimetype": "image/jpeg",
"width": "48",
"height": "48",
"depth": "24",
"url": "/dmr/icon_SML.jpg"
},
{
"mimetype": "image/jpeg",
"width": "120",
"height": "120",
"depth": "24",
"url": "/dmr/icon_LRG.jpg"
},
{
"mimetype": "image/png",
"width": "48",
"height": "48",
"depth": "24",
"url": "/dmr/icon_SML.png"
},
{
"mimetype": "image/png",
"width": "120",
"height": "120",
"depth": "24",
"url": "/dmr/icon_LRG.png"
}
]
},
"serviceList": {
"service": [
{
"serviceType": "urn:schemas-upnp-org:service:RenderingControl:1",
"serviceId": "urn:upnp-org:serviceId:RenderingControl",
"controlURL": "/smp_17_",
"eventSubURL": "/smp_18_",
"SCPDURL": "/smp_16_"
},
{
"serviceType": "urn:schemas-upnp-org:service:ConnectionManager:1",
"serviceId": "urn:upnp-org:serviceId:ConnectionManager",
"controlURL": "/smp_20_",
"eventSubURL": "/smp_21_",
"SCPDURL": "/smp_19_"
},
{
"serviceType": "urn:schemas-upnp-org:service:AVTransport:1",
"serviceId": "urn:upnp-org:serviceId:AVTransport",
"controlURL": "/smp_23_",
"eventSubURL": "/smp_24_",
"SCPDURL": "/smp_22_"
}
]
},
"ProductCap": "Y2014,WebURIPlayable,SeekTRACK_NR,NavigateInPause",
"X_hardwareId": "VEN_0105&DEV_VD0001"
},
"ssdp_location": "https://fake_host:12345/test"
"ssdp_location": "http://10.10.12.34:7676/smp_15_",
"ssdp_nt": null,
"ssdp_udn": "uuid:09896802-00a0-1000-adfd-84a4668d8423",
"ssdp_ext": "",
"ssdp_server": "SHP, UPnP/1.0, Samsung UPnP SDK/1.0",
"ssdp_headers": {
"CACHE-CONTROL": "max-age:1800",
"Date": "Thu, 01 Jan 1970 00:06:48 GMT",
"EXT": "",
"LOCATION": "http://10.10.12.34:7676/smp_15_",
"SERVER": "SHP, UPnP/1.0, Samsung UPnP SDK/1.0",
"ST": "urn:schemas-upnp-org:service:RenderingControl:1",
"USN": "uuid:09896802-00a0-1000-adfd-84a4668d8423::urn:schemas-upnp-org:service:RenderingControl:1",
"Content-Length": "0",
"_host": "10.10.12.34",
"_udn": "uuid:09896802-00a0-1000-adfd-84a4668d8423",
"_location_original": "http://10.10.12.34:7676/smp_15_",
"location": "http://10.10.12.34:7676/smp_15_",
"_timestamp": "2025-04-30T07:30:24.146243",
"_remote_addr": ["10.10.12.34", 52226],
"_port": 52226,
"_local_addr": ["0.0.0.0", 0],
"_source": "search"
},
"ssdp_all_locations": ["http://10.10.12.34:7676/smp_15_"],
"x_homeassistant_matching_domains": ["samsungtv"]
}

View File

@ -70,7 +70,7 @@ RESULT_ALREADY_IN_PROGRESS = "already_in_progress"
MOCK_USER_DATA = {CONF_HOST: "fake_host"}
MOCK_DHCP_DATA = DhcpServiceInfo(
ip="fake_host", macaddress="aabbccddeeff", hostname="fake_hostname"
ip="10.10.12.34", macaddress="aabbccddeeff", hostname="fake_hostname"
)
EXISTING_IP = "192.168.40.221"
MOCK_ZEROCONF_DATA = ZeroconfServiceInfo(
@ -88,7 +88,7 @@ MOCK_ZEROCONF_DATA = ZeroconfServiceInfo(
type="mock_type",
)
MOCK_OLD_ENTRY = {
CONF_HOST: "fake_host",
CONF_HOST: "10.10.12.34",
CONF_IP_ADDRESS: EXISTING_IP,
CONF_METHOD: "legacy",
CONF_PORT: None,
@ -464,11 +464,11 @@ async def test_ssdp(hass: HomeAssistant) -> None:
result["flow_id"], user_input="whatever"
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "fake_model"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_MANUFACTURER] == "Samsung fake_manufacturer"
assert result["data"][CONF_MODEL] == "fake_model"
assert result["result"].unique_id == "0d1cef00-00dc-1000-9c80-4844f7b172de"
assert result["title"] == "UE55H6400"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
assert result["data"][CONF_MODEL] == "UE55H6400"
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
@pytest.mark.usefixtures("remote", "rest_api_failing")
@ -522,11 +522,11 @@ async def test_ssdp_noprefix(hass: HomeAssistant) -> None:
result["flow_id"], user_input="whatever"
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "fake_model"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_MANUFACTURER] == "Samsung fake_manufacturer"
assert result["data"][CONF_MODEL] == "fake_model"
assert result["result"].unique_id == "0d1cef00-00dc-1000-9c80-4844f7b172de"
assert result["title"] == "UE55H6400"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
assert result["data"][CONF_MODEL] == "UE55H6400"
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
@pytest.mark.usefixtures("remotews", "rest_api_failing")
@ -557,11 +557,11 @@ async def test_ssdp_legacy_missing_auth(hass: HomeAssistant) -> None:
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "fake_model"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_MANUFACTURER] == "Samsung fake_manufacturer"
assert result["data"][CONF_MODEL] == "fake_model"
assert result["result"].unique_id == "0d1cef00-00dc-1000-9c80-4844f7b172de"
assert result["title"] == "UE55H6400"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
assert result["data"][CONF_MODEL] == "UE55H6400"
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
@pytest.mark.usefixtures("remotews", "rest_api_failing")
@ -597,13 +597,13 @@ async def test_ssdp_websocket_success_populates_mac_address_and_ssdp_location(
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "Living Room (82GXARRS)"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
assert result["data"][CONF_MANUFACTURER] == "Samsung fake_manufacturer"
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
assert result["data"][CONF_MODEL] == "82GXARRS"
assert (
result["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
== "https://fake_host:12345/test"
== "http://10.10.12.34:7676/smp_15_"
)
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
@ -626,13 +626,13 @@ async def test_ssdp_websocket_success_populates_mac_address_and_main_tv_ssdp_loc
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "Living Room (82GXARRS)"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
assert result["data"][CONF_MANUFACTURER] == "Samsung fake_manufacturer"
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
assert result["data"][CONF_MODEL] == "82GXARRS"
assert (
result["data"][CONF_SSDP_MAIN_TV_AGENT_LOCATION]
== "https://fake_host:12345/tv_agent"
== "http://10.10.12.34:7676/smp_2_"
)
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
@ -677,13 +677,13 @@ async def test_ssdp_encrypted_websocket_success_populates_mac_address_and_ssdp_l
assert result4["type"] is FlowResultType.CREATE_ENTRY
assert result4["title"] == "TV-UE48JU6470 (UE48JU6400)"
assert result4["data"][CONF_HOST] == "fake_host"
assert result4["data"][CONF_HOST] == "10.10.12.34"
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
assert result4["data"][CONF_MANUFACTURER] == "Samsung fake_manufacturer"
assert result4["data"][CONF_MANUFACTURER] == "Samsung Electronics"
assert result4["data"][CONF_MODEL] == "UE48JU6400"
assert (
result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
== "https://fake_host:12345/test"
== "http://10.10.12.34:7676/smp_15_"
)
assert result4["data"][CONF_TOKEN] == "037739871315caef138547b03e348b72"
assert result4["data"][CONF_SESSION_ID] == "1"
@ -881,7 +881,7 @@ async def test_dhcp_wireless(hass: HomeAssistant) -> None:
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "TV-UE48JU6470 (UE48JU6400)"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
assert result["data"][CONF_MANUFACTURER] == "Samsung"
assert result["data"][CONF_MODEL] == "UE48JU6400"
@ -911,7 +911,7 @@ async def test_dhcp_wired(hass: HomeAssistant, rest_api: Mock) -> None:
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "Samsung Frame (43) (UE43LS003)"
assert result["data"][CONF_HOST] == "fake_host"
assert result["data"][CONF_HOST] == "10.10.12.34"
assert result["data"][CONF_MAC] == "aa:ee:tt:hh:ee:rr"
assert result["data"][CONF_MANUFACTURER] == "Samsung"
assert result["data"][CONF_MODEL] == "UE43LS003"
@ -1378,7 +1378,7 @@ async def test_update_missing_model_added_from_ssdp(
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"
assert entry.data[CONF_MODEL] == "fake_model"
assert entry.data[CONF_MODEL] == "UE55H6400"
@pytest.mark.usefixtures("remotews", "rest_api", "remoteencws_failing")
@ -1492,7 +1492,7 @@ async def test_update_missing_mac_unique_id_added_ssdp_location_rendering_st_upd
# Correct ST, ssdp location should change
assert (
entry.data[CONF_SSDP_RENDERING_CONTROL_LOCATION]
== "https://fake_host:12345/test"
== "http://10.10.12.34:7676/smp_15_"
)
assert entry.unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
@ -1526,8 +1526,7 @@ async def test_update_missing_mac_unique_id_added_ssdp_location_main_tv_agent_st
assert entry.data[CONF_MAC] == "aa:bb:aa:aa:aa:aa"
# Main TV Agent ST, ssdp location should change
assert (
entry.data[CONF_SSDP_MAIN_TV_AGENT_LOCATION]
== "https://fake_host:12345/tv_agent"
entry.data[CONF_SSDP_MAIN_TV_AGENT_LOCATION] == "http://10.10.12.34:7676/smp_2_"
)
# Rendering control should not be affected
assert (
@ -1562,7 +1561,7 @@ async def test_update_ssdp_location_rendering_st_updated_from_ssdp(
# Correct ST, ssdp location should be added
assert (
entry.data[CONF_SSDP_RENDERING_CONTROL_LOCATION]
== "https://fake_host:12345/test"
== "http://10.10.12.34:7676/smp_15_"
)
assert entry.unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
@ -1592,8 +1591,7 @@ async def test_update_main_tv_ssdp_location_rendering_st_updated_from_ssdp(
assert entry.data[CONF_MAC] == "aa:bb:aa:aa:aa:aa"
# Correct ST for MainTV, ssdp location should be added
assert (
entry.data[CONF_SSDP_MAIN_TV_AGENT_LOCATION]
== "https://fake_host:12345/tv_agent"
entry.data[CONF_SSDP_MAIN_TV_AGENT_LOCATION] == "http://10.10.12.34:7676/smp_2_"
)
assert entry.unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
@ -1743,7 +1741,7 @@ async def test_update_ssdp_location_unique_id_added_from_ssdp_with_rendering_con
# Correct st
assert (
entry.data[CONF_SSDP_RENDERING_CONTROL_LOCATION]
== "https://fake_host:12345/test"
== "http://10.10.12.34:7676/smp_15_"
)
assert entry.unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
@ -1918,7 +1916,7 @@ async def test_update_incorrect_udn_matching_upnp_udn_unique_id_added_from_ssdp(
entry = MockConfigEntry(
domain=DOMAIN,
data=MOCK_OLD_ENTRY,
unique_id="0d1cef00-00dc-1000-9c80-4844f7b172de",
unique_id="068e7781-006e-1000-bbbf-84a4668d8423",
)
entry.add_to_hass(hass)

View File

@ -154,12 +154,11 @@ async def test_setup_updates_from_ssdp(
assert hass.states.get("media_player.mock_title") == snapshot
assert entity_registry.async_get("media_player.mock_title") == snapshot
assert (
entry.data[CONF_SSDP_MAIN_TV_AGENT_LOCATION]
== "https://fake_host:12345/tv_agent"
entry.data[CONF_SSDP_MAIN_TV_AGENT_LOCATION] == "http://10.10.12.34:7676/smp_2_"
)
assert (
entry.data[CONF_SSDP_RENDERING_CONTROL_LOCATION]
== "https://fake_host:12345/test"
== "http://10.10.12.34:7676/smp_15_"
)