Beispiel #1
0
    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
Beispiel #2
0
 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 ''")
Beispiel #3
0
 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)
Beispiel #4
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, "***")