Skip to content

Commit effe8a4

Browse files
authored
Merge pull request #94 from rsocket/more_tests
More tests
2 parents 970febf + c22b6da commit effe8a4

File tree

9 files changed

+107
-11
lines changed

9 files changed

+107
-11
lines changed

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ reactivex==4.0.4
1414
starlette==0.22.0
1515
asyncclick==8.1.3.4
1616
pytest-profiling==1.7.0
17-
pytest-xdist==3.0.2
17+
pytest-xdist==3.0.2
18+
decoy==1.11.1

rsocket/frame.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,7 @@ def exception_to_error_frame(stream_id: int, exception: Exception) -> ErrorFrame
726726
frame.data = ensure_bytes(exception.data)
727727
else:
728728
frame.error_code = ErrorCode.APPLICATION_ERROR
729-
frame.data = str(exception).encode()
729+
frame.data = ensure_bytes(str(exception))
730730

731731
return frame
732732

rsocket/reactivex/reactivex_handler.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22
from datetime import timedelta
33
from typing import Optional, Union, Callable
44

5-
import reactivex
65
from reactivex import Observable, Subject
76

87
from rsocket.error_codes import ErrorCode
98
from rsocket.extensions.composite_metadata import CompositeMetadata
10-
from rsocket.helpers import create_error_future
119
from rsocket.logger import logger
1210
from rsocket.payload import Payload
1311
from rsocket.reactivex.reactivex_channel import ReactivexChannel
@@ -82,7 +80,7 @@ async def request_fire_and_forget(self, payload: Payload):
8280
"""The requester isn't listening for errors. Nothing to do."""
8381

8482
async def request_response(self, payload: Payload) -> Observable:
85-
return reactivex.from_future(create_error_future(RuntimeError('Not implemented')))
83+
raise RuntimeError('Not implemented')
8684

8785
async def request_stream(self, payload: Payload) -> Observable:
8886
raise RuntimeError('Not implemented')

rsocket/request_handler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from reactivestreams.subscriber import Subscriber
88
from rsocket.error_codes import ErrorCode
99
from rsocket.extensions.composite_metadata import CompositeMetadata
10-
from rsocket.helpers import create_error_future
1110
from rsocket.local_typing import Awaitable
1211
from rsocket.logger import logger
1312
from rsocket.payload import Payload
@@ -90,7 +89,7 @@ async def on_metadata_push(self, payload: Payload):
9089
"""Nothing by default"""
9190

9291
async def request_response(self, payload: Payload) -> Awaitable[Payload]:
93-
return create_error_future(RuntimeError('Not implemented'))
92+
raise RuntimeError('Not implemented')
9493

9594
async def request_stream(self, payload: Payload) -> Publisher:
9695
raise RuntimeError('Not implemented')

rsocket/rx_support/rx_handler.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
from datetime import timedelta
33
from typing import Optional, Union, Callable
44

5-
import rx
65
from rx import Observable
76
from rx.core.typing import Subject
87

98
from rsocket.error_codes import ErrorCode
109
from rsocket.extensions.composite_metadata import CompositeMetadata
11-
from rsocket.helpers import create_error_future
1210
from rsocket.logger import logger
1311
from rsocket.payload import Payload
1412
from rsocket.rx_support.rx_channel import RxChannel
@@ -83,7 +81,7 @@ async def request_fire_and_forget(self, payload: Payload):
8381
"""The requester isn't listening for errors. Nothing to do."""
8482

8583
async def request_response(self, payload: Payload) -> Observable:
86-
return rx.from_future(create_error_future(RuntimeError('Not implemented')))
84+
raise RuntimeError('Not implemented')
8785

8886
async def request_stream(self, payload: Payload) -> Observable:
8987
raise RuntimeError('Not implemented')

tests/rsocket/test_cli_command.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
import tempfile
44

55
import pytest
6+
from decoy import Decoy
67

8+
from rsocket.awaitable.awaitable_rsocket import AwaitableRSocket
79
from rsocket.cli.command import parse_uri, build_composite_metadata, create_request_payload, get_metadata_value, \
810
create_setup_payload, normalize_data, normalize_limit_rate, RequestType, get_request_type, parse_headers, \
9-
normalize_metadata_mime_type
11+
normalize_metadata_mime_type, execute_request
1012
from rsocket.extensions.helpers import route, authenticate_simple, authenticate_bearer
1113
from rsocket.extensions.mimetypes import WellKnownMimeTypes
1214
from rsocket.frame import MAX_REQUEST_N
15+
from rsocket.helpers import create_future
1316
from rsocket.payload import Payload
1417
from tests.rsocket.helpers import create_data
1518

@@ -175,3 +178,43 @@ def test_normalize_metadata_mime_type(composite_items, metadata_mime_type, expec
175178
actual = normalize_metadata_mime_type(composite_items, metadata_mime_type)
176179

177180
assert actual == expected
181+
182+
183+
async def test_execute_request_response(decoy: Decoy):
184+
client = decoy.mock(cls=AwaitableRSocket)
185+
186+
decoy.when(await client.request_response(Payload())).then_return(Payload(b'abc'))
187+
188+
result = await execute_request(client, RequestType.response, 3, Payload())
189+
190+
assert result.data == b'abc'
191+
192+
193+
async def test_execute_request_stream(decoy: Decoy):
194+
client = decoy.mock(cls=AwaitableRSocket)
195+
196+
decoy.when(await client.request_stream(Payload(), limit_rate=3)).then_return([Payload(b'abc')])
197+
198+
result = await execute_request(client, RequestType.stream, 3, Payload())
199+
200+
assert result[0].data == b'abc'
201+
202+
203+
async def test_execute_request_channel(decoy: Decoy):
204+
client = decoy.mock(cls=AwaitableRSocket)
205+
206+
decoy.when(await client.request_channel(Payload(), limit_rate=3)).then_return([Payload(b'abc')])
207+
208+
result = await execute_request(client, RequestType.channel, 3, Payload())
209+
210+
assert result[0].data == b'abc'
211+
212+
213+
async def test_execute_request_fnf(decoy: Decoy):
214+
client = decoy.mock(cls=AwaitableRSocket)
215+
216+
decoy.when(client.fire_and_forget(Payload())).then_return(create_future(None))
217+
218+
result = await execute_request(client, RequestType.fnf, 3, Payload())
219+
220+
assert result is None
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from asyncio import Queue
2+
3+
from rsocket.streams.helpers import async_generator_from_queue
4+
5+
6+
async def test_async_generator_from_queue():
7+
queue = Queue()
8+
9+
for i in range(10):
10+
queue.put_nowait(i)
11+
12+
queue.put_nowait(None)
13+
14+
async def collect():
15+
results = []
16+
async for i in async_generator_from_queue(queue):
17+
results.append(i)
18+
19+
return results
20+
21+
r = await collect()
22+
23+
assert r == list(range(10))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import pytest
2+
3+
from rsocket.payload import Payload
4+
from rsocket.rx_support.rx_handler import BaseRxHandler
5+
6+
7+
async def test_rx_handler():
8+
handler = BaseRxHandler()
9+
10+
with pytest.raises(Exception):
11+
await handler.request_channel(Payload())
12+
13+
with pytest.raises(Exception):
14+
await handler.request_response(Payload())
15+
16+
with pytest.raises(Exception):
17+
await handler.request_channel(Payload())
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import pytest
2+
3+
from rsocket.payload import Payload
4+
from rsocket.reactivex.reactivex_handler import BaseReactivexHandler
5+
6+
7+
async def test_reactivex_handler():
8+
handler = BaseReactivexHandler()
9+
10+
with pytest.raises(Exception):
11+
await handler.request_channel(Payload())
12+
13+
with pytest.raises(Exception):
14+
await handler.request_response(Payload())
15+
16+
with pytest.raises(Exception):
17+
await handler.request_channel(Payload())

0 commit comments

Comments
 (0)