Tests: Move TAP helpers to tests/utils/tap
[babeltrace.git] / tests / lib / test-seeks.c
index c6abf2c1f2bbf85b4f2597671b95d3ffe4b04add..b33f80dc2e08455987ecc01b244916371712e417 100644 (file)
 #include <errno.h>
 #include <limits.h>
 
+#include <tap/tap.h>
 #include "common.h"
-#include "tap.h"
 
-#define NR_TESTS       11
+#define NR_TESTS       29
 
 void run_seek_begin(char *path, uint64_t expected_begin)
 {
@@ -134,6 +134,139 @@ void run_seek_last(char *path, uint64_t expected_last)
        bt_context_put(ctx);
 }
 
+void run_seek_time_at_last(char *path, uint64_t expected_last)
+{
+       struct bt_context *ctx;
+       struct bt_ctf_iter *iter;
+       struct bt_ctf_event *event;
+       struct bt_iter_pos newpos;
+       int ret;
+       uint64_t timestamp_last;
+
+       /* Open the trace */
+       ctx = create_context_with_path(path);
+       if (!ctx) {
+               plan_skip_all("Cannot create valid context");
+       }
+
+       /* Create iterator with null last and end */
+       iter = bt_ctf_iter_create(ctx, NULL, NULL);
+       if (!iter) {
+               plan_skip_all("Cannot create valid iterator");
+       }
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event, "Event valid at beginning");
+
+       /* Seek to last */
+       newpos.type = BT_SEEK_TIME;
+       newpos.u.seek_time = expected_last;
+       ret = bt_iter_set_pos(bt_ctf_get_iter(iter), &newpos);
+
+       ok(ret == 0, "Seek time at last retval %d", ret);
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event, "Event valid at last position");
+
+       timestamp_last = bt_ctf_get_timestamp(event);
+
+       ok1(timestamp_last == expected_last);
+
+       /* Try to read next event */
+       ret = bt_iter_next(bt_ctf_get_iter(iter));
+
+       ok(ret == 0, "iter next should return an error");
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event == 0, "Event after last should be invalid");
+
+       bt_context_put(ctx);
+}
+
+void run_seek_cycles(char *path,
+               uint64_t expected_begin,
+               uint64_t expected_last)
+{
+       struct bt_context *ctx;
+       struct bt_ctf_iter *iter;
+       struct bt_ctf_event *event;
+       struct bt_iter_pos newpos;
+       int ret;
+       uint64_t timestamp;
+
+       /* Open the trace */
+       ctx = create_context_with_path(path);
+       if (!ctx) {
+               plan_skip_all("Cannot create valid context");
+       }
+
+       /* Create iterator with null last and end */
+       iter = bt_ctf_iter_create(ctx, NULL, NULL);
+       if (!iter) {
+               plan_skip_all("Cannot create valid iterator");
+       }
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event, "Event valid at beginning");
+
+       /* Seek to last */
+       newpos.type = BT_SEEK_LAST;
+       ret = bt_iter_set_pos(bt_ctf_get_iter(iter), &newpos);
+
+       ok(ret == 0, "Seek last retval %d", ret);
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event, "Event valid at last position");
+
+       timestamp = bt_ctf_get_timestamp(event);
+
+       ok1(timestamp == expected_last);
+
+       /* Try to read next event */
+       ret = bt_iter_next(bt_ctf_get_iter(iter));
+
+       ok(ret == 0, "iter next should return an error");
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event == 0, "Event after last should be invalid");
+
+       /* Seek to BEGIN */
+       newpos.type = BT_SEEK_BEGIN;
+       ret = bt_iter_set_pos(bt_ctf_get_iter(iter), &newpos);
+
+       ok(ret == 0, "Seek begin retval %d", ret);
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event, "Event valid at first position");
+
+       timestamp = bt_ctf_get_timestamp(event);
+
+       ok1(timestamp == expected_begin);
+
+       /* Seek last again */
+       newpos.type = BT_SEEK_LAST;
+       ret = bt_iter_set_pos(bt_ctf_get_iter(iter), &newpos);
+
+       ok(ret == 0, "Seek last retval %d", ret);
+
+       event = bt_ctf_iter_read_event(iter);
+
+       ok(event, "Event valid at last position");
+
+       timestamp = bt_ctf_get_timestamp(event);
+
+       ok1(timestamp == expected_last);
+
+       bt_context_put(ctx);
+}
+
 int main(int argc, char **argv)
 {
        char *path;
@@ -161,7 +294,9 @@ int main(int argc, char **argv)
        }
 
        run_seek_begin(path, expected_begin);
+       run_seek_time_at_last(path, expected_last);
        run_seek_last(path, expected_last);
+       run_seek_cycles(path, expected_begin, expected_last);
 
        return exit_status();
 }
This page took 0.025033 seconds and 4 git commands to generate.