aboutgitcodelistschat:MatrixIRC
diff options
context:
space:
mode:
-rw-r--r--tests/unit/test_actions.c43
1 files changed, 35 insertions, 8 deletions
diff --git a/tests/unit/test_actions.c b/tests/unit/test_actions.c
index 0913133..c6fc022 100644
--- a/tests/unit/test_actions.c
+++ b/tests/unit/test_actions.c
@@ -304,20 +304,31 @@ START_TEST(test_act_call_ret)
}
END_TEST
-static void test_inject(struct action actions[], int n)
+static void test_inject(struct action actions[], int n, bool reference)
{
+ uint16_t new_off = 2, old_off = 4;
int fd_inj;
int test_fd = 3;
int ret;
fd_inj = create_test_fd();
ck_assert_int_ge(fd_inj,0);
- actions[0].inj.newfd.fd = fd_inj;
- actions[0].inj.newfd.type = IMMEDIATE;
- actions[0].inj.oldfd.fd = test_fd;
- actions[0].inj.oldfd.type = IMMEDIATE;
+ if (reference) {
+ memcpy((uint16_t *)&tmp_data + new_off, &fd_inj, sizeof(fd_inj));
+ memcpy((uint16_t *)&tmp_data + old_off, &test_fd, sizeof(test_fd));
+
+ actions[0].inj.newfd.fd_off = new_off;
+ actions[0].inj.newfd.type = REFERENCE;
+ actions[0].inj.oldfd.fd_off = old_off;
+ actions[0].inj.oldfd.type = REFERENCE;
+ } else {
+ actions[0].inj.newfd.fd = fd_inj;
+ actions[0].inj.newfd.type = IMMEDIATE;
+ actions[0].inj.oldfd.fd = test_fd;
+ actions[0].inj.oldfd.type = IMMEDIATE;
+ }
- ret = do_actions(NULL, actions, n, -1, notifyfd, req.id);
+ ret = do_actions(&tmp_data, actions, n, -1, notifyfd, req.id);
ck_assert_msg(ret == 0, strerror(errno));
check_target_fd(pid, test_fd);
}
@@ -325,14 +336,28 @@ static void test_inject(struct action actions[], int n)
START_TEST(test_act_inject_a)
{
struct action actions[] = {{.type = A_INJECT_A} };
- test_inject(actions, sizeof(actions) / sizeof(actions[0]));
+ test_inject(actions, sizeof(actions) / sizeof(actions[0]), false);
+}
+END_TEST
+
+START_TEST(test_act_inject_a_ref)
+{
+ struct action actions[] = {{.type = A_INJECT_A} };
+ test_inject(actions, sizeof(actions) / sizeof(actions[0]), true);
}
END_TEST
START_TEST(test_act_inject)
{
struct action actions[] = { { .type = A_INJECT }};
- test_inject(actions,sizeof(actions) / sizeof(actions[0]));
+ test_inject(actions,sizeof(actions) / sizeof(actions[0]), false);
+}
+END_TEST
+
+START_TEST(test_act_inject_ref)
+{
+ struct action actions[] = { { .type = A_INJECT }};
+ test_inject(actions,sizeof(actions) / sizeof(actions[0]), true);
}
END_TEST
@@ -375,12 +400,14 @@ Suite *action_call_suite(void)
tcase_add_checked_fixture(inject, setup_fd, teardown);
tcase_set_timeout(inject, timeout);
tcase_add_test(inject, test_act_inject);
+ tcase_add_test(inject, test_act_inject_ref);
suite_add_tcase(s, inject);
inject_a = tcase_create("a_inject_a");
tcase_add_checked_fixture(inject_a, setup_fd, teardown);
tcase_set_timeout(inject_a, timeout);
tcase_add_test(inject_a, test_act_inject_a);
+ tcase_add_test(inject_a, test_act_inject_a_ref);
suite_add_tcase(s, inject_a);
return s;