def test_enqueue_dequeue(self, mock_may_be_start_runner):
        workq = WorkQueue(self.worker, start_runner=None, max_qsize=1)
        entry = WorkQueueEntry()

        # basic enqueue test
        self.assertEqual(True, workq.enqueue(entry))
        self.assertEqual(1, workq.num_enqueues())
        self.assertEqual(0, workq.drops())
        self.assertEqual(1, workq.size())
        self.assertEqual(1, workq.may_be_start_runner.call_count)

        # work queue is not bounded
        # verify that we could enqueue more than max_qsize
        self.assertFalse(workq.bounded())
        self.assertEqual(True, workq.enqueue(entry))
        self.assertEqual(2, workq.num_enqueues())
        self.assertEqual(0, workq.drops())
        self.assertEqual(2, workq.size())
        self.assertEqual(2, workq.may_be_start_runner.call_count)

        # work queue is bounded
        # verify that enqueue fails if qsize > max_qsize
        workq.set_bounded(True)
        self.assertTrue(workq.bounded())
        self.assertEqual(False, workq.enqueue(entry))
        self.assertEqual(2, workq.num_enqueues())
        self.assertEqual(1, workq.drops())
        self.assertEqual(2, workq.size())
        self.assertEqual(2, workq.may_be_start_runner.call_count)

        # basic dequeue test
        self.assertIs(entry, workq.dequeue())
        self.assertEqual(1, workq.num_dequeues())
        self.assertEqual(1, workq.size())
        self.assertEqual(entry, workq.dequeue())
        self.assertEqual(2, workq.num_dequeues())
        self.assertEqual(0, workq.size())

        # call dequeue with no item in the queue
        self.assertEqual(None, workq.dequeue())
        self.assertEqual(2, workq.num_dequeues())
        self.assertEqual(0, workq.size())
    def test_enqueue_dequeue(self, mock_may_be_start_runner):
        workq = WorkQueue(self.worker, start_runner=None, max_qsize=1)
        entry = WorkQueueEntry()

        # basic enqueue test
        self.assertEqual(True, workq.enqueue(entry))
        self.assertEqual(1, workq.num_enqueues())
        self.assertEqual(0, workq.drops())
        self.assertEqual(1, workq.size())
        self.assertEqual(1, workq.may_be_start_runner.call_count)

        # work queue is not bounded
        # verify that we could enqueue more than max_qsize
        self.assertFalse(workq.bounded())
        self.assertEqual(True, workq.enqueue(entry))
        self.assertEqual(2, workq.num_enqueues())
        self.assertEqual(0, workq.drops())
        self.assertEqual(2, workq.size())
        self.assertEqual(2, workq.may_be_start_runner.call_count)

        # work queue is bounded
        # verify that enqueue fails if qsize > max_qsize
        workq.set_bounded(True)
        self.assertTrue(workq.bounded())
        self.assertEqual(False, workq.enqueue(entry))
        self.assertEqual(2, workq.num_enqueues())
        self.assertEqual(1, workq.drops())
        self.assertEqual(2, workq.size())
        self.assertEqual(2, workq.may_be_start_runner.call_count)

        # basic dequeue test
        self.assertIs(entry, workq.dequeue())
        self.assertEqual(1, workq.num_dequeues())
        self.assertEqual(1, workq.size())
        self.assertEqual(entry, workq.dequeue())
        self.assertEqual(2, workq.num_dequeues())
        self.assertEqual(0, workq.size())

        # call dequeue with no item in the queue
        self.assertEqual(None, workq.dequeue())
        self.assertEqual(2, workq.num_dequeues())
        self.assertEqual(0, workq.size())