""" Test suite for the messaging infrastructure of QSim. """ #don't worry about excessive public methods pylint: disable=R0904 import unittest2 as unittest import multiprocessing from qsim.core import Simulator from qsim.transforms.technical import MovingAverage from qsim.sources import RandomEquityTrades import qsim.util as qutil from qsim.test.client import TestClient class MessagingTestCase(unittest.TestCase): """Tests the message passing: datasources -> feed -> transforms -> merge -> client""" def setUp(self): """generate some config objects for the datafeed, sources, and transforms.""" qutil.configure_logging() def test_sources_only(self): """streams events from two data sources, no transforms.""" ret1 = RandomEquityTrades(133, "ret1", 400) ret2 = RandomEquityTrades(134, "ret2", 400) sources = {"ret1":ret1, "ret2":ret2} client = TestClient() sim = Simulator(sources, {}, client) sim.launch() self.assertEqual(sim.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages, found {n} remaining." .format(n=sim.feed.data_buffer.pending_messages())) self.assertEqual(800, client.received_count, "The client should have received ({n}) the same number of messages as the feed sent ({m})." .format(n=client.received_count, m=800)) def test_merged_to_client(self): """ 2 datasources -> feed -> 2 moving average transforms -> transform merge -> testclient verify message count at client. """ ret1 = RandomEquityTrades(133, "ret1", 400) ret2 = RandomEquityTrades(134, "ret2", 400) sources = {"ret1":ret1, "ret2":ret2} mavg1 = MovingAverage("mavg1", 30) mavg2 = MovingAverage("mavg2", 60) transforms = {"mavg1":mavg1, "mavg2":mavg2} client = TestClient() sim = Simulator(sources, {}, client) sim.launch() self.assertEqual(sim.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages.") self.assertEqual(800, client.received_count, "The client should have received the same number of messages as the feed sent.")