|
5 | 5 |
|
6 | 6 | from reactivestreams.subscriber import DefaultSubscriber
|
7 | 7 | from rsocket.awaitable.awaitable_rsocket import AwaitableRSocket
|
| 8 | +from rsocket.error_codes import ErrorCode |
8 | 9 | from rsocket.extensions.authentication import Authentication, AuthenticationSimple
|
9 | 10 | from rsocket.extensions.composite_metadata import CompositeMetadata
|
10 | 11 | from rsocket.extensions.helpers import route, composite, authenticate_simple
|
11 | 12 | from rsocket.extensions.mimetypes import WellKnownMimeTypes
|
12 | 13 | from rsocket.helpers import create_response
|
13 | 14 | from rsocket.payload import Payload
|
| 15 | +from rsocket.request_handler import BaseRequestHandler |
14 | 16 | from rsocket.routing.request_router import RequestRouter
|
15 | 17 | from rsocket.routing.routing_request_handler import RoutingRequestHandler
|
16 | 18 | from rsocket.rx_support.rx_rsocket import RxRSocket
|
@@ -357,3 +359,33 @@ def handler_factory():
|
357 | 359 | 'pass'))))
|
358 | 360 |
|
359 | 361 | assert result.data == b'result'
|
| 362 | + |
| 363 | + |
| 364 | +@pytest.mark.allow_error_log(regex_filter='(RSocket error REJECTED_SETUP|Setup error)') |
| 365 | +async def test_invalid_metadata_for_routing(lazy_pipe): |
| 366 | + router = RequestRouter() |
| 367 | + |
| 368 | + async def authenticate(path: str, authentication: Authentication): |
| 369 | + if not isinstance(authentication, AuthenticationSimple) or authentication.password != b'pass': |
| 370 | + raise Exception('Invalid credentials') |
| 371 | + |
| 372 | + error_wait = asyncio.Event() |
| 373 | + |
| 374 | + def client_handler_factory(): |
| 375 | + class ClientHandler(BaseRequestHandler): |
| 376 | + async def on_error(self, error_code: ErrorCode, payload: Payload): |
| 377 | + error_wait.set() |
| 378 | + |
| 379 | + return ClientHandler() |
| 380 | + |
| 381 | + @router.response('test.path') |
| 382 | + async def response(): |
| 383 | + return create_response(b'result') |
| 384 | + |
| 385 | + def handler_factory(): |
| 386 | + return RoutingRequestHandler(router, authentication_verifier=authenticate) |
| 387 | + |
| 388 | + async with lazy_pipe( |
| 389 | + client_arguments={'handler_factory': client_handler_factory}, |
| 390 | + server_arguments={'handler_factory': handler_factory}) as (server, client): |
| 391 | + await error_wait.wait() |
0 commit comments