def test_group_msg(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime( '%Y%m%d-%H:%M:%S.%f') order_msg.NoAllocs = 2 ord_allocs1 = fix_messages_4_2_0_base.NoAllocsGroup() ord_allocs1.AllocAccount = 'Abc' ord_allocs1.AllocShares = 123 ord_allocs2 = fix_messages_4_2_0_base.NoAllocsGroup() ord_allocs2.AllocAccount = 'Def' ord_allocs2.AllocShares = 456 order_msg.NoAllocsGroup = [ord_allocs1, ord_allocs2] self.client_app.send_message(self._testMethodName, order_msg) msg = SERVER_QUEUE.get(timeout=3) self.assertIsInstance(msg, fix_messages_4_2_0_base.OrderSingle) self.assertEqual(msg.NoAllocs, 2) self.assertEqual(msg.NoAllocsGroup[0].AllocAccount, 'Abc') self.assertEqual(msg.NoAllocsGroup[0].AllocShares, 123) self.assertEqual(msg.NoAllocsGroup[1].AllocAccount, 'Def') self.assertEqual(msg.NoAllocsGroup[1].AllocShares, 456) self.do_logout(self.client_app)
def test_bad_repeating_count(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime( '%Y%m%d-%H:%M:%S.%f') order_msg.NoAllocs = 3 ord_allocs1 = fix_messages_4_2_0_base.NoAllocsGroup() ord_allocs1.AllocAccount = 'Abc' ord_allocs1.AllocShares = 123 ord_allocs2 = fix_messages_4_2_0_base.NoAllocsGroup() ord_allocs2.AllocAccount = 'Def' ord_allocs2.AllocShares = 456 order_msg.NoAllocsGroup = [ord_allocs1, ord_allocs2] self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXIncorrectNumInGroup) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Reject) self.do_logout(self.client_app)
def test_send_time_accuracy(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') order_msg.Header.OrigSendingTime = ( datetime.utcnow() + timedelta(hours=1)).strftime('%Y%m%d-%H:%M:%S.%f') order_msg.Header.PossDupFlag = 'Y' self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXSendTimeAccuracyError) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Reject) sent_logout = CLIENT_QUEUE.get(timeout=3) resp_logout = SERVER_QUEUE.get(timeout=3) self.assertIsInstance(resp_logout, fix_messages_4_2_0_base.Logout) self.assertIsInstance(sent_logout, fix_messages_4_2_0_base.Logout)
def test_queue_msg(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.do_logout(self.client_app) self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=4), fix_messages_4_2_0_base.Logon) self.assertIsInstance(CLIENT_QUEUE.get(timeout=4), fix_messages_4_2_0_base.Logon) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.TestRequest) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Heartbeat) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.OrderSingle) self.do_logout(self.client_app)
def test_bad_msg_type(self): order_msg = fix_messages_4_2_0_base.OrderSingle() fix_messages_4_2_0_base.OrderSingle._msgtype = 'BAD' class String_Type(str): def __bytes__(self): return str(self).encode() class MsgType(String_Type): _tag = '35' order_msg.Header.register_field(MsgType, True) order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.send_message(self._testMethodName, order_msg) fix_messages_4_2_0_base.OrderSingle._msgtype = 'D' self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXInvalidMessageTypeError) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Reject) self.do_logout(self.client_app)
def test_garbled_msg(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL'+'\x01'+'BORKED' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXGarbledMessageError) # self.do_logout(self.client_app) self.client_app.engines[self._testMethodName].logout() self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXEngineResendRequest) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.TestRequest) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.ResendRequest) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.SequenceReset) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Heartbeat) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.SequenceReset) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Logout) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Logout)
def test_begin_string_valid(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.Header.BeginString = 'FIX.4.2' order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.OrderSingle) self.do_logout(self.client_app)
def test_checksum_not_last(self): class CheckSum(str): _tag = '10' def __init__(self, *args, **kwargs): super().__init__() self._tag = '8' order_msg = fix_messages_4_2_0_base.OrderSingle() # hack the tag to not send checksum order_msg.Trailer.register_field(CheckSum, True) order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime( '%Y%m%d-%H:%M:%S.%f') self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXGarbledMessageError) self.client_app.engines[self._testMethodName].logout() self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXEngineResendRequest) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.TestRequest) self.assertIsInstance(CLIENT_QUEUE.get(timeout=5), fix_messages_4_2_0_base.ResendRequest) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Heartbeat) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.OrderSingle) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.SequenceReset) self.assertIsInstance(SERVER_QUEUE.get(timeout=5), fix_messages_4_2_0_base.Logout) self.assertIsInstance(CLIENT_QUEUE.get(timeout=5), fix_messages_4_2_0_base.Logout)
def test_send_time_missing(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') order_msg.Header.PossDupFlag = 'Y' self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.RequiredTagMissingError) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Reject) self.do_logout(self.client_app)
def test_bad_target(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.Header.TargetCompID = 'BAD_TARGET' order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXBadCompIDError) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Reject) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Logout) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Logout)
def test_msg_seq_low(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.engines[self._testMethodName].store.new_day( datetime.utcnow()) self.client_app.engines[self._testMethodName].store.set_current_in_seq( 1) self.client_app.engines[self._testMethodName].msg_seq_num_out = 1 self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXSequenceTooLowError) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Logout) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Logout)
def test_msg_instead_of_hb(self): self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Heartbeat) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Heartbeat) time.sleep(.5) order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.send_message(self._testMethodName, order_msg) # waiting for 2nd heartbeat self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.OrderSingle) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.Heartbeat) self.do_logout(self.client_app)
def test_unsupported_msg(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.server_app.engines[self._testMethodName].callback_register = CallbackRegistrar( self.server_app.engines[self._testMethodName].loop) self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXUnsupportedMessageTypeError) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.BusinessMessageReject) self.server_app.register_callback( self._testMethodName, None, self.server_app.on_queue_msg) self.do_logout(self.client_app)
def test_msg_seq_high(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') self.client_app.engines[self._testMethodName].msg_seq_num_out = 10 self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXEngineResendRequest) self.assertIsInstance(CLIENT_QUEUE.get(timeout=3), fix_messages_4_2_0_base.ResendRequest) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.SequenceReset) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_messages_4_2_0_base.OrderSingle) self.do_logout(self.client_app)
def test_poss_dupe_discard(self): order_msg = fix_messages_4_2_0_base.OrderSingle() order_msg.ClOrdID = "test_message" order_msg.HandlInst = '1' order_msg.Symbol = 'AAPL' order_msg.Side = '1' order_msg.OrdType = '1' order_msg.TransactTime = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S.%f') order_msg.Header.OrigSendingTime = order_msg.TransactTime order_msg.Header.PossDupFlag = 'Y' self.client_app.engines[self._testMethodName].store.new_day( datetime.utcnow()) self.client_app.engines[self._testMethodName].store.set_current_in_seq( 1) self.client_app.engines[self._testMethodName].msg_seq_num_out = 1 self.client_app.send_message(self._testMethodName, order_msg) self.assertIsInstance(SERVER_QUEUE.get(timeout=3), fix_errors.FIXDupeMessageRecv) self.do_logout(self.client_app)