Example #1
0
    def test_writing_and_reading(self):
        BUFSIZE = 16 * 1024
        tf_writer = TFWriter.create(TEST_MSG_SPEC, BUFSIZE)
        tf_buf = tf_writer.buffer       # we share the buffer
        tf_reader = TFReader(TEST_MSG_SPEC, BUFSIZE, tf_buf)

        idx = 0                           # 0-based field number

        # field types encoded as varints (8) ========================
        # These are tested in greater detail in testVarint.py; the
        # tests here are to exercise their use in a heterogeneous
        # buffer

        # field 0: _V_UINT32
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vuint32', 0x1f)
        self.assertEqual(1, idx)         # DEBUG XXX

        # field 1: _V_UINT32
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vuint32', 0x172f3e4d)

        # field 2:  _V_UINT64
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vuint64', 0x12345678abcdef3e)

        # field 3: vsInt32
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vsint32', 192)

        # field 4: vsInt32
        # _V_SINT32 (zig-zag encoded, optimal for small values near zero)
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vsint32', -192)

        # field 5: _V_SINT64
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vsint64', -193)  # GEEP

        # field 6: _V_UINT32
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vuint32', 0x172f3e4d)
        # field 7: _V_UINT64
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'vuint64', 0xffffffff172f3e4d)

        # _V_BOOL
        # XXX NOT IMPLEMENTED, NOT TESTED

        # _V_ENUM
        # XXX NOT IMPLEMENTED, NOT TESTED

        # encoded as fixed length 32 bit fields =====================
        # field 8: _F_INT32
        idx = self.do_round_trip_field(tf_writer, tf_reader, idx, 'fint32',
                                       0x172f3e4d)
        # _F_FLOAT
        # XXX STUB XXX not implemented

        # encoded as fixed length 64 bit fields =====================
        # field 9: _F_INT64
        idx = self.do_round_trip_field(tf_writer, tf_reader, idx, 'fint64',
                                       0xffffffff172f3e4d)
        # _F_DOUBLE
        # XXX STUB XXX not implemented

        # encoded as varint len followed by byte[len] ===============
        # field 10: _L_STRING
        string = self.rng.next_file_NAME(16)
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'lstring', string)

        # field 11: _L_BYTES
        b_val = bytearray(8 + self.rng.next_int16(16))
        self.rng.next_bytes(b_val)
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'lbytes', b_val)

        # _L_MSG
        # XXX STUB XXX not implemented

        # fixed length byte sequences, byte[N} ======================
        # field 12: _F_BYTES16
        self.rng.next_bytes(B128)
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'fbytes16', B128)

        # field 13: _F_BYTES20
        self.rng.next_bytes(B160)
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'fbytes20', B160)

        # may want to introduce eg fNodeID20 and fSha1Key types
        # field 14: _F_BYTES32
        self.rng.next_bytes(B256)
        idx = self.do_round_trip_field(
            tf_writer, tf_reader, idx, 'fbytes32', B256)
Example #2
0
    def test_writing_and_reading(self):
        writer = TFWriter.create(LE_MSG_SPEC, BUFSIZE)
        writer.clear()  # should not be necessary

        buf = writer.buffer
        # reader and writer share same buffer
        reader = TFReader(LE_MSG_SPEC, BUFSIZE, buf)

        tstamp = int(time.time())
        node_id = bytearray(20)         # 160 bit
        RNG.next_bytes(node_id)  # .... random value
        key = bytearray(20)         # 160 bit
        RNG.next_bytes(key)  # .... random value
        length = RNG.next_int32()
        by_ = RNG.next_file_name(16)
        path = 'path/to/' + RNG.next_file_name(16)

        nnn = 0                           # 0-based field number
        # write a log entry into the buffer
        writer.put_next(nnn, tstamp)
        nnn = nnn + 1
        writer.put_next(nnn, node_id)
        nnn = nnn + 1
        writer.put_next(nnn, key)
        nnn = nnn + 1
        writer.put_next(nnn, length)
        nnn = nnn + 1
        writer.put_next(nnn, by_)
        nnn = nnn + 1
        writer.put_next(nnn, path)

        # now read the buffer to see what actually was written
        self.assertEqual(0, reader.position)

        reader.get_next()
        self.assertEqual(0, reader.field_nbr)
        self.assertEqual('fuint32', FieldStr.as_str(reader.field_type))
        self.assertEqual(tstamp, reader.value)
        self.assertEqual(5, reader.position)

        reader.get_next()
        self.assertEqual(1, reader.field_nbr)
        self.assertEqual('fbytes20', FieldStr.as_str(reader.field_type))
        self.assertEqual(node_id, reader.value)
        self.assertEqual(26, reader.position)

        reader.get_next()
        self.assertEqual(2, reader.field_nbr)
        self.assertEqual('fbytes20', FieldStr.as_str(reader.field_type))
        self.assertEqual(key, reader.value)
        self.assertEqual(47, reader.position)

        reader.get_next()
        self.assertEqual(3, reader.field_nbr)
        self.assertEqual('vuint32', FieldStr.as_str(reader.field_type))
        self.assertEqual(length, reader.value)

        reader.get_next()
        self.assertEqual(4, reader.field_nbr)
        self.assertEqual('lstring', FieldStr.as_str(reader.field_type))
        self.assertEqual(by_, reader.value)

        reader.get_next()
        self.assertEqual(5, reader.field_nbr)
        self.assertEqual('lstring', FieldStr.as_str(reader.field_type))
        self.assertEqual(path, reader.value)
Example #3
0
 def test_writer_creator(self):
     BUFSIZE = 1024
     tf_writer = TFWriter.create(TEST_MSG_SPEC, BUFSIZE)
     self.assertTrue(isinstance(tf_writer, TFWriter))
     self.assertEqual(0, tf_writer.position)
     self.assertEqual(BUFSIZE, tf_writer.capacity)