def test_task_done_with_restart(self): """Test that items are not deleted before task_done.""" q = SQLiteQueue(path=self.path, auto_commit=False) for i in range(1, 11): q.put(i) self.assertEqual(1, q.get()) self.assertEqual(2, q.get()) # size is correct before task_done self.assertEqual(8, q.qsize()) q.task_done() # make sure the size still correct self.assertEqual(8, q.qsize()) self.assertEqual(3, q.get()) # without task done del q q = SQLiteQueue(path=self.path, auto_commit=False) # After restart, the qsize and head item are the same self.assertEqual(8, q.qsize()) # After restart, the queue still works self.assertEqual(3, q.get()) self.assertEqual(7, q.qsize())
def benchmark_sqlite_wr_10000(self): """Benchmark sqlite queue by writing and reading <BENCHMARK_COUNT> items.""" self.path = tempfile.mkdtemp('b_sql_10000') q = SQLiteQueue(self.path, auto_commit=True) for i in range(BENCHMARK_COUNT): q.put('bench%d' % i) for i in range(BENCHMARK_COUNT): q.get()
def test_empty(self): q = SQLiteQueue(self.path, auto_commit=self.auto_commit) self.assertEqual(q.empty(), True) q.put('first') self.assertEqual(q.empty(), False) q.get() self.assertEqual(q.empty(), True)
def benchmark_sqlite_read_write_false(self): """Writing and reading <BENCHMARK_COUNT> items(1 task_done).""" self.path = tempfile.mkdtemp('b_sql_10000') q = SQLiteQueue(self.path, auto_commit=False) for i in range(BENCHMARK_COUNT): q.put('bench%d' % i) for i in range(BENCHMARK_COUNT): q.get() q.task_done() assert q.qsize() == 0
def test_random_read_write(self): """Test random read/write""" q = SQLiteQueue(self.path, auto_commit=self.auto_commit) n = 0 for i in range(1000): if random.random() < 0.5: if n > 0: q.get() n -= 1 else: self.assertRaises(Empty, q.get, block=False) else: q.put('var%d' % random.getrandbits(16)) n += 1
def test_random_read_write(self): """Test random read/write""" q = SQLiteQueue(self.path) n = 0 for i in range(1000): if random.random() < 0.5: if n > 0: q.get() n -= 1 else: self.assertEqual(None, q.get()) else: q.put('var%d' % random.getrandbits(16)) n += 1
def test_random_read_write(self): """Test random read/write""" q = SQLiteQueue(self.path, auto_commit=self.auto_commit) n = 0 for i in range(1000): if random.random() < 0.5: if n > 0: q.get() n -= 1 else: self.assertEqual(None, q.get()) else: q.put('var%d' % random.getrandbits(16)) task_done_if_required(q) n += 1
def test_get_raw(self): q = SQLiteQueue(path=self.path) q.put("val1") item = q.get(raw=True) # item should get val2 self.assertEqual(True, "pqid" in item) self.assertEqual(item.get("data"), 'val1')
def test_multi_threaded_parallel(self): """Create consumer and producer threads, check parallelism""" # self.skipTest("Not supported multi-thread.") m_queue = SQLiteQueue(path=self.path, multithreading=True, auto_commit=self.auto_commit) def producer(): for i in range(1000): m_queue.put('var%d' % i) task_done_if_required(m_queue) def consumer(): for i in range(1000): x = m_queue.get(block=True) self.assertEqual('var%d' % i, x) c = Thread(target=consumer) c.start() p = Thread(target=producer) p.start() p.join() c.join() self.assertEqual(0, m_queue.size) self.assertEqual(0, len(m_queue)) self.assertIsNone(m_queue.get(block=False))
def test_open_close_1000(self): """Write 1000 items, close, reopen checking if all items are there""" q = SQLiteQueue(self.path) for i in range(1000): q.put('var%d' % i) self.assertEqual(1000, q.qsize()) del q q = SQLiteQueue(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)
def test_raise_empty(self): q = SQLiteQueue(self.path, auto_commit=self.auto_commit) q.put('first') task_done_if_required(q) d = q.get() self.assertEqual('first', d) self.assertRaises(Empty, q.get, block=True)
def test_open_close_single(self): """Write 1 item, close, reopen checking if same item is there""" q = SQLiteQueue(self.path, auto_commit=self.auto_commit) q.put(b'var1') del q q = SQLiteQueue(self.path) self.assertEqual(1, q.qsize()) self.assertEqual(b'var1', q.get())
def test_get_id(self): q = SQLiteQueue(path=self.path) q.put("val1") val2_id = q.put("val2") q.put("val3") item = q.get(id=val2_id) # item id should be 2 self.assertEqual(val2_id, 2) # item should get val2 self.assertEqual(item, 'val2')
def test_raise_empty(self): q = SQLiteQueue(self.path, auto_commit=self.auto_commit) q.put('first') d = q.get() self.assertEqual('first', d) self.assertRaises(Empty, q.get, block=False) # assert with timeout self.assertRaises(Empty, q.get, block=True, timeout=1.0) # assert with negative timeout self.assertRaises(ValueError, q.get, block=True, timeout=-1.0)
def test_json_serializer(self): q = SQLiteQueue( path=self.path, serializer=serializers_json) x = dict( a=1, b=2, c=dict( d=list(range(5)), e=[1] )) q.put(x) self.assertEquals(q.get(), x)
def get_fifo_event( username: str = Depends(get_verified_username), event_queue: persistqueue.SQLiteQueue = Depends(_get_queue_session), ): """ ... """ if event_queue.size == 0: return JSONResponse( status_code=status.HTTP_204_NO_CONTENT, content="No available events present.", ) log.info(f"Sending FIFO slack event to user {username}") return dict( event=event_queue.get(), events_left_in_queue=event_queue.size, )
def test_put_0(self): q = SQLiteQueue(path=self.path) q.put(0) d = q.get(block=False) self.assertIsNotNone(d)
def test_update(self): q = SQLiteQueue(path=self.path) qid = q.put("val1") q.update(item="val2", id=qid) item = q.get(id=qid) self.assertEqual(item, "val2")