示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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'))
示例#4
0
    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"))
示例#5
0
    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)
示例#6
0
    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")
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
    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)
示例#10
0
    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)
示例#11
0
    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)