mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-19 10:47:15 +00:00

* Finish out effort of adding and enabling blockbuster * Skip getting addon file size until securetar fixed * Fix test for devcontainer and blocking I/O * Fix docker fixture and load_config to post_init
105 lines
3.3 KiB
Python
105 lines
3.3 KiB
Python
"""Test ingress."""
|
|
|
|
from datetime import timedelta
|
|
from pathlib import Path
|
|
from unittest.mock import ANY, patch
|
|
|
|
from supervisor.const import IngressSessionData, IngressSessionDataUser
|
|
from supervisor.coresys import CoreSys
|
|
from supervisor.ingress import Ingress
|
|
from supervisor.utils.dt import utc_from_timestamp
|
|
from supervisor.utils.json import read_json_file
|
|
|
|
|
|
def test_session_handling(coresys: CoreSys):
|
|
"""Create and test session."""
|
|
session = coresys.ingress.create_session()
|
|
validate = coresys.ingress.sessions[session]
|
|
|
|
assert session
|
|
assert validate
|
|
|
|
assert coresys.ingress.validate_session(session)
|
|
assert coresys.ingress.sessions[session] != validate
|
|
|
|
not_valid = utc_from_timestamp(validate) - timedelta(minutes=20)
|
|
coresys.ingress.sessions[session] = not_valid.timestamp()
|
|
assert not coresys.ingress.validate_session(session)
|
|
assert not coresys.ingress.validate_session("invalid session")
|
|
|
|
session_data = coresys.ingress.get_session_data(session)
|
|
assert session_data is None
|
|
|
|
|
|
def test_session_handling_with_session_data(coresys: CoreSys):
|
|
"""Create and test session."""
|
|
session = coresys.ingress.create_session(
|
|
IngressSessionData(IngressSessionDataUser("some-id"))
|
|
)
|
|
|
|
assert session
|
|
|
|
session_data = coresys.ingress.get_session_data(session)
|
|
assert session_data.user.id == "some-id"
|
|
|
|
|
|
async def test_save_on_unload(coresys: CoreSys):
|
|
"""Test called save on unload."""
|
|
coresys.ingress.create_session()
|
|
await coresys.ingress.unload()
|
|
|
|
assert coresys.ingress.save_data.called
|
|
|
|
|
|
async def test_dynamic_ports(coresys: CoreSys):
|
|
"""Test dyanmic port handling."""
|
|
port_test1 = await coresys.ingress.get_dynamic_port("test1")
|
|
|
|
assert port_test1
|
|
assert coresys.ingress.save_data.called
|
|
assert port_test1 == await coresys.ingress.get_dynamic_port("test1")
|
|
|
|
port_test2 = await coresys.ingress.get_dynamic_port("test2")
|
|
|
|
assert port_test2
|
|
assert port_test2 != port_test1
|
|
|
|
assert port_test2 > 62000
|
|
assert port_test2 < 65500
|
|
assert port_test1 > 62000
|
|
assert port_test1 < 65500
|
|
|
|
|
|
async def test_ingress_save_data(coresys: CoreSys, tmp_supervisor_data: Path):
|
|
"""Test saving ingress data to file."""
|
|
config_file = tmp_supervisor_data / "ingress.json"
|
|
with patch("supervisor.ingress.FILE_HASSIO_INGRESS", new=config_file):
|
|
ingress = await Ingress(coresys).load_config()
|
|
session = ingress.create_session(
|
|
IngressSessionData(IngressSessionDataUser("123", "Test", "test"))
|
|
)
|
|
await ingress.save_data()
|
|
|
|
def get_config():
|
|
assert config_file.exists()
|
|
return read_json_file(config_file)
|
|
|
|
assert await coresys.run_in_executor(get_config) == {
|
|
"session": {session: ANY},
|
|
"session_data": {
|
|
session: {"user": {"id": "123", "displayname": "Test", "username": "test"}}
|
|
},
|
|
"ports": {},
|
|
}
|
|
|
|
|
|
async def test_ingress_reload_ignore_none_data(coresys: CoreSys):
|
|
"""Test reloading ingress does not add None for session data and create errors."""
|
|
session = coresys.ingress.create_session()
|
|
assert session in coresys.ingress.sessions
|
|
assert session not in coresys.ingress.sessions_data
|
|
|
|
await coresys.ingress.reload()
|
|
assert session in coresys.ingress.sessions
|
|
assert session not in coresys.ingress.sessions_data
|