Beispiel #1
0
    def test_encode_no_35(self):
        """Test encoding without MessageType(35) field"""
        if VERSION == 26:
            return

        msg = FixMessage()
        msg.append_pair(8, "FIX.4.2")
        with self.assertRaises(ValueError):
            msg.encode()
        return
Beispiel #2
0
    def test_encode_no_8(self):
        """Test encoding without BeginString(8) field"""
        if VERSION == 26:
            return

        msg = FixMessage()
        msg.append_pair(35, "D")
        with self.assertRaises(ValueError):
            msg.encode()
        return
Beispiel #3
0
 def test_set_session_version(self):
     """Test minimal message"""
     pkt = FixMessage()
     pkt.append_pair(8, "FIX.4.4")
     pkt.append_pair(35, "0")
     self.assertEqual(fix_str("8=FIX.4.4\x01"
                              "9=5\x01"
                              "35=0\x01"
                              "10=163\x01"),
                      pkt.encode())
Beispiel #4
0
    def goodbye(self, sender, target, seq_no):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, seq_no)  # sequence no
        msg.append_pair(35, '5')  # msgType = logout
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        return msg.encode()
Beispiel #5
0
    def test_remove_simple(self):
        """Test removal of single, existent field."""

        msg = FixMessage()
        msg.append_pair(8, b'FIX.4.2')
        self.assertEqual(1, msg.count())
        result = msg.remove(8)
        self.assertEqual(b'FIX.4.2', result)
        self.assertEqual(0, msg.count())
        return
Beispiel #6
0
 def test_remove_not_found(self):
     """Test removal of non-existent field."""
     msg = FixMessage()
     msg.append_pair(8, b'FIX.4.2')
     msg.append_pair(35, b'D')
     msg.append_utc_timestamp(52)
     self.assertEqual(3, msg.count())
     result = msg.remove(9)
     self.assertIsNone(result)
     self.assertEqual(3, msg.count())
Beispiel #7
0
    def test_compare_not_equal_extra_field_in_b(self):
        """Test comparison of other message with extra field"""
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "0")
        b.append_pair(42000, "something")

        self.assertFalse(a == b)
Beispiel #8
0
    def test_get_repeating(self):
        pkt = FixMessage()
        pkt.append_pair(42, "a")
        pkt.append_pair(42, "b")
        pkt.append_pair(42, "c")

        self.assertEqual("a", pkt.get(42))
        self.assertEqual("b", pkt.get(42, 2))
        self.assertEqual("c", pkt.get(42, 3))
        self.assertEqual("a", pkt.get(42, 1))
        self.assertIsNone(pkt.get(42, 4))
        return
Beispiel #9
0
    def test_compare_not_equal_extra_field_in_b(self):
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "0")
        b.append_pair(42000, "something")

        self.assertFalse(a == b)
        return
Beispiel #10
0
    def test_get_repeating(self):
        """Test retrieval of repeating field's value"""
        pkt = FixMessage()
        pkt.append_pair(42, "a")
        pkt.append_pair(42, "b")
        pkt.append_pair(42, "c")

        self.assertEqual(fix_str("a"), pkt.get(42))
        self.assertEqual(fix_str("b"), pkt.get(42, 2))
        self.assertEqual(fix_str("c"), pkt.get(42, 3))
        self.assertEqual(fix_str("a"), pkt.get(42, 1))
        self.assertIsNone(pkt.get(42, 4))
        return
Beispiel #11
0
    def goodbye_back(self, message):

        parser = Parser()
        parser.append_buffer(message)
        message_recv = parser.get_message()

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, int(message_recv.get(34)) + 1)  # sequence no
        msg.append_pair(35, '5')  # msgType = logout
        msg.append_pair(49, message_recv.get(56))
        msg.append_time(52)  # timestamp
        msg.append_pair(56, message_recv.get(49))
        return msg.encode()
Beispiel #12
0
    def send(self, values: dict) -> None:
        with self._send_lock:
            msg = FixMessage()
            msg.append_pair(simplefix.TAG_BEGINSTRING, 'FIX.4.2')
            msg.append_pair(simplefix.TAG_SENDER_COMPID, self._sender_id)
            msg.append_pair(simplefix.TAG_TARGET_COMPID, self._target_id)
            msg.append_pair(simplefix.TAG_MSGSEQNUM, self._next_send_seq_num)
            for key, value in values.items():
                if isinstance(value, datetime):
                    msg.append_utc_timestamp(key, value)
                else:
                    msg.append_pair(key, value)
            if not msg.get(simplefix.TAG_SENDING_TIME):
                msg.append_utc_timestamp(simplefix.TAG_SENDING_TIME)
            encoded = msg.encode()
            self._last_send_time = time.time()
            self._next_send_seq_num += 1

            try:
                print('send', encoded.replace(b'\x01', b'|'))
                self._sock.sendall(encoded)
            except OSError:
                self.close(clean=False)
                return

            if msg.message_type == simplefix.MSGTYPE_LOGON:
                self._has_session = True
Beispiel #13
0
    def test_basic_fix_message(self):
        """Test parsing basic FIX message."""
        pkt = FixMessage()
        pkt.append_pair(8, "FIX.4.2")
        pkt.append_pair(35, "D")
        pkt.append_pair(29, "A")
        buf = pkt.encode()

        p = FixParser()
        p.append_buffer(buf)
        m = p.get_message()

        self.assertIsNotNone(m)
        self.assertEqual(b"FIX.4.2", m.get(8))
        self.assertEqual(b"D", m.get(35))
        self.assertEqual(b"A", m.get(29))
Beispiel #14
0
    def test_compare_equal(self):
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "0")

        self.assertTrue(a == b)
        return
Beispiel #15
0
    def test_count(self):
        """Test count of message fields"""
        msg = FixMessage()
        msg.append_pair(8, "FIX.4.2")
        msg.append_pair(35, "A")
        msg.append_pair(108, 30)
        self.assertEqual(3, msg.count())

        msg.append_pair(141, "N")
        msg.append_pair(383, 16384)
        self.assertEqual(5, msg.count())
Beispiel #16
0
    def test_count(self):
        msg = FixMessage()
        msg.append_pair(8, "FIX.4.2")
        msg.append_pair(35, "A")
        msg.append_pair(108, 30)
        self.assertEqual(3, msg.count())

        msg.append_pair(141, "N")
        msg.append_pair(383, 16384)
        self.assertEqual(5, msg.count())
        return
Beispiel #17
0
    def test_compare_equal(self):
        """Test comparison of equal messages"""
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "0")

        self.assertTrue(a == b)
Beispiel #18
0
    def test_str(self):
        """Test conversion to string."""
        msg = FixMessage()
        msg.append_pair(1, 1)
        msg.append_pair(2, "foo")
        msg.append_pair(3, b"bar")
        msg.append_pair(4, 3.1415679)

        buffer = str(msg)
        self.assertIsNotNone(buffer)
        self.assertEqual("1=1|2=foo|3=bar|4=3.1415679", buffer)
Beispiel #19
0
    def test_compare_not_equal_different_values(self):
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "1")

        self.assertFalse(a == b)
        self.assertFalse(b == a)
        return
Beispiel #20
0
    def test_compare_not_equal_different_values(self):
        """Test comparison of unequal message field values"""
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "1")

        self.assertFalse(a == b)
        self.assertFalse(b == a)
Beispiel #21
0
    def test_raw_data(self):
        """Test parsing of raw data fields."""
        raw = b"raw\x01data"

        pkt = FixMessage()
        pkt.append_pair(8, "FIX.4.2")
        pkt.append_pair(35, "D")
        pkt.append_data(95, 96, raw)
        buf = pkt.encode()

        parser = FixParser()
        parser.append_buffer(buf)
        msg = parser.get_message()

        self.assertIsNotNone(msg)
        self.assertEqual(b"FIX.4.2", msg.get(8))
        self.assertEqual(b"D", msg.get(35))
        self.assertEqual(len(raw), int(msg.get(95)))
        self.assertEqual(raw, msg.get(96))
        return
Beispiel #22
0
    def test_raw_data_tags(self):
        """Test functions to add and remove raw data tags."""
        raw = b"raw\x015000=1"

        pkt = FixMessage()
        pkt.append_pair(8, "FIX.4.2")
        pkt.append_pair(35, "D")
        pkt.append_data(5001, 5002, raw)
        pkt.append_pair(20000, "private tag")
        buf = pkt.encode()

        parser = FixParser()
        parser.add_raw(5001, 5002)
        parser.append_buffer(buf)
        msg = parser.get_message()

        self.assertIsNotNone(msg)
        self.assertEqual(b"FIX.4.2", msg.get(8))
        self.assertEqual(b"D", msg.get(35))
        self.assertEqual(len(raw), int(msg.get(5001)))
        self.assertEqual(raw, msg.get(5002))
        self.assertEqual(b"private tag", msg.get(20000))

        parser.reset()
        parser.remove_raw(5001, 5002)
        parser.append_buffer(buf)
        msg = parser.get_message()

        self.assertIsNotNone(msg)
        self.assertEqual(b"FIX.4.2", msg.get(8))
        self.assertEqual(b"D", msg.get(35))
        self.assertEqual(len(raw), int(msg.get(5001)))
        self.assertEqual(b"raw", msg.get(5002))
        self.assertEqual(b"1", msg.get(5000))
        self.assertEqual(b"private tag", msg.get(20000))
Beispiel #23
0
    def test_sequence_access(self):
        msg = FixMessage()
        msg.append_pair(8, "FIX.4.2")
        msg.append_pair(35, "A")
        msg.append_pair(108, 30)
        msg.append_pair(141, "N")
        msg.append_pair(383, 16384)

        self.assertEqual(35, msg[1][0])
        self.assertEqual(141, msg[3][0])

        l = []
        for tag, _ in msg:
            l.append(int(tag))

        self.assertEqual([8, 35, 108, 141, 383], l)
        return
Beispiel #24
0
    def test_sequence_access(self):
        """Test sequence access to message fields"""
        msg = FixMessage()
        msg.append_pair(8, "FIX.4.2")
        msg.append_pair(35, "A")
        msg.append_pair(108, 30)
        msg.append_pair(141, "N")
        msg.append_pair(383, 16384)

        self.assertEqual(35, msg[1][0])
        self.assertEqual(141, msg[3][0])

        fields = []
        for tag, _ in msg:
            fields.append(int(tag))

        self.assertEqual([8, 35, 108, 141, 383], fields)
Beispiel #25
0
 def test_header_field(self):
     """Test use of header flag"""
     msg = FixMessage()
     msg.append_pair(20000, "third")
     msg.append_pair(20001, "first", header=True)
     msg.append_pair(20002, "second", header=True)
     self.assertEqual(fix_str("20001=first\x01"
                              "20002=second\x01"
                              "20000=third\x01"),
                      msg.encode(True))
Beispiel #26
0
 def test_remove_nth(self):
     """Test removal of nth field."""
     msg = FixMessage()
     msg.append_pair(99999, 1)
     msg.append_pair(99999, 99999)
     msg.append_pair(99999, 2)
     self.assertEqual(3, msg.count())
     result = msg.remove(99999, 2)
     self.assertEqual(b'99999', result)
     self.assertEqual(2, msg.count())
     self.assertEqual(b'1', msg.get(99999, 1))
     self.assertEqual(b'2', msg.get(99999, 2))
Beispiel #27
0
    def test_stop_tag(self):
        """Test termination using alternative tag number."""
        pkt = FixMessage()
        pkt.append_pair(8, "FIX.4.2")
        pkt.append_pair(35, "D")
        pkt.append_pair(29, "A")
        pkt.append_pair(20000, "xxx")
        pkt.append_pair(10, "000")
        buf = pkt.encode()

        p = FixParser(stop_tag=20000)
        p.append_buffer(buf)
        m = p.get_message()

        self.assertIsNotNone(m)
        self.assertEqual(b"FIX.4.2", m.get(8))
        self.assertEqual(b"D", m.get(35))
        self.assertEqual(b"A", m.get(29))
        self.assertEqual(b"xxx", m.get(20000))
        self.assertEqual(False, 10 in m)
Beispiel #28
0
    def test_stop_tag_deprecated(self):
        """Test deprecated setting of stop tag."""
        pkt = FixMessage()
        pkt.append_pair(8, "FIX.4.2")
        pkt.append_pair(35, "D")
        pkt.append_pair(29, "A")
        pkt.append_pair(20000, "xxx")
        pkt.append_pair(10, "000")
        buf = pkt.encode()

        p = FixParser()
        p.set_message_terminator(tag=20000)
        p.append_buffer(buf)
        m = p.get_message()

        self.assertIsNotNone(m)
        self.assertEqual(b"FIX.4.2", m.get(8))
        self.assertEqual(b"D", m.get(35))
        self.assertEqual(b"A", m.get(29))
        self.assertEqual(b"xxx", m.get(20000))
        self.assertEqual(False, 10 in m)
Beispiel #29
0
 def test_raw_begin_string(self):
     """Test raw encoding of BeginString(8)"""
     pkt = FixMessage()
     pkt.append_pair(8, "FIX.4.4")
     self.assertEqual(fix_str("8=FIX.4.4\x01"), pkt.encode(True))
     return
Beispiel #30
0
    def test_compare_not_equal_different_tags(self):
        """Test comparison of different tagged fields"""
        a = FixMessage()
        a.append_pair(8, "FIX.4.2")
        a.append_pair(35, "0")
        a.append_pair(42000, "something")

        b = FixMessage()
        b.append_pair(8, "FIX.4.2")
        b.append_pair(35, "1")
        b.append_pair(24000, "something")

        self.assertFalse(a == b)
        return