Skip to content

Commit 5962476

Browse files
committed
Raise a token expiry specific error
Distinguish between TimeoutError and a token expired event by raising a custom error.
1 parent 2aeea01 commit 5962476

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

src/relay_listener.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ class CredentialNotAvailableError(RuntimeError):
4545
pass
4646

4747

48+
class RelayTokenExpiredError(RuntimeError):
49+
pass
50+
51+
4852
class RelayListener:
4953
"""
5054
Socket Listener for Azure Relay.
@@ -86,15 +90,15 @@ async def listen(self):
8690
async with self._connect(connection_url) as websocket:
8791
logger.info("Connected - waiting for worklist actions...")
8892
await self._listen_on_connection(websocket, refresh_at)
89-
except asyncio.TimeoutError:
93+
except RelayTokenExpiredError:
9094
logger.info("Refreshing Azure Relay connection before expiry.")
9195
continue
9296

9397
async def _listen_on_connection(self, websocket, refresh_at: int):
9498
while True:
9599
timeout = refresh_at - time.time()
96100
if timeout <= 0:
97-
raise asyncio.TimeoutError
101+
raise RelayTokenExpiredError("Azure Relay token expired, refreshing.")
98102

99103
try:
100104
message = await asyncio.wait_for(websocket.recv(), timeout=timeout)

tests/test_relay_listener.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from websockets.frames import Close, CloseCode
99

1010
from models import WorklistItem
11-
from relay_listener import RelayListener, RelayURI, main, verify_credentials
11+
from relay_listener import RelayListener, RelayTokenExpiredError, RelayURI, main, verify_credentials
1212

1313

1414
class TestRelayListener:
@@ -40,7 +40,7 @@ async def test_listen_on_connection_echo(self, storage_instance):
4040
websocket = AsyncMock()
4141
websocket.recv.side_effect = [
4242
json.dumps({"accept": {"address": "wss://accept-url"}}),
43-
asyncio.TimeoutError(),
43+
RelayTokenExpiredError("Azure Relay token expired"),
4444
]
4545

4646
client_ws = AsyncMock()
@@ -51,7 +51,7 @@ async def test_listen_on_connection_echo(self, storage_instance):
5151
client_cm.__aexit__.return_value = None
5252

5353
with patch("relay_listener.connect", return_value=client_cm) as mock_connect:
54-
with pytest.raises(asyncio.TimeoutError):
54+
with pytest.raises(RelayTokenExpiredError):
5555
await subject._listen_on_connection(
5656
websocket,
5757
refresh_at=9999999999,
@@ -259,7 +259,7 @@ async def test_listen_refreshes_connection_after_timeout(
259259
patch.object(
260260
subject,
261261
"_listen_on_connection",
262-
side_effect=[asyncio.TimeoutError(), KeyboardInterrupt()],
262+
side_effect=[RelayTokenExpiredError(), KeyboardInterrupt()],
263263
),
264264
):
265265
with pytest.raises(KeyboardInterrupt):

0 commit comments

Comments
 (0)