コード例 #1
0
 def test_ack_unack_ack_failed(self):
     q = SQLiteAckQueue(path=self.path)
     q.put("val1")
     q.put("val2")
     q.put("val3")
     val1 = q.get()
     val2 = q.get()
     val3 = q.get()
     # qsize should be zero when all item is getted from q
     self.assertEqual(q.qsize(), 0)
     self.assertEqual(q.unack_count(), 3)
     # nack will let the item requeued as ready status
     q.nack(val1)
     self.assertEqual(q.qsize(), 1)
     self.assertEqual(q.ready_count(), 1)
     # ack failed is just mark item as ack failed
     q.ack_failed(val3)
     self.assertEqual(q.ack_failed_count(), 1)
     # ack should not effect qsize
     q.ack(val2)
     self.assertEqual(q.acked_count(), 1)
     self.assertEqual(q.qsize(), 1)
     # all ack* related action will reduce unack count
     self.assertEqual(q.unack_count(), 0)
     # reget the nacked item
     ready_val = q.get()
     self.assertEqual(ready_val, val1)
     q.ack(ready_val)
     self.assertEqual(q.qsize(), 0)
     self.assertEqual(q.acked_count(), 2)
     self.assertEqual(q.ready_count(), 0)
コード例 #2
0
    def test_resume_unack(self):
        q = SQLiteAckQueue(path=self.path)
        q.put("val1")
        val1 = q.get()
        self.assertEqual(q.qsize(), 0)
        self.assertEqual(q.unack_count(), 1)
        self.assertEqual(q.ready_count(), 0)
        del q

        q = SQLiteAckQueue(path=self.path, auto_resume=False)
        self.assertEqual(q.qsize(), 0)
        self.assertEqual(q.unack_count(), 1)
        self.assertEqual(q.ready_count(), 0)
        q.resume_unack_tasks()
        self.assertEqual(q.qsize(), 0)
        self.assertEqual(q.unack_count(), 0)
        self.assertEqual(q.ready_count(), 1)
        self.assertEqual(val1, q.get())
        del q

        q = SQLiteAckQueue(path=self.path, auto_resume=True)
        self.assertEqual(q.qsize(), 0)
        self.assertEqual(q.unack_count(), 0)
        self.assertEqual(q.ready_count(), 1)
        self.assertEqual(val1, q.get())
コード例 #3
0
 def test_nack_raw(self):
     q = SQLiteAckQueue(path=self.path)
     q.put("val1")
     item = q.get(raw=True)
     # nack a raw return
     q.nack(item)
     # size should be 1 after nack
     self.assertEqual(q.qsize(), 1)
コード例 #4
0
    def test_open_close_1000(self):
        """Write 1000 items, close, reopen checking if all items are there"""

        q = SQLiteAckQueue(self.path, auto_commit=self.auto_commit)
        for i in range(1000):
            q.put('var%d' % i)

        self.assertEqual(1000, q.qsize())
        del q
        q = SQLiteAckQueue(self.path)
        self.assertEqual(1000, q.qsize())
        for i in range(1000):
            data = q.get()
            self.assertEqual('var%d' % i, data)
        # assert adding another one still works
        q.put('foobar')
        data = q.get()
        self.assertEqual('foobar', data)
コード例 #5
0
    def test_open_close_single(self):
        """Write 1 item, close, reopen checking if same item is there"""

        q = SQLiteAckQueue(self.path, auto_commit=self.auto_commit)
        q.put(b'var1')
        del q
        q = SQLiteAckQueue(self.path)
        self.assertEqual(1, q.qsize())
        self.assertEqual(b'var1', q.get())
コード例 #6
0
 def test_ack_unknown_item(self):
     q = SQLiteAckQueue(path=self.path)
     q.put("val1")
     val1 = q.get()
     q.ack("val2")
     q.nack("val3")
     q.ack_failed("val4")
     self.assertEqual(q.qsize(), 0)
     self.assertEqual(q.unack_count(), 1)
     q.ack(val1)
     self.assertEqual(q.unack_count(), 0)
コード例 #7
0
    def test_multiple_consumers(self):
        """Test sqlqueue can be used by multiple consumers."""

        queue = SQLiteAckQueue(path=self.path,
                               multithreading=True,
                               auto_commit=self.auto_commit)

        def producer():
            for x in range(1000):
                queue.put('var%d' % x)

        counter = []
        # Set all to 0
        for _ in range(1000):
            counter.append(0)

        def consumer(index):
            for i in range(200):
                data = queue.get(block=True)
                self.assertTrue('var' in data)
                counter[index * 200 + i] = data

        p = Thread(target=producer)
        p.start()
        consumers = []
        for index in range(5):
            t = Thread(target=consumer, args=(index, ))
            t.start()
            consumers.append(t)

        p.join()
        for t in consumers:
            t.join()

        self.assertEqual(0, queue.qsize())
        for x in range(1000):
            self.assertNotEqual(0, counter[x],
                                "not 0 for counter's index %s" % x)