From 217fd08c67b8c038176241aef4bb658297d8beae Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 29 Feb 2024 14:29:22 -0500 Subject: [PATCH] lib: split "message-clock-classes-are-compatible" post-condition in multiple post-conditions Currently, `clock_classes_are_compatible()` returns a bool indicating if the clock classes referenced in the current batch of messages are compatible with the clock classes seen previously by the iterator. If there is any incompatibility, whatever the reason, the "message-clock-classes-are-compatible" post-condition check is triggered. A subsequent patch will want to test each individual clock class incompatibility case, which is not easy if they all produce a message with the same condition id. Change `clock_classes_are_compatible_one()` to directly do the post-condition checks, and give a unique name to each check. Rename to `assert_post_dev_clock_classes_are_compatible_one`, in line with the existing `assert_post_dev_expected_packet()` & co. Adjust and rename `clock_classes_are_compatible()` accordingly. Change-Id: I38937422f731c0cfebad70f183be97144d43e121 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/11954 Reviewed-by: Philippe Proulx Tested-by: jenkins --- src/lib/graph/iterator.c | 142 ++++++++++++++------------------------- 1 file changed, 49 insertions(+), 93 deletions(-) diff --git a/src/lib/graph/iterator.c b/src/lib/graph/iterator.c index 760affc7..39746df3 100644 --- a/src/lib/graph/iterator.c +++ b/src/lib/graph/iterator.c @@ -667,18 +667,21 @@ end: return result; } +#define NEXT_METHOD_NAME "bt_message_iterator_class_next_method" + +#ifdef BT_DEV_MODE + /* * When a new stream begins, verify that the clock class tied to this * stream is compatible with what we've seen before. */ -BT_ASSERT_COND_DEV_FUNC static -bool clock_classes_are_compatible_one(struct bt_message_iterator *iterator, +void assert_post_dev_clock_classes_are_compatible_one( + struct bt_message_iterator *iterator, const struct bt_message *msg) { enum bt_message_type message_type = bt_message_get_type(msg); - bool result; if (message_type == BT_MESSAGE_TYPE_STREAM_BEGINNING) { const struct bt_message_stream *stream_msg = (struct bt_message_stream *) msg; @@ -713,118 +716,77 @@ bool clock_classes_are_compatible_one(struct bt_message_iterator *iterator, break; case CLOCK_EXPECTATION_NONE: - if (clock_class) { - BT_ASSERT_COND_DEV_MSG( - "Expecting no clock class, got one: %![cc-]+K", - clock_class); - result = false; - goto end; - } - + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "stream-class-has-no-clock-class", !clock_class, + "Expecting no clock class, got one: %![cc-]+K", + clock_class); break; case CLOCK_EXPECTATION_ORIGIN_UNIX: - if (!clock_class) { - BT_ASSERT_COND_DEV_MSG( - "Expecting a clock class, got none."); - result = false; - goto end; - } + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "stream-class-has-clock-class-with-unix-epoch-origin", clock_class, + "Expecting a clock class with Unix epoch origin, got none."); - if (!bt_clock_class_origin_is_unix_epoch(clock_class)) { - BT_ASSERT_COND_DEV_MSG( - "Expecting a clock class with Unix epoch origin: %![cc-]+K", - clock_class); - result = false; - goto end; - } + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "clock-class-has-unix-epoch-origin", + bt_clock_class_origin_is_unix_epoch(clock_class), + "Expecting a clock class with Unix epoch origin: %![cc-]+K", + clock_class); break; case CLOCK_EXPECTATION_ORIGIN_OTHER_UUID: - if (!clock_class) { - BT_ASSERT_COND_DEV_MSG( - "Expecting a clock class, got none."); - result = false; - goto end; - } + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "stream-class-has-clock-class-with-uuid", clock_class, + "Expecting a clock class with UUID, got none."); - if (bt_clock_class_origin_is_unix_epoch(clock_class)) { - BT_ASSERT_COND_DEV_MSG( - "Expecting a clock class without Unix epoch origin: %![cc-]+K", - clock_class); - result = false; - goto end; - } + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "clock-class-has-non-unix-epoch-origin", + !bt_clock_class_origin_is_unix_epoch(clock_class), + "Expecting a clock class without Unix epoch origin: %![cc-]+K", + clock_class); - if (!clock_class_uuid) { - BT_ASSERT_COND_DEV_MSG( - "Expecting a clock class with UUID: %![cc-]+K", - clock_class); - result = false; - goto end; - } + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "clock-class-has-uuid", + clock_class_uuid, + "Expecting a clock class with UUID, got one without UUID: %![cc-]+K", + clock_class); - if (bt_uuid_compare(iterator->clock_expectation.uuid, clock_class_uuid)) { - BT_ASSERT_COND_DEV_MSG( - "Expecting a clock class with UUID, got one " + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "clock-class-has-expected-uuid", + !bt_uuid_compare(iterator->clock_expectation.uuid, clock_class_uuid), + "Expecting a clock class with UUID, got one " "with a different UUID: %![cc-]+K, expected-uuid=%!u", clock_class, iterator->clock_expectation.uuid); - result = false; - goto end; - } break; case CLOCK_EXPECTATION_ORIGIN_OTHER_NO_UUID: - if (!clock_class) { - BT_ASSERT_COND_DEV_MSG( - "Expecting clock class %![cc-]+K, got none.", - iterator->clock_expectation.clock_class); - result = false; - goto end; - } - - if (clock_class != iterator->clock_expectation.clock_class) { - BT_ASSERT_COND_DEV_MSG( - "Expecting clock class %![cc-]+K, got %![cc-]+K.", - iterator->clock_expectation.clock_class, - clock_class); - result = false; - goto end; - } + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "stream-class-has-clock-class", clock_class, + "Expecting a clock class, got none."); + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, + "clock-class-is-expected", + clock_class == iterator->clock_expectation.clock_class, + "Expecting clock class %![cc-]+K, got %![cc-]+K.", + iterator->clock_expectation.clock_class, + clock_class); break; } } - - result = true; - -end: - return result; } -BT_ASSERT_COND_DEV_FUNC static -bool clock_classes_are_compatible( +void assert_post_dev_clock_classes_are_compatible( struct bt_message_iterator *iterator, bt_message_array_const msgs, uint64_t msg_count) { uint64_t i; - bool result; for (i = 0; i < msg_count; i++) { - if (!clock_classes_are_compatible_one(iterator, msgs[i])) { - result = false; - goto end; - } + assert_post_dev_clock_classes_are_compatible_one(iterator, msgs[i]); } - - result = true; - -end: - return result; } -#ifdef BT_DEV_MODE static const bt_stream *get_stream_from_msg(const struct bt_message *msg) { @@ -1028,11 +990,7 @@ struct per_stream_state *get_per_stream_state( return state; } -#endif - -#define NEXT_METHOD_NAME "bt_message_iterator_class_next_method" -#ifdef BT_DEV_MODE static void assert_post_dev_expected_sequence(struct bt_message_iterator *iterator, const struct bt_message *msg) @@ -1183,11 +1141,9 @@ call_iterator_next_method( bt_common_func_status_string(status), *user_count); if (status == BT_FUNC_STATUS_OK) { - BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, - "message-clock-classes-are-compatible", - clock_classes_are_compatible(iterator, msgs, - *user_count), - "Clocks are not compatible"); + BT_IF_DEV_MODE(assert_post_dev_clock_classes_are_compatible( + iterator, msgs, *user_count)); + BT_ASSERT_POST_DEV(NEXT_METHOD_NAME, "message-clock-snapshots-are-monotonic", clock_snapshots_are_monotonic(iterator, msgs, -- 2.34.1