def test_set_flush_interval_accepts_positive_numbers(self): processor = QueueProcessor(Queue()) processor.flush_interval = 103 self.assertEqual(103, processor.flush_interval) processor.flush_interval = 0.58 self.assertEqual(0.58, processor.flush_interval) processor.flush_interval = '3.4' self.assertEqual(3.4, processor.flush_interval)
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_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])