def testDataOnly(self): """Create a stream with only data blocks""" out = StringIO() recorder = Writer(output=out) blocks = [ (12.34, "First data block"), (56.78, "Another data block"), ] for block in blocks: recorder.addBlock(*block) recorder.flush() headerData = compress("") blockData = [compress(data) for (_, data) in blocks] blockData = "".join( intToStr(len(data), 4) + intToStr(crc32(float64.pack(time) + data), 4) + float64.pack(time) + data + intToStr(len(data), 4) for ((time, _), data) in zip(blocks, blockData)) assertEqual( magicMarker + intToStr(len(headerData), 4) + intToStr(crc32(headerData), 4) + headerData + intToStr(eohMarker, 4) + blockData , out.getvalue())
def testHeaderAndData(self): """Create a stream with both header and data""" out = StringIO() recorder = Writer(output=out) headers = [ ("Version", "1.2.3"), ("Configuration", "Standalone"), ] for header in headers: recorder.addHeader(*header) blocks = [ (98.76, "Outgoing data"), (54.32, "Incoming data"), ] for block in blocks: recorder.addBlock(*block) recorder.flush() headerData = compress("".join( intToStr(len(k), 4) + k + intToStr(len(v), 4) + v for (k, v) in headers)) blockData = [compress(data) for (_, data) in blocks] blockData = "".join( intToStr(len(data), 4) + intToStr(crc32(float64.pack(time) + data), 4) + float64.pack(time) + data + intToStr(len(data), 4) for ((time, _), data) in zip(blocks, blockData)) assertEqual( magicMarker + intToStr(len(headerData), 4) + intToStr(crc32(headerData), 4) + headerData + intToStr(eohMarker, 4) + blockData , out.getvalue())