mistral/mistral/tests/unit/rpc/kombu/test_kombu_client.py

101 lines
2.9 KiB
Python

# Copyright (c) 2016 Intel Corporation
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from mistral import exceptions as exc
from mistral.tests.unit.rpc.kombu import base
from mistral.tests.unit.rpc.kombu import fake_kombu
import mock
from six import moves
with mock.patch.dict('sys.modules', kombu=fake_kombu):
from mistral.rpc.kombu import base as kombu_base
from mistral.rpc.kombu import kombu_client
class TestException(exc.MistralException):
pass
class KombuClientTestCase(base.KombuTestCase):
_RESPONSE = "response"
def setUp(self):
super(KombuClientTestCase, self).setUp()
conf = mock.MagicMock()
listener_class = kombu_client.kombu_listener.KombuRPCListener
kombu_client.kombu_listener.KombuRPCListener = mock.MagicMock()
def restore_listener():
kombu_client.kombu_listener.KombuRPCListener = listener_class
self.addCleanup(restore_listener)
self.client = kombu_client.KombuRPCClient(conf)
self.ctx = type(
'context',
(object,),
{'to_dict': lambda self: {}}
)()
def test_sync_call_result_get(self):
self.client._listener.get_result = mock.MagicMock(
return_value={
kombu_base.TYPE: None,
kombu_base.RESULT: self.client._serialize_message({
'body': self._RESPONSE
})
}
)
response = self.client.sync_call(self.ctx, 'method')
self.assertEqual(response, self._RESPONSE)
def test_sync_call_result_not_get(self):
self.client._listener.get_result = mock.MagicMock(
side_effect=moves.queue.Empty
)
self.assertRaises(
exc.MistralException,
self.client.sync_call,
self.ctx,
'method_not_found'
)
def test_sync_call_result_type_error(self):
def side_effect(*args, **kwargs):
return {
kombu_base.TYPE: 'error',
kombu_base.RESULT: TestException()
}
self.client._wait_for_result = mock.MagicMock(side_effect=side_effect)
self.assertRaises(
TestException,
self.client.sync_call,
self.ctx,
'method'
)
def test_async_call(self):
self.assertIsNone(self.client.async_call(self.ctx, 'method'))