"""The tests for the hassio component.""" from aiohttp.hdrs import X_FORWARDED_FOR, X_FORWARDED_HOST, X_FORWARDED_PROTO import pytest @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ping?index=1"), ("core", "index.html"), ("local", "panel/config"), ("jk_921", "editor.php?idx=3&ping=5"), ("fsadjf10312", ""), ], ) async def test_ingress_request_get(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.get( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]), text="test", ) resp = await hassio_client.get( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we got right response assert resp.status == 200 body = await resp.text() assert body == "test" # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ping?index=1"), ("core", "index.html"), ("local", "panel/config"), ("jk_921", "editor.php?idx=3&ping=5"), ("fsadjf10312", ""), ], ) async def test_ingress_request_post(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.post( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]), text="test", ) resp = await hassio_client.post( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we got right response assert resp.status == 200 body = await resp.text() assert body == "test" # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ping?index=1"), ("core", "index.html"), ("local", "panel/config"), ("jk_921", "editor.php?idx=3&ping=5"), ("fsadjf10312", ""), ], ) async def test_ingress_request_put(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.put( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]), text="test", ) resp = await hassio_client.put( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we got right response assert resp.status == 200 body = await resp.text() assert body == "test" # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ping?index=1"), ("core", "index.html"), ("local", "panel/config"), ("jk_921", "editor.php?idx=3&ping=5"), ("fsadjf10312", ""), ], ) async def test_ingress_request_delete(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.delete( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]), text="test", ) resp = await hassio_client.delete( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we got right response assert resp.status == 200 body = await resp.text() assert body == "test" # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ping?index=1"), ("core", "index.html"), ("local", "panel/config"), ("jk_921", "editor.php?idx=3&ping=5"), ("fsadjf10312", ""), ], ) async def test_ingress_request_patch(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.patch( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]), text="test", ) resp = await hassio_client.patch( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we got right response assert resp.status == 200 body = await resp.text() assert body == "test" # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ping?index=1"), ("core", "index.html"), ("local", "panel/config"), ("jk_921", "editor.php?idx=3&ping=5"), ("fsadjf10312", ""), ], ) async def test_ingress_request_options(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.options( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]), text="test", ) resp = await hassio_client.options( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we got right response assert resp.status == 200 body = await resp.text() assert body == "test" # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] @pytest.mark.parametrize( "build_type", [ ("a3_vl", "test/beer/ws"), ("core", "ws.php"), ("local", "panel/config/stream"), ("jk_921", "hulk"), ("demo", "ws/connection?id=9&token=SJAKWS283"), ], ) async def test_ingress_websocket(hassio_client, build_type, aioclient_mock): """Test no auth needed for .""" aioclient_mock.get( "http://127.0.0.1/ingress/{}/{}".format(build_type[0], build_type[1]) ) # Ignore error because we can setup a full IO infrastructure await hassio_client.ws_connect( "/api/hassio_ingress/{}/{}".format(build_type[0], build_type[1]), headers={"X-Test-Header": "beer"}, ) # Check we forwarded command assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" assert aioclient_mock.mock_calls[-1][3][ "X-Ingress-Path" ] == "/api/hassio_ingress/{}".format(build_type[0]) assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer" assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO]