lib/util: add a test for samba_runcmd_send()
authorRalph Boehme <slow@samba.org>
Tue, 11 Apr 2017 18:00:05 +0000 (20:00 +0200)
committerRalph Boehme <slow@samba.org>
Thu, 20 Apr 2017 14:53:16 +0000 (16:53 +0200)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/util/tests/tfork.c
testprogs/blackbox/tfork.sh [new file with mode: 0755]

index 7963aafaae108eb1e81c6b2b292947a5a8811db8..7a9692836f354b7020dc2af8e539f7ef8e612cbf 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "replace.h"
 #include <talloc.h>
+#include <tevent.h>
 #include "system/filesys.h"
 #include "libcli/util/ntstatus.h"
 #include "torture/torture.h"
@@ -85,6 +86,37 @@ done:
        return ok;
 }
 
+static bool test_tfork_cmd_send(struct torture_context *tctx)
+{
+       struct tevent_context *ev = NULL;
+       struct tevent_req *req = NULL;
+       const char *cmd[2] = { NULL, NULL };
+       bool ok = true;
+
+       ev = tevent_context_init(tctx);
+       torture_assert_goto(tctx, ev != NULL, ok, done,
+                           "tevent_context_init failed\n");
+
+       cmd[0] = talloc_asprintf(tctx, "%s/testprogs/blackbox/tfork.sh", SRCDIR);
+       torture_assert_goto(tctx, cmd[0] != NULL, ok, done,
+                           "talloc_asprintf failed\n");
+
+       req = samba_runcmd_send(tctx, ev, timeval_zero(), 1, 0,
+                               cmd, "foo", NULL);
+       torture_assert_goto(tctx, req != NULL, ok, done,
+                           "samba_runcmd_send failed\n");
+
+       ok = tevent_req_poll(req, ev);
+       torture_assert_goto(tctx, ok, ok, done, "tevent_req_poll failed\n");
+
+       torture_comment(tctx, "samba_runcmd_send test finished\n");
+
+done:
+       TALLOC_FREE(ev);
+
+       return ok;
+}
+
 struct torture_suite *torture_local_tfork(TALLOC_CTX *mem_ctx)
 {
        struct torture_suite *suite =
@@ -98,5 +130,9 @@ struct torture_suite *torture_local_tfork(TALLOC_CTX *mem_ctx)
                                      "tfork_status",
                                      test_tfork_status);
 
+       torture_suite_add_simple_test(suite,
+                                     "tfork_cmd_send",
+                                     test_tfork_cmd_send);
+
        return suite;
 }
diff --git a/testprogs/blackbox/tfork.sh b/testprogs/blackbox/tfork.sh
new file mode 100755 (executable)
index 0000000..0f75a8c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+sleep 1
+
+echo stdout >&1
+echo $1 >&1
+echo stderror >&2
+
+# close stdout and stderror, but don't exit yet
+exec 1>&-
+exec 2>&-
+
+sleep 1
+
+exit 0