summaryrefslogtreecommitdiff
path: root/source3/script/tests
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-03-21 15:33:14 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:15:39 -0500
commitb40e2588707d2b7c44ee91da91872e4f9dc5209b (patch)
tree46fea7b18620cec945c0299e0c6aedb818a245a4 /source3/script/tests
parent250c02554ec3dd52f33e33406fdd605f5d932d5f (diff)
downloadsamba-b40e2588707d2b7c44ee91da91872e4f9dc5209b.tar.gz
samba-b40e2588707d2b7c44ee91da91872e4f9dc5209b.tar.bz2
samba-b40e2588707d2b7c44ee91da91872e4f9dc5209b.zip
r14624: - add timelimit.c
- add configure tests --with-selftest-prefix=/tmp/samba-test this is needed because the path name of unix socket can only be 108 chars long - add configure test --with-smbtorture4-path=/home/foo/prefix/samba4/bin/smbtorture this will be used to run samba4's smbtorture inside samba3's make test later metze (This used to be commit d9df1853b947c70f747ea30a353162f2985ef250)
Diffstat (limited to 'source3/script/tests')
-rw-r--r--source3/script/tests/timelimit.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/source3/script/tests/timelimit.c b/source3/script/tests/timelimit.c
new file mode 100644
index 0000000000..93d7f6497e
--- /dev/null
+++ b/source3/script/tests/timelimit.c
@@ -0,0 +1,78 @@
+/* run a command with a limited timeout
+ tridge@samba.org, June 2005
+
+ attempt to be as portable as possible (fighting posix all the way)
+*/
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+static void usage(void)
+{
+ printf("usage: timelimit <time> <command>\n");
+}
+
+static void sig_alrm(int sig)
+{
+ kill(0, SIGKILL);
+ exit(1);
+}
+
+static void sig_term_kill(int sig)
+{
+ static int c = 0;
+
+ if (c > 2) {
+ kill(0, SIGKILL);
+ exit(0);
+ }
+
+ c++;
+}
+
+static void sig_term(int sig)
+{
+ kill(0, SIGTERM);
+ signal(SIGTERM, sig_term_kill);
+}
+
+int main(int argc, char *argv[])
+{
+ int maxtime, ret=1;
+
+ if (argc < 3) {
+ usage();
+ exit(1);
+ }
+
+ if (setpgrp() == -1) {
+ perror("setpgrp");
+ exit(1);
+ }
+
+ maxtime = atoi(argv[1]);
+ signal(SIGALRM, sig_alrm);
+ alarm(maxtime);
+ signal(SIGTERM, sig_term);
+
+ if (fork() == 0) {
+ execvp(argv[2], argv+2);
+ }
+
+ do {
+ int status;
+ pid_t pid = wait(&status);
+ if (pid != -1) {
+ ret = WEXITSTATUS(status);
+ } else if (errno == ECHILD) {
+ break;
+ }
+ } while (1);
+
+ exit(ret);
+}