Source code for cis_interface.drivers.tests.test_RMQServerDriver

import pika
import nose.tools as nt
import cis_interface.drivers.tests.test_RMQDriver as parent1
from cis_interface.drivers.tests.test_IODriver import IOInfo
from cis_interface.drivers.RMQServerDriver import (
    _new_client_msg, _end_client_msg)


[docs]class TestRMQServerParam(parent1.TestRMQParam, IOInfo): r"""Test parameters for RMQServerDriver class. Attributes (in addition to parent class's): - """ def __init__(self, *args, **kwargs): super(TestRMQServerParam, self).__init__(*args, **kwargs) self.driver = 'RMQServerDriver' self.args = None self.attr_list += ['clients']
[docs]class TestRMQServerDriverNoStart(TestRMQServerParam, parent1.TestRMQDriverNoStart): r"""Test class for RMQServerDriver class without start. Attributes (in addition to parent class's): - """ pass
[docs]class TestRMQServerDriver(TestRMQServerParam, parent1.TestRMQDriver): r"""Test class for RMQServerDriver class. Attributes (in addition to parent class's): - """
[docs] def setup(self): r"""Create a driver instance and start the driver.""" super(TestRMQServerDriver, self).setup() self.create_in_rmq()
[docs] def teardown(self): r"""Remove the instance, stoppping it.""" self.destroy_in_rmq() super(TestRMQServerDriver, self).teardown()
[docs] def create_in_rmq(self): r"""Create a blocking connection, channel, and queue for testing.""" self.connection = pika.BlockingConnection( self.instance.connection_parameters) self.channel = self.connection.channel() out = self.channel.queue_declare(auto_delete=True) self.temp_queue = out.method.queue self.channel.queue_bind( queue=self.temp_queue, exchange=self.instance.exchange, routing_key=self.temp_queue)
[docs] def destroy_in_rmq(self): r"""Remove blocking connection, channel, and queue.""" self.channel.queue_unbind(self.temp_queue, exchange=self.instance.exchange) self.channel.queue_delete(self.temp_queue) self.channel.close() self.connection.close()
[docs] def temp_basic_get(self): r"""Do basic_get from the temporary queue.""" out = self.channel.basic_get(queue=self.temp_queue) elapsed = 0.0 while (out[0] is None) and (elapsed <= self.instance.timeout): self.connection.sleep(self.instance.sleeptime) out = self.channel.basic_get(queue=self.temp_queue) elapsed += self.instance.sleeptime if out[0] is None: # pragma: debug raise Exception("Msg receive timed out.") return out
[docs] def test_client_count(self): r"""Test to ensure client count is correct.""" nt.assert_equal(self.instance.n_clients, 0) # Send new client message with self.instance.lock: self.instance.channel.basic_publish( exchange=self.instance.exchange, routing_key=self.instance.queue, properties=pika.BasicProperties(reply_to=self.temp_queue), body=_new_client_msg) elapsed = 0.0 while self.instance.n_clients == 0 and (elapsed <= self.instance.timeout): self.instance.sleep() elapsed += self.instance.sleeptime nt.assert_equal(self.instance.n_clients, 1) # Send end client message with self.instance.lock: self.instance.channel.basic_publish( exchange=self.instance.exchange, routing_key=self.instance.queue, properties=pika.BasicProperties(reply_to=self.temp_queue), body=_end_client_msg) elapsed = 0.0 while self.instance.n_clients != 0 and (elapsed <= self.instance.timeout): self.instance.sleep() elapsed += self.instance.sleeptime nt.assert_equal(self.instance.n_clients, 0)
# Disabled so that test message is not read by mistake
[docs] def test_purge(self): r"""Test purge of queue.""" pass
[docs] def test_msg(self): r"""Test routing of a message through the IPC & RMQ queues.""" # Send message to RMQ input & receive from IPC input with self.instance.lock: self.instance.channel.basic_publish( exchange=self.instance.exchange, routing_key=self.instance.queue, properties=pika.BasicProperties(reply_to=self.temp_queue), body=self.msg_short) ipc_msg = self.instance.iipc.recv_wait_nolimit() nt.assert_equal(ipc_msg, self.msg_short) # Send message to IPC output & receive from RMQ output self.instance.oipc.ipc_send_nolimit(ipc_msg) method_frame, header_frame, rmq_msg = self.temp_basic_get() nt.assert_equal(rmq_msg, self.msg_short)