X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=tests%2Funit%2Ftest_payload.c;h=e232cde66cfaba6f07f5d0cab56e55181e6228ad;hb=35a9ac4170f36547aa2ae7c19ccbb7bbb0bcf71b;hp=11c57f21de911e842f53a95c0342558fe2a81f15;hpb=9e620ea7b016fc3fd4e08b5d094ffa40b36b50f6;p=lttng-tools.git diff --git a/tests/unit/test_payload.c b/tests/unit/test_payload.c index 11c57f21d..e232cde66 100644 --- a/tests/unit/test_payload.c +++ b/tests/unit/test_payload.c @@ -5,6 +5,9 @@ * */ +#include + +#include #include #include #include @@ -20,16 +23,28 @@ static void test_fd_push_pop_order(void) { int ret, i; struct lttng_payload payload; + int fds[3]; lttng_payload_init(&payload); diag("Validating fd push/pop order"); for (i = 0; i < 3; i++) { - ret = lttng_payload_push_fd(&payload, i); + int fd = fcntl(STDOUT_FILENO, F_DUPFD, 0); + struct fd_handle *handle; + + assert(fd >= 0); + fds[i] = fd; + + handle = fd_handle_create(fd); + assert(handle); + + ret = lttng_payload_push_fd_handle(&payload, handle); + fd_handle_put(handle); if (ret) { break; } } + ok(ret == 0, "Added three file descriptors to an lttng_payload"); { @@ -39,8 +54,11 @@ static void test_fd_push_pop_order(void) &payload, 0, -1); for (i = 0; i < 3; i++) { - ret = lttng_payload_view_pop_fd(&view); - fail_pop |= ret != i; + struct fd_handle *handle = + lttng_payload_view_pop_fd_handle(&view); + + fail_pop |= fd_handle_get_fd(handle) != fds[i]; + fd_handle_put(handle); } ok(!fail_pop, "File descriptors are popped from a payload view in the order of insertion"); @@ -59,26 +77,38 @@ static void test_fd_push_pop_imbalance(void) diag("Validating fd pop imbalance"); for (i = 0; i < 10; i++) { - ret = lttng_payload_push_fd(&payload, i); + struct fd_handle *handle; + int fd = fcntl(STDOUT_FILENO, F_DUPFD, 0); + + assert(fd >= 0); + + handle = fd_handle_create(fd); + assert(handle); + + ret = lttng_payload_push_fd_handle(&payload, handle); + fd_handle_put(handle); if (ret) { break; } } { + struct fd_handle *handle; struct lttng_payload_view view = lttng_payload_view_from_payload( &payload, 0, -1); for (i = 0; i < 10; i++) { - ret = lttng_payload_view_pop_fd(&view); - if (ret == -1) { + handle = lttng_payload_view_pop_fd_handle(&view); + fd_handle_put(handle); + if (!handle) { goto fail; } } - ret = lttng_payload_view_pop_fd(&view); - ok(ret == -1, test_description); + handle = lttng_payload_view_pop_fd_handle(&view); + ok(!handle, test_description); + fd_handle_put(handle); } lttng_payload_reset(&payload); @@ -91,53 +121,73 @@ fail: static void test_fd_pop_fd_root_views(void) { int ret, i; - const int fd = 42; + int fd = fcntl(STDOUT_FILENO, F_DUPFD, 0); + struct fd_handle *handle; struct lttng_payload payload; const char * const test_description = "Same file descriptor returned when popping from different top-level views"; + assert(fd >= 0); + handle = fd_handle_create(fd); + assert(handle); + lttng_payload_init(&payload); diag("Validating root view fd pop behaviour"); - ret = lttng_payload_push_fd(&payload, fd); + ret = lttng_payload_push_fd_handle(&payload, handle); if (ret) { goto fail; } for (i = 0; i < 5; i++) { + int view_fd; + struct fd_handle *view_handle; struct lttng_payload_view view = lttng_payload_view_from_payload( &payload, 0, -1); - ret = lttng_payload_view_pop_fd(&view); - if (ret != fd) { + view_handle = lttng_payload_view_pop_fd_handle(&view); + if (!view_handle) { + goto fail; + } + + view_fd = fd_handle_get_fd(view_handle); + fd_handle_put(view_handle); + if (view_fd != fd || view_handle != handle) { goto fail; } } lttng_payload_reset(&payload); pass(test_description); + fd_handle_put(handle); return; fail: lttng_payload_reset(&payload); fail(test_description); + fd_handle_put(handle); } static void test_fd_pop_fd_descendant_views(void) { int ret; const int fd1 = 42, fd2 = 1837; + struct fd_handle *handle1 = fd_handle_create(fd1); + struct fd_handle *handle2 = fd_handle_create(fd2); + struct fd_handle *view_handle1 = NULL, *view_handle2 = NULL; struct lttng_payload payload; const char * const test_description = "Different file descriptors returned when popping from descendant views"; lttng_payload_init(&payload); + assert(handle1); + assert(handle2); diag("Validating descendant view fd pop behaviour"); - ret = lttng_payload_push_fd(&payload, fd1); + ret = lttng_payload_push_fd_handle(&payload, handle1); if (ret) { goto fail; } - ret = lttng_payload_push_fd(&payload, fd2); + ret = lttng_payload_push_fd_handle(&payload, handle2); if (ret) { goto fail; } @@ -150,23 +200,31 @@ static void test_fd_pop_fd_descendant_views(void) lttng_payload_view_from_view( &view1, 0, -1); - ret = lttng_payload_view_pop_fd(&view1); - if (ret != fd1) { + view_handle1 = lttng_payload_view_pop_fd_handle(&view1); + if (!view_handle1 || fd_handle_get_fd(view_handle1) != fd1) { goto fail; } - ret = lttng_payload_view_pop_fd(&view2); - if (ret != fd2) { + view_handle2 = lttng_payload_view_pop_fd_handle(&view2); + if (!view_handle2 || fd_handle_get_fd(view_handle2) != fd2) { goto fail; } } lttng_payload_reset(&payload); pass(test_description); + fd_handle_put(handle1); + fd_handle_put(handle2); + fd_handle_put(view_handle1); + fd_handle_put(view_handle2); return; fail: lttng_payload_reset(&payload); fail(test_description); + fd_handle_put(handle1); + fd_handle_put(handle2); + fd_handle_put(view_handle1); + fd_handle_put(view_handle2); } int main(void)