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())
 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)
Пример #4
0
def check_queue_size(q: SQLiteAckQueue):
    """Check queue size."""
    try:
        if q is not None:
            if q.size > 0:
                return [
                    checks.Info("queue contains pending messages",
                                id=QUEUE_PENDING_INFO_ID)
                ]
            elif q.unack_count() > 0:
                return [
                    checks.Info("queue contains unacked messages",
                                id=QUEUE_UNACKED_INFO_ID)
                ]
    except Exception:
        return [
            checks.Error("queue raised exception on access", id=QUEUE_ERROR_ID)
        ]
    else:
        return []