mirror of
https://github.com/wassname/catalyst.git
synced 2026-08-17 11:16:40 +08:00
created simulator, re-wrote tests. tests are failing, but without errors
This commit is contained in:
+5
-11
@@ -9,11 +9,9 @@ import qsim.messaging as qmsg
|
||||
|
||||
class TestClient(object):
|
||||
|
||||
def __init__(self,feed, address, bind=False):
|
||||
self.feed = feed
|
||||
self.address = address
|
||||
self.sync = qmsg.FeedSync(feed, "testclient")
|
||||
self.bind = bind
|
||||
def __init__(self):
|
||||
self.address = None
|
||||
self.sync = None
|
||||
self.received_count = 0
|
||||
|
||||
def run(self):
|
||||
@@ -23,12 +21,8 @@ class TestClient(object):
|
||||
|
||||
self.data_feed = self.context.socket(zmq.PULL)
|
||||
|
||||
if(self.bind):
|
||||
qutil.LOGGER.info("binding to {address}".format(address=self.address))
|
||||
self.data_feed.bind(self.address)
|
||||
else:
|
||||
qutil.LOGGER.info("connecting to {address}".format(address=self.address))
|
||||
self.data_feed.connect(self.address)
|
||||
qutil.LOGGER.info("connecting to {address}".format(address=self.address))
|
||||
self.data_feed.connect(self.address)
|
||||
|
||||
self.sync.confirm()
|
||||
|
||||
|
||||
+31
-58
@@ -6,9 +6,9 @@ Test suite for the messaging infrastructure of QSim.
|
||||
import unittest2 as unittest
|
||||
import multiprocessing
|
||||
|
||||
from qsim.core import DataFeed
|
||||
from qsim.transforms.core import MergedTransformsFeed
|
||||
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
|
||||
@@ -20,71 +20,44 @@ class MessagingTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
"""generate some config objects for the datafeed, sources, and transforms."""
|
||||
|
||||
qutil.configure_logging()
|
||||
qutil.LOGGER.info("testing...")
|
||||
self.total_data_count = 800
|
||||
self.feed_config = {'emt1':{'sid':133, 'class':'RandomEquityTrades', 'count':400},
|
||||
'emt2':{'sid':134, 'class':'RandomEquityTrades', 'count':400}}
|
||||
self.feed = DataFeed(self.feed_config)
|
||||
self.feed_proc = multiprocessing.Process(target=self.feed.run)
|
||||
|
||||
self.config = {}
|
||||
self.config['name'] = '**merged feed**'
|
||||
self.config['transforms'] = [{'name':'mavg1', 'class':'MovingAverage', 'hours':1},
|
||||
{'name':'mavg2', 'class':'MovingAverage', 'hours':2}]
|
||||
qutil.configure_logging()
|
||||
|
||||
def test_client(self):
|
||||
"""directly connect the test client to the feed, using two random data sources"""
|
||||
|
||||
#subscribe a client to the multiplexed feed
|
||||
client = TestClient(self.feed, self.feed.feed_address)
|
||||
|
||||
feed_proc = multiprocessing.Process(target=self.feed.run)
|
||||
feed_proc.start()
|
||||
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()
|
||||
|
||||
client.run()
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0,
|
||||
self.assertEqual(sim.feed.data_buffer.pending_messages(), 0,
|
||||
"The feed should be drained of all messages, found {n} remaining."
|
||||
.format(n=self.feed.data_buffer.pending_messages()))
|
||||
self.assertEqual(self.total_data_count, client.received_count,
|
||||
.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=self.total_data_count))
|
||||
.format(n=client.received_count, m=800))
|
||||
|
||||
|
||||
def dtest_moving_average_to_client(self):
|
||||
"""2 datasources -> feed -> moving average transform -> testclient
|
||||
verify message count at client."""
|
||||
|
||||
mavg = MovingAverage(self.feed, self.config['transforms'][0], result_address="tcp://127.0.0.1:20202")
|
||||
mavg_proc = multiprocessing.Process(target=mavg.run)
|
||||
mavg_proc.start()
|
||||
|
||||
client = TestClient(self.feed, mavg.result_address, bind=True)
|
||||
|
||||
feed_proc = multiprocessing.Process(target=self.feed.run)
|
||||
feed_proc.start()
|
||||
|
||||
client.run()
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages.")
|
||||
self.assertEqual(self.total_data_count, client.received_count,
|
||||
"The client should have received the same number of messages as the feed sent.")
|
||||
|
||||
def dtest_merged_to_client(self):
|
||||
def test_merged_to_client(self):
|
||||
"""
|
||||
2 datasources -> feed -> 2 moving average transforms -> transform merge -> testclient
|
||||
verify message count at client.
|
||||
"""
|
||||
merger = MergedTransformsFeed(self.feed, self.config)
|
||||
merger_proc = multiprocessing.Process(target=merger.run)
|
||||
merger_proc.start()
|
||||
|
||||
client = TestClient(self.feed, merger.result_address)
|
||||
|
||||
feed_proc = multiprocessing.Process(target=self.feed.run)
|
||||
feed_proc.start()
|
||||
|
||||
client.run()
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages.")
|
||||
self.assertEqual(self.total_data_count, client.received_count,
|
||||
|
||||
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.")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user