X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Funit%2Ftest_action.cpp;h=ad323e9acc169592c68de995f4344fe6d6e0e997;hp=5256a4fca2b54c4f365c15a9ed1ebde360cc4344;hb=HEAD;hpb=28ab034a2c3582d07d3423d2d746731f87d3969f diff --git a/tests/unit/test_action.cpp b/tests/unit/test_action.cpp index 5256a4fca..52f6d26ca 100644 --- a/tests/unit/test_action.cpp +++ b/tests/unit/test_action.cpp @@ -9,11 +9,13 @@ * */ +#include #include #include #include #include +#include #include #include #include @@ -33,14 +35,14 @@ int lttng_opt_quiet = 1; int lttng_opt_verbose; int lttng_opt_mi; -#define NUM_TESTS 60 +#define NUM_TESTS 71 -static void test_action_notify(void) +static void test_action_notify() { int ret; enum lttng_action_status status; - struct lttng_action *notify_action = NULL, *notify_action_from_buffer = NULL; - struct lttng_rate_policy *policy = NULL, *default_policy; + struct lttng_action *notify_action = nullptr, *notify_action_from_buffer = nullptr; + struct lttng_rate_policy *policy = nullptr, *default_policy; struct lttng_payload payload; lttng_payload_init(&payload); @@ -59,7 +61,7 @@ static void test_action_notify(void) /* Validate the default policy for a notify action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_notify_get_rate_policy(notify_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && lttng_rate_policy_is_equal(default_policy, cur_policy), @@ -72,7 +74,7 @@ static void test_action_notify(void) /* Validate the custom policy for a notify action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_notify_get_rate_policy(notify_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && lttng_rate_policy_is_equal(policy, cur_policy), @@ -98,13 +100,99 @@ static void test_action_notify(void) lttng_payload_reset(&payload); } +static void test_action_list(void) +{ + int ret, action_idx; + struct lttng_action *list_action = NULL, *list_action_from_buffer = NULL, + *stop_session_action = NULL, *notify_action = NULL, + *start_session_action = NULL; + struct lttng_payload payload; + + lttng_payload_init(&payload); + + list_action = lttng_action_list_create(); + ok(list_action, "Create list action"); + ok(lttng_action_get_type(list_action) == LTTNG_ACTION_TYPE_LIST, + "Action has type LTTNG_ACTION_TYPE_LIST"); + + start_session_action = lttng_action_start_session_create(); + (void) lttng_action_start_session_set_session_name(start_session_action, "une-session"); + + stop_session_action = lttng_action_stop_session_create(); + (void) lttng_action_stop_session_set_session_name(stop_session_action, "une-autre-session"); + notify_action = lttng_action_notify_create(); + + lttng_action_list_add_action(list_action, start_session_action); + lttng_action_list_add_action(list_action, stop_session_action); + lttng_action_list_add_action(list_action, notify_action); + + ret = lttng_action_serialize(list_action, &payload); + ok(ret == 0, "Action list serialized"); + + { + struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); + (void) lttng_action_create_from_payload(&view, &list_action_from_buffer); + } + ok(list_action_from_buffer, "Notify action created from payload is non-null"); + + ok(lttng_action_is_equal(list_action, list_action_from_buffer), + "Serialized and de-serialized list action are equal"); + + action_idx = 0; + for (auto action : lttng::ctl::const_action_list_view(list_action)) { + enum lttng_action_type inner_action_type = lttng_action_get_type(action); + switch (action_idx) { + case 0: + ok(inner_action_type == LTTNG_ACTION_TYPE_START_SESSION, + "First inner action of action list is `start-session` action"); + break; + case 1: + ok(inner_action_type == LTTNG_ACTION_TYPE_STOP_SESSION, + "Second inner action of action list is `stop-session` action"); + break; + case 2: + ok(inner_action_type == LTTNG_ACTION_TYPE_NOTIFY, + "Third inner action of action list is `notify` action"); + break; + } + action_idx++; + } + + action_idx = 0; + for (auto action : lttng::ctl::action_list_view(list_action)) { + enum lttng_action_type inner_action_type = lttng_action_get_type(action); + switch (action_idx) { + case 0: + ok(inner_action_type == LTTNG_ACTION_TYPE_START_SESSION, + "First inner action of action list is `start-session` action"); + break; + case 1: + ok(inner_action_type == LTTNG_ACTION_TYPE_STOP_SESSION, + "Second inner action of action list is `stop-session` action"); + break; + case 2: + ok(inner_action_type == LTTNG_ACTION_TYPE_NOTIFY, + "Third inner action of action list is `notify` action"); + break; + } + action_idx++; + } + + lttng_action_destroy(list_action); + lttng_action_destroy(list_action_from_buffer); + lttng_action_destroy(start_session_action); + lttng_action_destroy(stop_session_action); + lttng_action_destroy(notify_action); + lttng_payload_reset(&payload); +} + static void test_action_rotate_session(void) { int ret; enum lttng_action_status status; - struct lttng_action *rotate_session_action = NULL, - *rotate_session_action_from_buffer = NULL; - struct lttng_rate_policy *policy = NULL, *default_policy; + struct lttng_action *rotate_session_action = nullptr, + *rotate_session_action_from_buffer = nullptr; + struct lttng_rate_policy *policy = nullptr, *default_policy; struct lttng_payload payload; const char *session_name = "my_session_name"; const char *get_session_name; @@ -124,11 +212,11 @@ static void test_action_rotate_session(void) "Action has type LTTNG_ACTION_TYPE_ROTATE_SESSION"); /* Session name setter. */ - status = lttng_action_rotate_session_set_session_name(NULL, NULL); + status = lttng_action_rotate_session_set_session_name(nullptr, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); - status = lttng_action_rotate_session_set_session_name(rotate_session_action, NULL); + status = lttng_action_rotate_session_set_session_name(rotate_session_action, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); - status = lttng_action_rotate_session_set_session_name(NULL, session_name); + status = lttng_action_rotate_session_set_session_name(nullptr, session_name); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); /* Set the session name */ @@ -144,7 +232,7 @@ static void test_action_rotate_session(void) /* Validate the default policy for a rotate_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_rotate_session_get_rate_policy(rotate_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -158,7 +246,7 @@ static void test_action_rotate_session(void) /* Validate the custom policy for a rotate_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_rotate_session_get_rate_policy(rotate_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -187,12 +275,13 @@ static void test_action_rotate_session(void) lttng_payload_reset(&payload); } -static void test_action_start_session(void) +static void test_action_start_session() { int ret; enum lttng_action_status status; - struct lttng_action *start_session_action = NULL, *start_session_action_from_buffer = NULL; - struct lttng_rate_policy *policy = NULL, *default_policy; + struct lttng_action *start_session_action = nullptr, + *start_session_action_from_buffer = nullptr; + struct lttng_rate_policy *policy = nullptr, *default_policy; struct lttng_payload payload; const char *session_name = "my_session_name"; const char *get_session_name; @@ -212,11 +301,11 @@ static void test_action_start_session(void) "Action has type LTTNG_ACTION_TYPE_START_SESSION"); /* Session name setter. */ - status = lttng_action_start_session_set_session_name(NULL, NULL); + status = lttng_action_start_session_set_session_name(nullptr, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); - status = lttng_action_start_session_set_session_name(start_session_action, NULL); + status = lttng_action_start_session_set_session_name(start_session_action, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); - status = lttng_action_start_session_set_session_name(NULL, session_name); + status = lttng_action_start_session_set_session_name(nullptr, session_name); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); /* Set the session name */ @@ -232,7 +321,7 @@ static void test_action_start_session(void) /* Validate the default policy for a start_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_start_session_get_rate_policy(start_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -246,7 +335,7 @@ static void test_action_start_session(void) /* Validate the custom policy for a start_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_start_session_get_rate_policy(start_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -275,12 +364,13 @@ static void test_action_start_session(void) lttng_payload_reset(&payload); } -static void test_action_stop_session(void) +static void test_action_stop_session() { int ret; enum lttng_action_status status; - struct lttng_action *stop_session_action = NULL, *stop_session_action_from_buffer = NULL; - struct lttng_rate_policy *policy = NULL, *default_policy; + struct lttng_action *stop_session_action = nullptr, + *stop_session_action_from_buffer = nullptr; + struct lttng_rate_policy *policy = nullptr, *default_policy; struct lttng_payload payload; const char *session_name = "my_session_name"; const char *get_session_name; @@ -300,11 +390,11 @@ static void test_action_stop_session(void) "Action has type LTTNG_ACTION_TYPE_STOP_SESSION"); /* Session name setter. */ - status = lttng_action_stop_session_set_session_name(NULL, NULL); + status = lttng_action_stop_session_set_session_name(nullptr, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); - status = lttng_action_stop_session_set_session_name(stop_session_action, NULL); + status = lttng_action_stop_session_set_session_name(stop_session_action, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); - status = lttng_action_stop_session_set_session_name(NULL, session_name); + status = lttng_action_stop_session_set_session_name(nullptr, session_name); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); /* Set the session name */ @@ -319,7 +409,7 @@ static void test_action_stop_session(void) /* Validate the default policy for a stop_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_stop_session_get_rate_policy(stop_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -333,7 +423,7 @@ static void test_action_stop_session(void) /* Validate the custom policy for a stop_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_stop_session_get_rate_policy(stop_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -361,13 +451,13 @@ static void test_action_stop_session(void) lttng_payload_reset(&payload); } -static void test_action_snapshot_session(void) +static void test_action_snapshot_session() { int ret; enum lttng_action_status status; - struct lttng_action *snapshot_session_action = NULL, - *snapshot_session_action_from_buffer = NULL; - struct lttng_rate_policy *policy = NULL, *default_policy; + struct lttng_action *snapshot_session_action = nullptr, + *snapshot_session_action_from_buffer = nullptr; + struct lttng_rate_policy *policy = nullptr, *default_policy; struct lttng_payload payload; const char *session_name = "my_session_name"; const char *get_session_name; @@ -387,11 +477,11 @@ static void test_action_snapshot_session(void) "Action has type LTTNG_ACTION_TYPE_SNAPSHOT_SESSION"); /* Session name setter. */ - status = lttng_action_snapshot_session_set_session_name(NULL, NULL); + status = lttng_action_snapshot_session_set_session_name(nullptr, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); - status = lttng_action_snapshot_session_set_session_name(snapshot_session_action, NULL); + status = lttng_action_snapshot_session_set_session_name(snapshot_session_action, nullptr); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); - status = lttng_action_snapshot_session_set_session_name(NULL, session_name); + status = lttng_action_snapshot_session_set_session_name(nullptr, session_name); ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); /* Set the session name */ @@ -408,7 +498,7 @@ static void test_action_snapshot_session(void) /* Validate the default policy for a snapshot_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_snapshot_session_get_rate_policy(snapshot_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -422,7 +512,7 @@ static void test_action_snapshot_session(void) /* Validate the custom policy for a snapshot_session action. */ { - const struct lttng_rate_policy *cur_policy = NULL; + const struct lttng_rate_policy *cur_policy = nullptr; status = lttng_action_snapshot_session_get_rate_policy(snapshot_session_action, &cur_policy); ok(status == LTTNG_ACTION_STATUS_OK && @@ -452,13 +542,24 @@ static void test_action_snapshot_session(void) lttng_payload_reset(&payload); } -int main(void) +static int _main() { plan_tests(NUM_TESTS); test_action_notify(); + test_action_list(); test_action_rotate_session(); test_action_start_session(); test_action_stop_session(); test_action_snapshot_session(); return exit_status(); } + +int main() +{ + try { + return _main(); + } catch (const std::exception& e) { + ERR_FMT("Unhandled exception caught by action unit test: {}", e.what()); + abort(); + } +}