Skip to content

Commit 36288ca

Browse files
committed
Added tests for RpcAmqpClient
1 parent a758a15 commit 36288ca

File tree

2 files changed

+78
-4
lines changed

2 files changed

+78
-4
lines changed

tests/amqp/test_rpc_client.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import pytest
2+
from sage_utils.amqp.clients import RpcAmqpClient
3+
from sage_utils.amqp.extension import AmqpExtension
4+
from sage_utils.constants import VALIDATION_ERROR
5+
from sage_utils.wrappers import Response
6+
7+
from tests.fixtures import Application, FakeConfig, FakeRegisterMicroserviceWorker
8+
9+
10+
REQUEST_QUEUE = FakeRegisterMicroserviceWorker.QUEUE_NAME
11+
REQUEST_EXCHANGE = FakeRegisterMicroserviceWorker.REQUEST_EXCHANGE_NAME
12+
RESPONSE_EXCHANGE_NAME = FakeRegisterMicroserviceWorker.RESPONSE_EXCHANGE_NAME
13+
VALIDATION_ERROR_DECR = FakeRegisterMicroserviceWorker.ERROR_DESCRIPTION
14+
15+
16+
@pytest.mark.asyncio
17+
async def test_rpc_amqp_client_returns_ok(event_loop):
18+
app = Application(config=FakeConfig(), loop=event_loop)
19+
register_worker = FakeRegisterMicroserviceWorker(app)
20+
extension = AmqpExtension(app)
21+
extension.register_worker(register_worker)
22+
23+
await extension.init(event_loop)
24+
25+
client = RpcAmqpClient(
26+
app=app,
27+
routing_key=REQUEST_QUEUE,
28+
request_exchange=REQUEST_EXCHANGE,
29+
response_queue='',
30+
response_exchange=RESPONSE_EXCHANGE_NAME
31+
)
32+
response = await client.send(payload={'name': 'microservice', 'version': '1.0.0'})
33+
34+
assert Response.CONTENT_FIELD_NAME in response.keys()
35+
assert response[Response.CONTENT_FIELD_NAME] == 'OK'
36+
37+
assert Response.EVENT_FIELD_NAME in response.keys()
38+
assert response[Response.EVENT_FIELD_NAME] is None
39+
40+
await extension.deinit(event_loop)
41+
42+
43+
@pytest.mark.asyncio
44+
async def test_rpc_amqp_client_returns_an_error(event_loop):
45+
app = Application(config=FakeConfig(), loop=event_loop)
46+
register_worker = FakeRegisterMicroserviceWorker(app)
47+
extension = AmqpExtension(app)
48+
extension.register_worker(register_worker)
49+
50+
await extension.init(event_loop)
51+
52+
client = RpcAmqpClient(
53+
app=app,
54+
routing_key=REQUEST_QUEUE,
55+
request_exchange=REQUEST_EXCHANGE,
56+
response_queue='',
57+
response_exchange=RESPONSE_EXCHANGE_NAME
58+
)
59+
response = await client.send(payload={})
60+
61+
assert Response.ERROR_FIELD_NAME in response.keys()
62+
assert 'message' in response[Response.ERROR_FIELD_NAME].keys()
63+
assert response[Response.ERROR_FIELD_NAME]['message'] == VALIDATION_ERROR_DECR
64+
65+
assert 'type' in response[Response.ERROR_FIELD_NAME].keys()
66+
assert response[Response.ERROR_FIELD_NAME]['type'] == VALIDATION_ERROR
67+
68+
assert Response.EVENT_FIELD_NAME in response.keys()
69+
assert response[Response.EVENT_FIELD_NAME] is None
70+
71+
await extension.deinit(event_loop)

tests/fixtures.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import os
23
import json
34

@@ -14,15 +15,16 @@ def get(self, key, default=None):
1415

1516
class Application(object):
1617

17-
def __init__(self, config=None):
18+
def __init__(self, config=None, loop=None):
1819
super(Application, self).__init__()
1920
self.config = config
21+
self.loop = loop or asyncio.get_event_loop()
2022

2123

2224
class BaseWorker(AmqpWorker):
2325
QUEUE_NAME = 'process-request'
24-
REQUEST_EXCHANGE_NAME = 'amqp.direct'
25-
RESPONSE_EXCHANGE_NAME = 'amqp.direct'
26+
REQUEST_EXCHANGE_NAME = 'amq.direct'
27+
RESPONSE_EXCHANGE_NAME = 'amq.direct'
2628
CONTENT_TYPE = 'application/json'
2729

2830
def generate_response(self, data):
@@ -67,10 +69,11 @@ async def run(self, *args, **kwargs):
6769

6870
class FakeRegisterMicroserviceWorker(BaseWorker):
6971
QUEUE_NAME = 'microservice.register'
72+
ERROR_DESCRIPTION = "Name and version must be specified."
7073

7174
def generate_response(self, raw_data):
7275
data = json.loads(raw_data.strip())
7376

7477
if 'name' not in data.keys() and 'version' not in data.keys():
75-
return Response.from_error(VALIDATION_ERROR, "Name and version must be specified.")
78+
return Response.from_error(VALIDATION_ERROR, self.ERROR_DESCRIPTION)
7679
return Response.with_content("OK")

0 commit comments

Comments
 (0)