def test_multiple_enqueue_of_expired_job(self, enqueue, fetch_job): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, query, { "Username": "******", "Query ID": query.id }, ) # "expire" the previous job fetch_job.side_effect = NoSuchJobError enqueue_query( query.query_text, query.data_source, query.user_id, False, query, { "Username": "******", "Query ID": query.id }, ) self.assertEqual(2, enqueue.call_count)
def test_worker_records_success_metrics(self, incr): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, None, { "Username": "******", "query_id": query.id }, ) Worker(["queries"]).work(max_jobs=1) calls = [ call("rq.jobs.running.queries"), call("rq.jobs.started.queries"), call("rq.jobs.running.queries", -1, 1), call("rq.jobs.finished.queries"), ] incr.assert_has_calls(calls)
def test_limits_query_time(self, _): query = self.factory.create_query() execute_query.apply_async = mock.MagicMock(side_effect=gen_hash) enqueue_query(query.query_text, query.data_source, query.user_id, False, query, {'Username': '******', 'Query ID': query.id}) _, kwargs = execute_query.apply_async.call_args self.assertEqual(60, kwargs.get('soft_time_limit'))
def test_limits_query_time(self, _, enqueue, __): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, query, {"Username": "******", "Query ID": query.id}, ) _, kwargs = enqueue.call_args self.assertEqual(60, kwargs.get("job_timeout"))
def test_worker_records_failure_metrics(self, _, incr): """ Force superclass execute_job to do nothing and set status to JobStatus.Failed to simulate query failure """ query = self.factory.create_query() with Connection(rq_redis_connection): job = enqueue_query( query.query_text, query.data_source, query.user_id, False, None, { "Username": "******", "query_id": query.id }, ) job.set_status(JobStatus.FAILED) Worker(["queries"]).work(max_jobs=1) calls = [ call("rq.jobs.running.queries"), call("rq.jobs.started.queries"), call("rq.jobs.running.queries", -1, 1), call("rq.jobs.failed.queries"), ] incr.assert_has_calls(calls)
def test_enqueue_query_records_created_metric(self, incr): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, None, { "Username": "******", "query_id": query.id }, ) incr.assert_called_with("rq.jobs.created.queries")
def test_multiple_enqueue_of_different_query(self): query = self.factory.create_query() execute_query.apply_async = mock.MagicMock(side_effect=gen_hash) enqueue_query( query.query_text, query.data_source, query.user_id, False, None, {"Username": "******", "Query ID": query.id}, ) enqueue_query( query.query_text + "2", query.data_source, query.user_id, False, None, {"Username": "******", "Query ID": query.id}, ) enqueue_query( query.query_text + "3", query.data_source, query.user_id, False, None, {"Username": "******", "Query ID": query.id}, ) self.assertEqual(3, execute_query.apply_async.call_count)
def test_multiple_enqueue_of_same_query(self, enqueue, _): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, query, {"Username": "******", "Query ID": query.id}, ) enqueue_query( query.query_text, query.data_source, query.user_id, False, query, {"Username": "******", "Query ID": query.id}, ) enqueue_query( query.query_text, query.data_source, query.user_id, False, query, {"Username": "******", "Query ID": query.id}, ) self.assertEqual(1, enqueue.call_count)
def test_reenqueue_during_job_cancellation(self, enqueue, my_fetch_job): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, query, { "Username": "******", "Query ID": query.id }, ) # "cancel" the previous job def cancel_job(*args, **kwargs): job = fetch_job(*args, **kwargs) job.is_cancelled = True return job my_fetch_job.side_effect = cancel_job enqueue_query( query.query_text, query.data_source, query.user_id, False, query, { "Username": "******", "Query ID": query.id }, ) self.assertEqual(2, enqueue.call_count)
def test_multiple_enqueue_of_different_query(self): query = self.factory.create_query() execute_query.apply_async = mock.MagicMock(side_effect=gen_hash) enqueue_query(query.query_text, query.data_source, query.user_id, False, None, {'Username': '******', 'Query ID': query.id}) enqueue_query(query.query_text + '2', query.data_source, query.user_id, False, None, {'Username': '******', 'Query ID': query.id}) enqueue_query(query.query_text + '3', query.data_source, query.user_id, False, None, {'Username': '******', 'Query ID': query.id}) self.assertEqual(3, execute_query.apply_async.call_count)
def test_multiple_enqueue_of_different_query(self, enqueue, _): query = self.factory.create_query() with Connection(rq_redis_connection): enqueue_query( query.query_text, query.data_source, query.user_id, False, None, { "Username": "******", "query_id": query.id }, ) enqueue_query( query.query_text + "2", query.data_source, query.user_id, False, None, { "Username": "******", "query_id": query.id }, ) enqueue_query( query.query_text + "3", query.data_source, query.user_id, False, None, { "Username": "******", "query_id": query.id }, ) self.assertEqual(3, enqueue.call_count)