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)
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)
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)