|
1 | 1 | import io
|
2 | 2 | import sys
|
3 | 3 | import tempfile
|
| 4 | +from asyncio import sleep |
4 | 5 |
|
5 | 6 | import pytest
|
| 7 | +from asyncclick.testing import CliRunner |
6 | 8 | from decoy import Decoy
|
7 | 9 |
|
8 | 10 | from rsocket.awaitable.awaitable_rsocket import AwaitableRSocket
|
9 | 11 | from rsocket.cli.command import parse_uri, build_composite_metadata, create_request_payload, get_metadata_value, \
|
10 | 12 | create_setup_payload, normalize_data, normalize_limit_rate, RequestType, get_request_type, parse_headers, \
|
11 |
| - normalize_metadata_mime_type, execute_request |
| 13 | + normalize_metadata_mime_type, execute_request, command |
12 | 14 | from rsocket.extensions.helpers import route, authenticate_simple, authenticate_bearer
|
13 | 15 | from rsocket.extensions.mimetypes import WellKnownMimeTypes
|
14 | 16 | from rsocket.frame import MAX_REQUEST_N
|
15 |
| -from rsocket.helpers import create_future |
| 17 | +from rsocket.helpers import create_future, create_response |
16 | 18 | from rsocket.payload import Payload
|
| 19 | +from rsocket.request_handler import BaseRequestHandler |
17 | 20 | from tests.rsocket.helpers import create_data
|
| 21 | +from tests.tools.fixtures_quart import pipe_factory_quart_websocket |
| 22 | +from tests.tools.fixtures_tcp import pipe_factory_tcp |
18 | 23 |
|
19 | 24 |
|
20 | 25 | def test_parse_uri():
|
@@ -218,3 +223,37 @@ async def test_execute_request_fnf(decoy: Decoy):
|
218 | 223 | result = await execute_request(client, RequestType.fnf, 3, Payload())
|
219 | 224 |
|
220 | 225 | assert result is None
|
| 226 | + |
| 227 | + |
| 228 | +async def test_execute_command_tcp_request(unused_tcp_port): |
| 229 | + class Handler(BaseRequestHandler): |
| 230 | + async def request_response(self, request: Payload): |
| 231 | + await sleep(4) |
| 232 | + return create_response(b'response from test') |
| 233 | + |
| 234 | + async with pipe_factory_tcp(unused_tcp_port, |
| 235 | + client_arguments={}, |
| 236 | + server_arguments={'handler_factory': Handler}): |
| 237 | + runner = CliRunner() |
| 238 | + uri = f'tcp://localhost:{unused_tcp_port}' |
| 239 | + result = await runner.invoke(command, ['--request', uri]) |
| 240 | + |
| 241 | + assert result.stdout == 'response from test\n' |
| 242 | + assert result.exit_code == 0 |
| 243 | + |
| 244 | + |
| 245 | +async def test_execute_command_websocket_request(unused_tcp_port): |
| 246 | + class Handler(BaseRequestHandler): |
| 247 | + async def request_response(self, request: Payload): |
| 248 | + await sleep(4) |
| 249 | + return create_response(b'response from test') |
| 250 | + |
| 251 | + async with pipe_factory_quart_websocket(unused_tcp_port, |
| 252 | + client_arguments={}, |
| 253 | + server_arguments={'handler_factory': Handler}): |
| 254 | + runner = CliRunner() |
| 255 | + uri = f'ws://localhost:{unused_tcp_port}' |
| 256 | + result = await runner.invoke(command, ['--request', uri]) |
| 257 | + |
| 258 | + assert result.stdout == 'response from test\n' |
| 259 | + assert result.exit_code == 0 |
0 commit comments