mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-08-06 10:44:04 +00:00
Fix port-override for aes&klap transports (#734)
* Fix port-override for aes&klap transports * Add tests for port override
This commit is contained in:
@@ -209,6 +209,17 @@ async def test_passthrough_errors(mocker, error_code):
|
||||
await transport.send(json_dumps(request))
|
||||
|
||||
|
||||
async def test_port_override():
|
||||
"""Test that port override sets the app_url."""
|
||||
host = "127.0.0.1"
|
||||
config = DeviceConfig(
|
||||
host, credentials=Credentials("foo", "bar"), port_override=12345
|
||||
)
|
||||
transport = AesTransport(config=config)
|
||||
|
||||
assert str(transport._app_url) == "http://127.0.0.1:12345/app"
|
||||
|
||||
|
||||
class MockAesDevice:
|
||||
class _mock_response:
|
||||
def __init__(self, status, json: dict):
|
||||
@@ -256,7 +267,7 @@ class MockAesDevice:
|
||||
elif json["method"] == "login_device":
|
||||
return await self._return_login_response(url, json)
|
||||
else:
|
||||
assert str(url) == f"http://{self.host}/app?token={self.token}"
|
||||
assert str(url) == f"http://{self.host}:80/app?token={self.token}"
|
||||
return await self._return_send_response(url, json)
|
||||
|
||||
async def _return_handshake_response(self, url: URL, json: Dict[str, Any]):
|
||||
|
@@ -323,14 +323,14 @@ async def test_handshake(
|
||||
async def _return_handshake_response(url: URL, params=None, data=None, *_, **__):
|
||||
nonlocal client_seed, server_seed, device_auth_hash
|
||||
|
||||
if str(url) == "http://127.0.0.1/app/handshake1":
|
||||
if str(url) == "http://127.0.0.1:80/app/handshake1":
|
||||
client_seed = data
|
||||
seed_auth_hash = _sha256(
|
||||
seed_auth_hash_calc1(client_seed, server_seed, device_auth_hash)
|
||||
)
|
||||
|
||||
return _mock_response(200, server_seed + seed_auth_hash)
|
||||
elif str(url) == "http://127.0.0.1/app/handshake2":
|
||||
elif str(url) == "http://127.0.0.1:80/app/handshake2":
|
||||
seed_auth_hash = _sha256(
|
||||
seed_auth_hash_calc2(client_seed, server_seed, device_auth_hash)
|
||||
)
|
||||
@@ -367,14 +367,14 @@ async def test_query(mocker):
|
||||
async def _return_response(url: URL, params=None, data=None, *_, **__):
|
||||
nonlocal client_seed, server_seed, device_auth_hash, seq
|
||||
|
||||
if str(url) == "http://127.0.0.1/app/handshake1":
|
||||
if str(url) == "http://127.0.0.1:80/app/handshake1":
|
||||
client_seed = data
|
||||
client_seed_auth_hash = _sha256(data + device_auth_hash)
|
||||
|
||||
return _mock_response(200, server_seed + client_seed_auth_hash)
|
||||
elif str(url) == "http://127.0.0.1/app/handshake2":
|
||||
elif str(url) == "http://127.0.0.1:80/app/handshake2":
|
||||
return _mock_response(200, b"")
|
||||
elif str(url) == "http://127.0.0.1/app/request":
|
||||
elif str(url) == "http://127.0.0.1:80/app/request":
|
||||
encryption_session = KlapEncryptionSession(
|
||||
protocol._transport._encryption_session.local_seed,
|
||||
protocol._transport._encryption_session.remote_seed,
|
||||
@@ -419,16 +419,16 @@ async def test_authentication_failures(mocker, response_status, expectation):
|
||||
async def _return_response(url: URL, params=None, data=None, *_, **__):
|
||||
nonlocal client_seed, server_seed, device_auth_hash, response_status
|
||||
|
||||
if str(url) == "http://127.0.0.1/app/handshake1":
|
||||
if str(url) == "http://127.0.0.1:80/app/handshake1":
|
||||
client_seed = data
|
||||
client_seed_auth_hash = _sha256(data + device_auth_hash)
|
||||
|
||||
return _mock_response(
|
||||
response_status[0], server_seed + client_seed_auth_hash
|
||||
)
|
||||
elif str(url) == "http://127.0.0.1/app/handshake2":
|
||||
elif str(url) == "http://127.0.0.1:80/app/handshake2":
|
||||
return _mock_response(response_status[1], b"")
|
||||
elif str(url) == "http://127.0.0.1/app/request":
|
||||
elif str(url) == "http://127.0.0.1:80/app/request":
|
||||
return _mock_response(response_status[2], b"")
|
||||
|
||||
mocker.patch.object(aiohttp.ClientSession, "post", side_effect=_return_response)
|
||||
@@ -438,3 +438,14 @@ async def test_authentication_failures(mocker, response_status, expectation):
|
||||
|
||||
with expectation:
|
||||
await protocol.query({})
|
||||
|
||||
|
||||
async def test_port_override():
|
||||
"""Test that port override sets the app_url."""
|
||||
host = "127.0.0.1"
|
||||
config = DeviceConfig(
|
||||
host, credentials=Credentials("foo", "bar"), port_override=12345
|
||||
)
|
||||
transport = KlapTransport(config=config)
|
||||
|
||||
assert str(transport._app_url) == "http://127.0.0.1:12345/app"
|
||||
|
Reference in New Issue
Block a user