def test_enqueue_request(self):
        bt = BaseThrottler(max_pool_size=1)
        throttled_request, _ = bt._prepare_request(self.default_request)
        bt._enqueue_request(throttled_request)
        self.assertEqual(1, len(bt._requests_pool))

        throttled_request, _ = bt._prepare_request(self.default_request)
        with self.assertRaises(FullRequestsPoolError):
            bt._enqueue_request(throttled_request)
    def test_enqueue_request(self):
        bt = BaseThrottler(max_pool_size=1)
        throttled_request, _ = bt._prepare_request(self.default_request)
        bt._enqueue_request(throttled_request)
        self.assertEqual(1, len(bt._requests_pool))

        throttled_request, _ = bt._prepare_request(self.default_request)
        with self.assertRaises(FullRequestsPoolError):
            bt._enqueue_request(throttled_request)
    def test_dequeue_request(self):
        bt = BaseThrottler()
        for wait_enqueued in [True, False]:
            bt._status = 'stopped'
            request = bt._dequeue_request()
            self.assertIsNone(request)

        bt._status = 'running'
        throttled_request, _ = bt._prepare_request(self.default_request)
        bt._enqueue_request(throttled_request)
        request = bt._dequeue_request()
        self.assertEqual(throttled_request, request)
    def test_dequeue_request(self):
        bt = BaseThrottler()
        for wait_enqueued in [True, False]:
            bt._status = 'stopped'
            request = bt._dequeue_request()
            self.assertIsNone(request)

        bt._status = 'running'
        throttled_request, _ = bt._prepare_request(self.default_request)
        bt._enqueue_request(throttled_request)
        request = bt._dequeue_request()
        self.assertEqual(throttled_request, request)
    def test_dequeue_condition(self):
        bt = BaseThrottler()

        bt._status = 'running'
        self.assertEqual((True, False), bt._dequeue_condition())
        self.assertEqual('waiting', bt._status)

        bt._status = 'paused'
        self.assertEqual((True, False), bt._dequeue_condition())
        self.assertEqual('paused', bt._status)

        for wait_enqueued in [True, False]:
            bt._status = 'stopped'
            bt._wait_enqueued = wait_enqueued
            self.assertEqual((False, False), bt._dequeue_condition())
        self.assertEqual('ending', bt._status)

        throttled_request, _ = bt._prepare_request(self.default_request)
        bt._enqueue_request(throttled_request)

        bt._status = 'running'
        self.assertEqual((False, True), bt._dequeue_condition())
        self.assertEqual('running', bt._status)

        bt._status = 'paused'
        self.assertEqual((True, False), bt._dequeue_condition())
        self.assertEqual('paused', bt._status)

        for wait_enqueued in [True, False]:
            bt._status = 'stopped'
            bt._wait_enqueued = wait_enqueued
            if wait_enqueued:
                self.assertEqual((False, True), bt._dequeue_condition())
            else:
                self.assertEqual((False, False), bt._dequeue_condition())
        self.assertEqual('ending', bt._status)
    def test_dequeue_condition(self):
        bt = BaseThrottler()

        bt._status = 'running'
        self.assertEqual((True, False), bt._dequeue_condition())
        self.assertEqual('waiting', bt._status)

        bt._status = 'paused'
        self.assertEqual((True, False), bt._dequeue_condition())
        self.assertEqual('paused', bt._status)

        for wait_enqueued in [True, False]:
            bt._status = 'stopped'
            bt._wait_enqueued = wait_enqueued
            self.assertEqual((False, False), bt._dequeue_condition())
        self.assertEqual('ending', bt._status)

        throttled_request, _ = bt._prepare_request(self.default_request)
        bt._enqueue_request(throttled_request)

        bt._status = 'running'
        self.assertEqual((False, True), bt._dequeue_condition())
        self.assertEqual('running', bt._status)

        bt._status = 'paused'
        self.assertEqual((True, False), bt._dequeue_condition())
        self.assertEqual('paused', bt._status)

        for wait_enqueued in [True, False]:
            bt._status = 'stopped'
            bt._wait_enqueued = wait_enqueued
            if wait_enqueued:
                self.assertEqual((False, True), bt._dequeue_condition())
            else:
                self.assertEqual((False, False), bt._dequeue_condition())
        self.assertEqual('ending', bt._status)