From 6cdf9e1b9cd962c14a0a8f2518017dbb5b836453 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Wed, 10 Jul 2019 12:53:54 +0200 Subject: [PATCH] Relax intraprocess test to make it more stable --- tracetools_test/test/test_intra.py | 30 ++++++++++++++--------- tracetools_test/test/test_publisher.py | 7 ++++-- tracetools_test/test/test_service.py | 5 +++- tracetools_test/test/test_subscription.py | 4 +-- tracetools_test/test/test_timer.py | 2 +- tracetools_test/tracetools_test/case.py | 17 ++++++++++++- 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/tracetools_test/test/test_intra.py b/tracetools_test/test/test_intra.py index a3e2a7e..413b5d3 100644 --- a/tracetools_test/test/test_intra.py +++ b/tracetools_test/test/test_intra.py @@ -46,11 +46,11 @@ class TestIntra(TraceTestCase): 'topic_name', '/the_topic/_intra', sub_init_events) - self.assertNumEvents( + self.assertNumEventsEqual( sub_init_normal_events, 1, 'none or more than 1 sub init event for normal sub') - self.assertNumEvents( + self.assertNumEventsEqual( sub_init_intra_events, 1, 'none or more than 1 sub init event for intra sub') @@ -68,7 +68,7 @@ class TestIntra(TraceTestCase): sub_handle_intra, self.get_events_with_name( 'ros2:rclcpp_subscription_callback_added')) - self.assertNumEvents( + self.assertNumEventsEqual( callback_added_events, 1, 'none or more than 1 callback added event') @@ -78,9 +78,15 @@ class TestIntra(TraceTestCase): # Get corresponding callback start/end pairs start_events = self.get_events_with_name('ros2:callback_start') end_events = self.get_events_with_name('ros2:callback_end') - # Should still have two start:end pairs (1 normal + 1 intra) - self.assertNumEvents(start_events, 2, 'does not have 2 callback start events') - self.assertNumEvents(end_events, 2, 'does not have 2 callback end events') + # Should still have at least two start:end pairs (1 normal + 1 intra) + self.assertNumEventsGreaterEqual( + start_events, + 2, + 'does not have at least 2 callback start events') + self.assertNumEventsGreaterEqual( + end_events, + 2, + 'does not have at least 2 callback end events') start_events_intra = self.get_events_with_field_value( 'callback', callback_handle_intra, @@ -89,14 +95,14 @@ class TestIntra(TraceTestCase): 'callback', callback_handle_intra, end_events) - self.assertNumEvents( + self.assertNumEventsGreaterEqual( start_events_intra, 1, - 'none or more than one intra start event') - self.assertNumEvents( + 'no intra start event') + self.assertNumEventsGreaterEqual( end_events_intra, 1, - 'none or more than one intra end event') + 'no intra end event') # Check is_intra_process field value start_event_intra = start_events_intra[0] @@ -111,10 +117,10 @@ class TestIntra(TraceTestCase): 'callback', callback_handle_intra, start_events) - self.assertNumEvents( + self.assertNumEventsGreaterEqual( start_events_not_intra, 1, - 'none or more than one normal start event') + 'no normal start event') start_event_not_intra = start_events_not_intra[0] self.assertFieldEquals( start_event_not_intra, diff --git a/tracetools_test/test/test_publisher.py b/tracetools_test/test/test_publisher.py index b236518..595de47 100644 --- a/tracetools_test/test/test_publisher.py +++ b/tracetools_test/test/test_publisher.py @@ -49,7 +49,7 @@ class TestPublisher(TraceTestCase): 'topic_name', '/the_topic', test_pub_init_events) - self.assertNumEvents( + self.assertNumEventsEqual( test_pub_init_topic_events, 1, 'none or more than 1 pub_init even for test topic') @@ -67,7 +67,10 @@ class TestPublisher(TraceTestCase): test_pub_node_init_events = self.get_events_with_procname( 'test_publisher', node_init_events) - self.assertNumEvents(test_pub_node_init_events, 1, 'none or more than 1 node_init event') + self.assertNumEventsEqual( + test_pub_node_init_events, + 1, + 'none or more than 1 node_init event') test_pub_node_init_event = test_pub_node_init_events[0] self.assertMatchingField( test_pub_node_init_event, diff --git a/tracetools_test/test/test_service.py b/tracetools_test/test/test_service.py index fc8d5b5..f4a315c 100644 --- a/tracetools_test/test/test_service.py +++ b/tracetools_test/test/test_service.py @@ -61,7 +61,10 @@ class TestService(TraceTestCase): test_srv_node_init_events = self.get_events_with_procname( 'test_service', node_init_events) - self.assertNumEvents(test_srv_node_init_events, 1, 'none or more than 1 node_init event') + self.assertNumEventsEqual( + test_srv_node_init_events, + 1, + 'none or more than 1 node_init event') test_srv_node_init_event = test_srv_node_init_events[0] self.assertMatchingField( test_srv_node_init_event, diff --git a/tracetools_test/test/test_subscription.py b/tracetools_test/test/test_subscription.py index 1dbfe9c..c7ba776 100644 --- a/tracetools_test/test/test_subscription.py +++ b/tracetools_test/test/test_subscription.py @@ -54,7 +54,7 @@ class TestSubscription(TraceTestCase): 'topic_name', '/the_topic', sub_init_events) - self.assertNumEvents(test_sub_init_events, 1, 'cannot find test topic name') + self.assertNumEventsEqual(test_sub_init_events, 1, 'cannot find test topic name') test_sub_init_event = test_sub_init_events[0] # Check queue_depth value @@ -69,7 +69,7 @@ class TestSubscription(TraceTestCase): test_sub_node_init_events = self.get_events_with_procname( 'test_subscription', node_init_events) - self.assertNumEvents( + self.assertNumEventsEqual( test_sub_node_init_events, 1, 'none or more than 1 node_init event') diff --git a/tracetools_test/test/test_timer.py b/tracetools_test/test/test_timer.py index 067d16f..308e7df 100644 --- a/tracetools_test/test/test_timer.py +++ b/tracetools_test/test/test_timer.py @@ -64,7 +64,7 @@ class TestTimer(TraceTestCase): # Find and check given timer period test_timer_init_event = self.get_events_with_procname('test_timer', init_events) - self.assertNumEvents(test_timer_init_event, 1, 'none or more test timer init events') + self.assertNumEventsEqual(test_timer_init_event, 1, 'none or more test timer init events') test_init_event = test_timer_init_event[0] self.assertFieldEquals(test_init_event, 'period', 1000000, 'invalid period') diff --git a/tracetools_test/tracetools_test/case.py b/tracetools_test/tracetools_test/case.py index 559a7e9..c581b7a 100644 --- a/tracetools_test/tracetools_test/case.py +++ b/tracetools_test/tracetools_test/case.py @@ -172,7 +172,7 @@ class TraceTestCase(unittest.TestCase): """ self.assertTrue(self.are_events_ordered(first_event, second_event)) - def assertNumEvents( + def assertNumEventsEqual( self, events: List[DictEvent], expected_number: int, @@ -187,6 +187,21 @@ class TraceTestCase(unittest.TestCase): """ self.assertEqual(len(events), expected_number, msg) + def assertNumEventsGreaterEqual( + self, + events: List[DictEvent], + min_expected_number: int, + msg: str = 'wrong number of events' + ): + """ + Check that the number of events is greater of equal. + + :param events: the events to check + :param min_expected_number: the minimum expected number of events + :param msg: the message to display on failure + """ + self.assertGreaterEqual(len(events), min_expected_number, msg) + def assertMatchingField( self, initial_event: DictEvent,