summaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2016-01-15 11:24:11 +0100
committerJakub Hrozek <jhrozek@redhat.com>2016-02-26 11:55:51 +0100
commitb5797517abb117cff7330acc894b71deda74be3d (patch)
tree1a3db66d9a7a6b32e5f5b11e1a0fc7a9ee7b7aaa /src/tests
parent401d8b0600dd2d36f6d62ee1d72f56a245cc3158 (diff)
downloadsssd-b5797517abb117cff7330acc894b71deda74be3d.tar.gz
sssd-b5797517abb117cff7330acc894b71deda74be3d.tar.xz
sssd-b5797517abb117cff7330acc894b71deda74be3d.zip
tests: Extend test_child_common.c to include tests for the only_extra_args functionality
Reviewed-by: Sumit Bose <sbose@redhat.com> Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/cmocka/dummy_child.c19
-rw-r--r--src/tests/cmocka/test_child_common.c79
2 files changed, 91 insertions, 7 deletions
diff --git a/src/tests/cmocka/dummy_child.c b/src/tests/cmocka/dummy_child.c
index 3f79ca837..bcaa94550 100644
--- a/src/tests/cmocka/dummy_child.c
+++ b/src/tests/cmocka/dummy_child.c
@@ -84,6 +84,25 @@ int main(int argc, const char *argv[])
DEBUG(SSSDBG_CRIT_FAILURE, "This band sounds weird\n");
_exit(1);
}
+ } else if (strcasecmp(action, "check_only_extra_args") == 0) {
+ if (debug_timestamps == 1) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "debug_timestamp was passed when only extra args "
+ "should have been\n");
+ _exit(1);
+ }
+
+ if (!(strcmp(guitar, "george") == 0 \
+ && strcmp(drums, "ringo") == 0)) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "This band sounds weird\n");
+ _exit(1);
+ }
+ } else if (strcasecmp(action, "check_only_extra_args_neg") == 0) {
+ if (debug_timestamps != 1) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "debug_timestamp was not passed as expected\n");
+ _exit(1);
+ }
} else if (strcasecmp(action, "echo") == 0) {
errno = 0;
len = sss_atomic_read_s(STDIN_FILENO, buf, IN_BUF_SIZE);
diff --git a/src/tests/cmocka/test_child_common.c b/src/tests/cmocka/test_child_common.c
index 9ed9c1ae4..423132bdf 100644
--- a/src/tests/cmocka/test_child_common.c
+++ b/src/tests/cmocka/test_child_common.c
@@ -38,6 +38,8 @@ struct child_test_ctx {
int pipefd_from_child[2];
struct sss_test_ctx *test_ctx;
+
+ int save_debug_timestamps;
};
static int child_test_setup(void **state)
@@ -119,27 +121,58 @@ void test_exec_child(void **state)
}
}
-/* Make sure extra arguments are passed correctly */
-void test_exec_child_extra_args(void **state)
+static int only_extra_args_setup(void **state)
{
+ struct child_test_ctx *child_tctx;
errno_t ret;
- pid_t child_pid;
- int status;
+
+ ret = child_test_setup((void **) &child_tctx);
+ if (ret != 0) {
+ return ret;
+ }
+
+ child_tctx->save_debug_timestamps = debug_timestamps;
+ *state = child_tctx;
+
+ return 0;
+}
+
+static int only_extra_args_teardown(void **state)
+{
struct child_test_ctx *child_tctx = talloc_get_type(*state,
struct child_test_ctx);
+ errno_t ret;
+
+ debug_timestamps = child_tctx->save_debug_timestamps;
+ ret = child_test_teardown((void **) &child_tctx);
+ if (ret != 0) {
+ return ret;
+ }
+
+ return 0;
+}
+
+static void extra_args_test(struct child_test_ctx *child_tctx,
+ bool extra_args_only)
+{
+ pid_t child_pid;
+ errno_t ret;
+ int status;
+
const char *extra_args[] = { "--guitar=george",
"--drums=ringo",
NULL };
- setenv("TEST_CHILD_ACTION", "check_extra_args", 1);
-
child_pid = fork();
assert_int_not_equal(child_pid, -1);
if (child_pid == 0) {
+ debug_timestamps = 1;
+
ret = exec_child_ex(child_tctx,
child_tctx->pipefd_to_child,
child_tctx->pipefd_from_child,
- CHILD_DIR"/"TEST_BIN, 2, extra_args, false,
+ CHILD_DIR"/"TEST_BIN, 2, extra_args,
+ extra_args_only,
STDIN_FILENO, STDOUT_FILENO);
assert_int_equal(ret, EOK);
} else {
@@ -162,6 +195,32 @@ void test_exec_child_extra_args(void **state)
}
}
+/* Make sure extra arguments are passed correctly */
+void test_exec_child_extra_args(void **state)
+{
+ struct child_test_ctx *child_tctx = talloc_get_type(*state,
+ struct child_test_ctx);
+ setenv("TEST_CHILD_ACTION", "check_extra_args", 1);
+ extra_args_test(child_tctx, false);
+}
+
+/* Make sure extra arguments are passed correctly */
+void test_exec_child_only_extra_args(void **state)
+{
+ struct child_test_ctx *child_tctx = talloc_get_type(*state,
+ struct child_test_ctx);
+ setenv("TEST_CHILD_ACTION", "check_only_extra_args", 1);
+ extra_args_test(child_tctx, true);
+}
+
+void test_exec_child_only_extra_args_neg(void **state)
+{
+ struct child_test_ctx *child_tctx = talloc_get_type(*state,
+ struct child_test_ctx);
+ setenv("TEST_CHILD_ACTION", "check_only_extra_args_neg", 1);
+ extra_args_test(child_tctx, false);
+}
+
struct tevent_req *echo_child_write_send(TALLOC_CTX *mem_ctx,
struct child_test_ctx *child_tctx,
struct child_io_fds *io_fds,
@@ -478,6 +537,12 @@ int main(int argc, const char *argv[])
cmocka_unit_test_setup_teardown(test_sss_child,
child_test_setup,
child_test_teardown),
+ cmocka_unit_test_setup_teardown(test_exec_child_only_extra_args,
+ only_extra_args_setup,
+ only_extra_args_teardown),
+ cmocka_unit_test_setup_teardown(test_exec_child_only_extra_args_neg,
+ only_extra_args_setup,
+ only_extra_args_teardown),
};
/* Set debug level to invalid value so we can deside if -d 0 was used. */