created simulator, re-wrote tests. tests are failing, but without errors

This commit is contained in:
fawce
2012-02-11 23:20:45 -05:00
parent 1804fe7c6c
commit cf31f08af1
8 changed files with 392 additions and 529 deletions
+5 -11
View File
@@ -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
View File
@@ -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.")