Skip to content

Commit 58daaa7

Browse files
committed
Adjusting variable names and adding a new test case for connection alive state
1 parent 7401518 commit 58daaa7

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

packages/stompman/stompman/connection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
@dataclass(kw_only=True)
1616
class AbstractConnection(Protocol):
17-
last_read_time_ms: float | None = field(init=False, default=None)
17+
last_read_time: float | None = field(init=False, default=None)
1818

1919
@classmethod
2020
async def connect(
@@ -103,7 +103,7 @@ async def read_frames(self) -> AsyncGenerator[AnyServerFrame, None]:
103103
raw_frames = await asyncio.wait_for(
104104
self._read_non_empty_bytes(self.read_max_chunk_size), timeout=self.read_timeout
105105
)
106-
self.last_read_time_ms = time.time()
106+
self.last_read_time = time.time()
107107

108108
for frame in cast("Iterator[AnyServerFrame]", parser.parse_frames_from_chunk(raw_frames)):
109109
yield frame

packages/stompman/stompman/connection_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ class ActiveConnectionState:
2929
server_heartbeat: Heartbeat
3030

3131
def is_alive(self) -> bool:
32-
if not (last_read_time_ms := self.connection.last_read_time_ms):
32+
if not (last_read_time := self.connection.last_read_time):
3333
return True
34-
return (self.server_heartbeat.will_send_interval_ms / 1000) > (time.time() - last_read_time_ms)
34+
return (self.server_heartbeat.will_send_interval_ms / 1000) > (time.time() - last_read_time)
3535

3636

3737
@dataclass(kw_only=True, slots=True)

packages/stompman/test_stompman/test_connection_manager.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
import time
23
from collections.abc import AsyncGenerator, AsyncIterable
34
from ssl import SSLContext
45
from typing import Literal, Self
@@ -7,6 +8,7 @@
78
import pytest
89
from stompman import (
910
AnyServerFrame,
11+
Client,
1012
ConnectedFrame,
1113
ConnectFrame,
1214
ConnectionLostError,
@@ -16,11 +18,17 @@
1618
FailedAllWriteAttemptsError,
1719
Heartbeat,
1820
MessageFrame,
21+
ReceiptFrame,
1922
)
2023
from stompman.connection_lifespan import EstablishedConnectionResult
2124
from stompman.connection_manager import ActiveConnectionState
2225

23-
from test_stompman.conftest import BaseMockConnection, EnrichedConnectionManager, build_dataclass
26+
from test_stompman.conftest import (
27+
BaseMockConnection,
28+
EnrichedConnectionManager,
29+
build_dataclass,
30+
create_spying_connection,
31+
)
2432

2533
pytestmark = [pytest.mark.anyio, pytest.mark.usefixtures("mock_sleep")]
2634

@@ -347,3 +355,16 @@ class MockConnection(BaseMockConnection):
347355
async def test_maybe_write_frame_ok() -> None:
348356
async with EnrichedConnectionManager(connection_class=BaseMockConnection) as manager:
349357
assert await manager.maybe_write_frame(build_dataclass(ConnectFrame))
358+
359+
360+
@pytest.mark.parametrize("is_alive", [True, False])
361+
async def test_connection_alive(is_alive: bool) -> None: # noqa: FBT001
362+
connection_class, _ = create_spying_connection(
363+
[ConnectedFrame(headers={"version": Client.PROTOCOL_VERSION, "heart-beat": "1000,1000"})],
364+
[],
365+
[build_dataclass(ReceiptFrame)],
366+
)
367+
connection_manager = await EnrichedConnectionManager(connection_class=connection_class).__aenter__()
368+
assert connection_manager._active_connection_state
369+
connection_manager._active_connection_state.connection.last_read_time = time.time() - 1 + is_alive
370+
assert connection_manager._active_connection_state.is_alive() == is_alive

0 commit comments

Comments
 (0)