Clean-up: consumer.hpp: coding style indentation fix
[lttng-tools.git] / tests / unit / test_action.cpp
index 5256a4fca2b54c4f365c15a9ed1ebde360cc4344..52f6d26ca66a70799db00cd135d90478d9b3a52a 100644 (file)
@@ -9,11 +9,13 @@
  *
  */
 
+#include <common/error.hpp>
 #include <common/payload-view.hpp>
 #include <common/payload.hpp>
 
 #include <lttng/action/action-internal.hpp>
 #include <lttng/action/action.h>
+#include <lttng/action/list-internal.hpp>
 #include <lttng/action/notify.h>
 #include <lttng/action/rate-policy-internal.hpp>
 #include <lttng/action/rate-policy.h>
@@ -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();
+       }
+}
This page took 0.028329 seconds and 4 git commands to generate.