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)
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)
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 []