def test_receive(self): """ The good case. Should return whatever handler.message_received returns. """ connector = HttpConnector(self.event_loop) ok = { 'uuid': str(uuid.uuid4()), 'recipient': PUBLIC_KEY, 'sender': PUBLIC_KEY, 'reply_port': 1908, 'version': self.version, } seal = get_seal(ok, PRIVATE_KEY) ok['seal'] = seal ok['message'] = 'ok' raw = json.dumps(ok).encode('utf-8') sender = '192.168.0.1' handler = Node(PUBLIC_KEY, PRIVATE_KEY, self.event_loop, connector, 1908) handler.message_received = mock.MagicMock() connector.receive(raw, sender, handler) msg = from_dict(ok) handler.message_received.assert_called_once_with(msg, 'http', sender, msg.reply_port)
def test_handle_request_causes_exception(self): """ A request that raises an exception causes a 500 response. """ mockMessage = mock.MagicMock() mockMessage.method = 'POST' mockMessage.version = '1.1' mockPayload = mock.MagicMock() @asyncio.coroutine def faux_read(*args, **kwargs): return 'raw_data' mockPayload.read = mock.MagicMock(side_effect=faux_read) connector = HttpConnector(self.event_loop) def faux_receive(*args, **kwargs): raise ValueError('Boom! Something went wrong.') connector.receive = mock.MagicMock(side_effect=faux_receive) node = Node(PUBLIC_KEY, PRIVATE_KEY, self.event_loop, connector, 1908) hrh = HttpRequestHandler(connector, node, debug=True) peer = '192.168.0.1' hrh.transport = mock.MagicMock() hrh.transport.get_extra_info = mock.MagicMock(side_effect=peer) hrh.writer = mock.MagicMock() with mock.patch.object(aiohttp, 'Response', return_value=mock.MagicMock()) as response: self.event_loop.run_until_complete(hrh.handle_request(mockMessage, mockPayload)) response.assert_called_once_with(hrh.writer, 500, http_version=mockMessage.version)
def test_handle_POST_request(self): """ A valid POST request causes a 200 response. * WARNING * Too much mocking going on here (in the vain attempt to achieve 100% test coverage). """ mockMessage = mock.MagicMock() mockMessage.method = 'POST' mockMessage.version = '1.1' mockPayload = mock.MagicMock() @asyncio.coroutine def faux_read(*args, **kwargs): return 'raw_data' mockPayload.read = mock.MagicMock(side_effect=faux_read) connector = HttpConnector(self.event_loop) def faux_receive(*args, **kwargs): return OK('uuid', 'recipient', 'sender', 9999, 'version', 'seal') connector.receive = mock.MagicMock(side_effect=faux_receive) node = Node(PUBLIC_KEY, PRIVATE_KEY, self.event_loop, connector, 1908) hrh = HttpRequestHandler(connector, node, debug=True) peer = '192.168.0.1' hrh.transport = mock.MagicMock() hrh.transport.get_extra_info = mock.MagicMock(side_effect=peer) hrh.writer = mock.MagicMock() with mock.patch.object(aiohttp, 'Response', return_value=mock.MagicMock()) as response: self.event_loop.run_until_complete(hrh.handle_request(mockMessage, mockPayload)) response.assert_called_once_with(hrh.writer, 200, http_version=mockMessage.version)