def test_change_state(self): job = Job('change-state') states = [JOB_ENQUEUED, JOB_DEQUEUED, JOB_RESERVED] for s in states: job.change_state(s) self.assertEqual(s, job.state) self.assertNotEqual(0, job.state) if s == JOB_ENQUEUED: self.assertIsNotNone(job.enqueue_ts) if s == JOB_DEQUEUED: self.assertIsNotNone(job.dequeue_ts)
def test_change_state_exception(self): job = Job('test-except') with self.assertRaises(ValueError) as ar: job.change_state(-1) self.assertIsInstance(ar.exception, ValueError) try: with self.assertRaises(ValueError) as ar: job.change_state(JOB_DEQUEUED) except AssertionError: pass
def test_release(self, mock_redis): queue = ReliableQueue(mock_redis) qname = md5(self.user_id + "_queue").hexdigest() job = Job(self.uuid) job.change_state(JOB_DEQUEUED) mock_redis.hget.return_value = pickle.dumps(job) mock_redis.pipeline.return_value.execute.return_value = \ 10, 1, 1, 1, 10 q_len = total_len = -1 q_len, total_len = queue.release(qname, self.uuid) self.assertEqual(1, q_len) self.assertEqual(10, total_len)
def test_dequeue(self, mock_redis): queue = ReliableQueue(mock_redis) qname = md5(self.user_id + "_queue").hexdigest() mock_redis.rpoplpush.return_value = self.uuid mock_redis.pipeline.return_value.execute.return_value = \ self.data, pickle.dumps(Job(self.uuid)) k, data = queue.dequeue(qname, self.uuid) self.assertEqual(k, self.uuid) self.assertEqual(data, self.data)
def test_release_undequeued_job(self): queue = HashQueue(self.mock_redis_conn, has_proxy=True) qname = md5(self.user_id + "_queue").hexdigest() job = pickle.dumps(Job(self.uuid)) self.mock_redis_conn.get.return_value = 10 self.mock_redis_conn.hget.return_value = job with self.assertRaises(ERedisReleaseError) as ar: queue.release(qname, self.uuid) self.assertIsInstance(ar.exception, ERedisReleaseError)
def test_dequeue_data_missing(self): queue = HashQueue(self.mock_redis_conn, has_proxy=True) qname = md5(self.user_id + "_queue").hexdigest() job = pickle.dumps(Job(self.uuid)) self.mock_redis_conn.pipeline.return_value.execute.return_value =\ None, job with self.assertRaises(ERedisDataMissing) as ar: k, data = queue.dequeue(qname, self.uuid) self.assertIsInstance(ar.exception, ERedisDataMissing)
def test_dequeue(self): queue = HashQueue(self.mock_redis_conn, has_proxy=True) qname = md5(self.user_id + "_queue").hexdigest() job = pickle.dumps(Job(self.uuid)) self.mock_redis_conn.pipeline.return_value.execute.return_value =\ self.data, job k, data = queue.dequeue(qname, self.uuid) self.assertEqual(k, self.uuid) self.assertEqual(data, self.data)
def test_dequeue_data_missing(self, mock_redis): queue = ReliableQueue(mock_redis) qname = md5(self.user_id + "_queue").hexdigest() mock_redis.rpoplpush.return_value = "anan" k = data = None mock_redis.pipeline.return_value.execute.return_value = \ None, pickle.dumps(Job(self.uuid)) with self.assertRaises(ERedisDataMissing) as ar: k, data = queue.dequeue(qname, "anan") self.assertIsNone(k) self.assertIsNone(data) self.assertIsInstance(ar.exception, ERedisDataMissing)
def test_release_undequeued_job(self, mock_redis): queue = ReliableQueue(mock_redis) qname = md5(self.user_id + "_queue").hexdigest() job = Job(self.uuid) mock_redis.hget.return_value = pickle.dumps(job) mock_redis.pipeline.return_value.execute.return_value = \ 10, 1, 1, 1, 10 q_len = total_len = -1 with self.assertRaises(ERedisReleaseError) as ar: q_len, total_len = queue.release(qname, self.uuid) self.assertEqual(-1, q_len) self.assertEqual(-1, total_len) self.assertIsInstance(ar.exception, ERedisReleaseError)
def test_release(self): queue = HashQueue(self.mock_redis_conn, has_proxy=True) qname = md5(self.user_id + "_queue").hexdigest() job = pickle.dumps(Job(self.uuid)) job = pickle.loads(job) job.change_state(JOB_DEQUEUED) job = pickle.dumps(job) self.mock_redis_conn.get.return_value = 10 self.mock_redis_conn.hget.return_value = job self.mock_redis_conn.pipeline.return_value.execute.return_value =\ 1, 1, 9, 9 l1, l2 = queue.release(qname, self.uuid) self.assertEqual(9, l1) self.assertEqual(9, l2)
def test_release_pipeline_timeout_error(self): self.mock_redis_conn.get.return_value = 10 self.mock_redis_conn.hget.side_effect = TimeoutError queue = HashQueue(self.mock_redis_conn) qname = md5(self.user_id + "_queue").hexdigest() with self.assertRaises(TimeoutError) as ar: queue.release(qname, self.uuid) self.assertIsInstance(ar.exception, TimeoutError) self.mock_redis_conn.reset_mock() self.mock_redis_conn.get.side_effect = TimeoutError with self.assertRaises(TimeoutError) as ar: queue.release(qname, self.uuid) self.assertIsInstance(ar.exception, TimeoutError) self.mock_redis_conn.reset_mock() self.mock_redis_conn.get.return_value = 10 self.mock_redis_conn.hget.return_value = pickle.dumps(Job(self.uuid)) self.mock_redis_conn.pipeline.return_value.execute.side_effect =\ TimeoutError with self.assertRaises(TimeoutError) as ar: queue.release(qname, self.uuid) self.assertIsInstance(ar.exception, TimeoutError)
def test_change_state_to_reserved(self): job = Job('test-known') job.change_state(JOB_RESERVED) self.assertIsNone(job.enqueue_ts) self.assertIsNone(job.dequeue_ts) self.assertEqual(JOB_RESERVED, job.state)