def test_destinations_can_change_when_queue_processor_is_running(self): processor = QueueProcessor(Queue()) try: destinations = [StubDestination()] processor.set_destinations(destinations) processor_thread = Thread(target=processor.process) processor_thread.start() processor.wait_until_processing(10) self.assertTrue(processor.is_processing()) new_destinations = [StubDestination()] processor.set_destinations(new_destinations) self.assertEqual(new_destinations, processor.get_destinations()) self.assertTrue(processor.is_processing()) finally: processor.shutdown()
def test_continues_processing_after_reload(self): metrics = (Counter('user.login', 1), Set('username', 'navdoon'), Counter('user.login', 3)) queue_ = Queue() destination = StubDestination() destination.expected_count = 1 processor = QueueProcessor(queue_) processor.flush_interval = 1 processor.set_destinations([destination]) process_thread = Thread(target=processor.process) process_thread.start() processor.wait_until_processing(5) expected_flushed_metrics2 = 2 destination2 = StubDestination() destination2.expected_count = expected_flushed_metrics2 processor.set_destinations([destination2]) for metric in metrics: queue_.put(metric.to_request()) destination.wait_until_expected_count_items(5) processor.shutdown() process_thread.join(5) self.assertFalse(processor.is_processing()) self.assertGreaterEqual(len(destination.metrics), 1) self.assertLessEqual(queue_.qsize(), 2) for metric in metrics: queue_.put(metric.to_request()) self.assertGreaterEqual(queue_.qsize(), len(metrics)) resume_process_thread = Thread(target=processor.process) resume_process_thread.start() processor.wait_until_processing(5) self.assertTrue(processor.is_processing()) self.assertEqual(processor.get_destinations(), [destination2]) destination2.wait_until_expected_count_items(5) processor.shutdown() resume_process_thread.join(5) self.assertGreaterEqual(len(destination2.metrics), expected_flushed_metrics2)