def beginWrite(self, contentType=None): # print("beginWrite: {}".format(self.target_path)) queue = FileLikeQueue(maxsize=1) # Simulate an asynchrounous consumer. We use a file, so we can check # the result from the parent unittest process. In real live this could be # requests.post(..., data=queue), ... def _consumer(): # print("_consumer: {}".format(self.target_path)) with open(self.target_path, "wb") as f: s = 0 # print("_consumer: read()...") data = queue.read() while data: s += len(data) # print("_consumer: read(): write") f.write(compat.to_bytes(data)) data = queue.read() # print("_consumer(): done", s) self.worker = threading.Thread(target=_consumer) self.worker.setDaemon(True) self.worker.start() return queue
def testFileLikeQueue(self): # queue of unlimited size q = FileLikeQueue() # queue 32 bytes q.write("*" * 7) q.write("*" * 11) q.write("*" * 5) q.write("*" * 9) q.close() # sized reads will return chunks as demanded for i in range(6): self.assertEqual(len(q.read(5)), 5) self.assertEqual(len(q.read(5)), 2, "last chunk delivers the reminder") self.assertEqual(len(q.read(5)), 0, "furtehr read() returns ''")
def testFileLikeQueueAll(self): # queue of unlimited size q = FileLikeQueue() # queue 32 bytes q.write("*" * 7) q.write("*" * 11) q.write("*" * 5) q.write("*" * 9) q.close() # read(-1) returns all, then '' self.assertEqual(len(q.read(-1)), 32) self.assertEqual(len(q.read(-1)), 0)
def testFileLikeQueueUnsized(self): # queue of unlimited size q = FileLikeQueue() q.write("*" * 42) q.write("*" * 3) # unsized reads will return chunks as queued res = q.read() self.assertEqual(len(res), 42) res = q.read() self.assertEqual(len(res), 3) q.close() # subsequent reads will return "" instead of blocking res = q.read() self.assertEqual(res, "", "Read after close() returns ''") # subsequent write will raise self.assertRaises(ValueError, q.write, "***")