Fix several warnings that appear in gcc 4.3.2.
[wvstreams.git] / utils / tests / proctest.cc
blob216555e51bb78a46dfde166b4c4b1d9fb778e392
1 #include "wvsubproc.h"
2 #include <stdio.h>
3 #include <sys/wait.h>
6 int main()
8 WvSubProc proc;
10 #if 1
11 // ls should die by itself.
12 fprintf(stderr, "starting ls...\n");
13 proc.start("ls", "ls", "-F", "/", NULL);
14 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
15 proc.wait(10*1000);
16 fprintf(stderr, "done (%d/%d)...\n", proc.running, proc.estatus);
17 proc.start_again();
18 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
19 proc.wait(10*1000);
20 fprintf(stderr, "done (%d/%d)...\n", proc.running, proc.estatus);
21 fprintf(stderr, "\n\n");
23 // sleep should die after getting SIGTERM.
24 fprintf(stderr, "starting sleep...\n");
25 proc.start("sleep", "sleep", "10", NULL);
26 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
27 proc.wait(2100);
28 fprintf(stderr, "wait done (%d/%d)...\n", proc.running, proc.estatus);
29 fprintf(stderr, "sending SIGTERM...\n");
30 proc.kill(SIGTERM);
31 proc.wait(2200);
32 fprintf(stderr, "wait done (%d/%d)...\n", proc.running, proc.estatus);
33 fprintf(stderr, "\n\n");
35 // sleep should die after getting SIGTERM, so proc.stop() shouldn't take
36 // any time to run.
37 fprintf(stderr, "starting sleep again...\n");
38 proc.start("sleep", "sleep", "10", NULL);
39 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
40 proc.wait(0);
41 fprintf(stderr, "wait done (%d/%d)...\n", proc.running, proc.estatus);
42 fprintf(stderr, "sending SIGTERM...\n");
43 proc.stop(2300);
44 fprintf(stderr, "stop done (%d/%d)...\n", proc.running, proc.estatus);
45 fprintf(stderr, "\n\n");
47 // bash should refuse to die from SIGTERM, so we have to wait for SIGKILL.
48 fprintf(stderr, "starting bash...\n");
49 proc.start("bash", "bash", NULL);
50 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
51 proc.wait(2300);
52 fprintf(stderr, "wait done (%d/%d)...\n", proc.running, proc.estatus);
53 fprintf(stderr, "stopping process...\n");
54 proc.stop(2400);
55 fprintf(stderr, "stop done (%d/%d)...\n", proc.running, proc.estatus);
56 fprintf(stderr, "\n\n");
58 // a process that backgrounds itself
59 fprintf(stderr, "starting bash -c 'sleep 100 &'...\n");
60 proc.start("bash", "bash", "-c", "sleep 100 &", NULL);
61 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
62 proc.wait(2300);
63 fprintf(stderr, "wait done (%d/%d)...\n", proc.running, proc.estatus);
64 fprintf(stderr, "stopping process...\n");
65 proc.stop(2400);
66 fprintf(stderr, "stop done (%d/%d)...\n", proc.running, proc.estatus);
67 fprintf(stderr, "\n\n");
68 #endif
70 // a fancier process with subprocesses and helpful debug messages
71 fprintf(stderr, "starting ./complex-proc.sh...\n");
72 proc.start("./complex-proc.sh", "./complex-prox.sh", "XYZ", NULL);
73 fprintf(stderr, "started (%d/%d)...\n", proc.running, proc.pid);
74 proc.wait(4000);
75 fprintf(stderr, "wait done (%d/%d/%d)...\n",
76 proc.running, proc.estatus, proc.old_pids.count());
77 fprintf(stderr, "stopping process...\n");
78 proc.stop(2000, false);
79 fprintf(stderr, "stop done (%d/%d/%d)...\n",
80 proc.running, proc.estatus, proc.old_pids.count());
81 fprintf(stderr, "start again...\n");
82 proc.start_again();
83 proc.wait(4000);
84 fprintf(stderr, "wait done (%d/%d/%d)...\n",
85 proc.running, proc.estatus, proc.old_pids.count());
86 fprintf(stderr, "stopping process...\n");
87 proc.stop(1000, true);
88 fprintf(stderr, "stop done (%d/%d/%d)...\n",
89 proc.running, proc.estatus, proc.old_pids.count());
90 fprintf(stderr, "\n\n");
92 fprintf(stderr, "Checking for leftover subprocesses...\n");
93 pid_t pid;
94 int status;
95 while ((pid = ::waitpid(-1, &status, 0)) > 0)
96 fprintf(stderr, "LEFTOVER!! pid=%d, status=%d\n", pid, status);
98 return 0;