#include <lttng/action/firing-policy.h>
#include <lttng/action/notify.h>
#include <lttng/action/rotate-session.h>
+#include <lttng/action/snapshot-session.h>
#include <lttng/action/start-session.h>
#include <lttng/action/stop-session.h>
int lttng_opt_verbose;
int lttng_opt_mi;
-#define NUM_TESTS 47
+#define NUM_TESTS 60
static void test_action_notify(void)
{
lttng_payload_reset(&payload);
}
+static void test_action_snapshot_session(void)
+{
+ int ret;
+ enum lttng_action_status status;
+ struct lttng_action *snapshot_session_action = NULL,
+ *snapshot_session_action_from_buffer = NULL;
+ struct lttng_firing_policy *policy = NULL, *default_policy;
+ struct lttng_payload payload;
+ const char *session_name = "my_session_name";
+ const char *get_session_name;
+
+ lttng_payload_init(&payload);
+
+ /* To set. */
+ policy = lttng_firing_policy_every_n_create(100);
+ /* For comparison. */
+ default_policy = lttng_firing_policy_every_n_create(1);
+
+ assert(policy && default_policy);
+
+ snapshot_session_action = lttng_action_snapshot_session_create();
+ ok(snapshot_session_action, "Create snapshot_session action");
+ ok(lttng_action_get_type(snapshot_session_action) ==
+ LTTNG_ACTION_TYPE_SNAPSHOT_SESSION,
+ "Action has type LTTNG_ACTION_TYPE_SNAPSHOT_SESSION");
+
+ /* Session name setter. */
+ status = lttng_action_snapshot_session_set_session_name(NULL, NULL);
+ 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);
+ ok(status == LTTNG_ACTION_STATUS_INVALID,
+ "Set session name (object,NULL) expect invalid");
+ status = lttng_action_snapshot_session_set_session_name(
+ NULL, session_name);
+ ok(status == LTTNG_ACTION_STATUS_INVALID,
+ "Set session name (NULL,object) expect invalid");
+
+ /* Set the session name */
+ status = lttng_action_snapshot_session_set_session_name(
+ snapshot_session_action, session_name);
+ ok(status == LTTNG_ACTION_STATUS_OK, "Set session name");
+
+ status = lttng_action_snapshot_session_get_session_name(
+ snapshot_session_action, &get_session_name);
+ ok(status == LTTNG_ACTION_STATUS_OK &&
+ !strcmp(session_name, get_session_name),
+ "Get session name, expected `%s` got `%s`",
+ session_name, get_session_name);
+
+ /* Validate the default policy for a snapshot_session action. */
+ {
+ const struct lttng_firing_policy *cur_policy = NULL;
+ status = lttng_action_snapshot_session_get_firing_policy(
+ snapshot_session_action, &cur_policy);
+ ok(status == LTTNG_ACTION_STATUS_OK &&
+ lttng_firing_policy_is_equal(
+ default_policy,
+ cur_policy),
+ "Default policy is every n=1");
+ }
+
+ /* Set a custom policy. */
+ status = lttng_action_snapshot_session_set_firing_policy(
+ snapshot_session_action, policy);
+ ok(status == LTTNG_ACTION_STATUS_OK, "Set firing policy");
+
+ /* Validate the custom policy for a snapshot_session action. */
+ {
+ const struct lttng_firing_policy *cur_policy = NULL;
+ status = lttng_action_snapshot_session_get_firing_policy(
+ snapshot_session_action, &cur_policy);
+ ok(status == LTTNG_ACTION_STATUS_OK &&
+ lttng_firing_policy_is_equal(
+ policy,
+ cur_policy),
+ "snapshot_session action policy get");
+ }
+
+ /* Ser/des tests. */
+ ret = lttng_action_serialize(snapshot_session_action, &payload);
+ ok(ret == 0, "Action snapshot_session serialized");
+
+ {
+ struct lttng_payload_view view =
+ lttng_payload_view_from_payload(
+ &payload, 0, -1);
+ (void) lttng_action_create_from_payload(
+ &view, &snapshot_session_action_from_buffer);
+ }
+ ok(snapshot_session_action_from_buffer,
+ "snapshot_session action created from payload is non-null");
+
+ ok(lttng_action_is_equal(snapshot_session_action,
+ snapshot_session_action_from_buffer),
+ "Serialized and de-serialized snapshot_session action are equal");
+
+ lttng_firing_policy_destroy(default_policy);
+ lttng_firing_policy_destroy(policy);
+ lttng_action_destroy(snapshot_session_action);
+ lttng_action_destroy(snapshot_session_action_from_buffer);
+ lttng_payload_reset(&payload);
+}
+
int main(int argc, const char *argv[])
{
plan_tests(NUM_TESTS);
test_action_rotate_session();
test_action_start_session();
test_action_stop_session();
+ test_action_snapshot_session();
return exit_status();
}