summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2017-04-11 20:00:05 +0200
committerRalph Boehme <slow@samba.org>2017-04-20 16:53:16 +0200
commit426e407c533ae6980da672cf2d4e7b01b821a3d3 (patch)
treef854ba4079f29eef77b0a8c6c79d5412f1a5661e
parent4a43129b7a7285024f0d2b76e893740f73adce2f (diff)
downloadsamba-426e407c533ae6980da672cf2d4e7b01b821a3d3.tar.gz
lib/util: add a test for samba_runcmd_send()
Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r--lib/util/tests/tfork.c36
-rwxr-xr-xtestprogs/blackbox/tfork.sh15
2 files changed, 51 insertions, 0 deletions
diff --git a/lib/util/tests/tfork.c b/lib/util/tests/tfork.c
index 7963aafaae1..7a9692836f3 100644
--- a/lib/util/tests/tfork.c
+++ b/lib/util/tests/tfork.c
@@ -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
index 00000000000..0f75a8c6aa3
--- /dev/null
+++ b/testprogs/blackbox/tfork.sh
@@ -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