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_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_process_stops_on_stop_token_in_queue(self): token = 'STOP' expected_flushed_metrics_count = 2 metrics = (Counter('user.login', 1), Set('username', 'navdoon'), Counter('user.login', 3), token, Counter('user.login', -1), Counter('user.logout', 1),) queue_ = Queue() destination = StubDestination() destination.expected_count = expected_flushed_metrics_count processor = QueueProcessor(queue_) processor.flush_interval = 2 processor.stop_process_token = token processor.set_destinations([destination]) process_thread = Thread(target=processor.process) process_thread.start() processor.wait_until_processing(5) for metric in metrics: if metric is token: sleep(processor.flush_interval) # make sure one flush happened before token request = metric else: request = metric.to_request() queue_.put(request) # make sure the processor has process the queue processor.wait_until_shutdown(5) self.assertFalse(processor.is_processing()) destination.wait_until_expected_count_items(10) self.assertEqual(expected_flushed_metrics_count, len(destination.metrics)) self.assertEqual(('user.login', 4), destination.metrics[0][:2]) self.assertEqual(('username', 1), destination.metrics[1][:2])
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)
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)
def test_process_stops_on_stop_token_in_queue(self): token = 'STOP' expected_flushed_metrics_count = 2 metrics = ( Counter('user.login', 1), Set('username', 'navdoon'), Counter('user.login', 3), token, Counter('user.login', -1), Counter('user.logout', 1), ) queue_ = Queue() destination = StubDestination() destination.expected_count = expected_flushed_metrics_count processor = QueueProcessor(queue_) processor.flush_interval = 2 processor.stop_process_token = token processor.set_destinations([destination]) process_thread = Thread(target=processor.process) process_thread.start() processor.wait_until_processing(5) for metric in metrics: if metric is token: sleep(processor.flush_interval ) # make sure one flush happened before token request = metric else: request = metric.to_request() queue_.put(request) # make sure the processor has process the queue processor.wait_until_shutdown(5) self.assertFalse(processor.is_processing()) destination.wait_until_expected_count_items(10) self.assertEqual(expected_flushed_metrics_count, len(destination.metrics)) self.assertEqual(('user.login', 4), destination.metrics[0][:2]) self.assertEqual(('username', 1), destination.metrics[1][:2])
def test_set_destinations_when_not_started(self): processor = QueueProcessor(Queue()) destinations = [StubDestination()] processor.set_destinations(destinations) self.assertEqual(destinations, processor._destinations) self.assertFalse(processor.is_processing())
def test_set_destinations_when_not_started(self): processor = QueueProcessor(Queue()) destinations = [StubDestination()] processor.set_destinations(destinations) self.assertEqual(destinations, processor._destinations) self.assertFalse(processor.is_processing())