tests: Check if vlserver died during startup 42/13942/2
authorAndrew Deason <adeason@sinenomine.net>
Wed, 30 Oct 2019 01:17:39 +0000 (20:17 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Sat, 21 Dec 2019 01:43:34 +0000 (20:43 -0500)
Currently, the volser/vos test starts a local vlserver to communicate
with. If the vlserver dies during startup, the spawned 'vos'
subprocesses take forever to run, since we need to wait for our Rx
calls to timeout for every operation.

To make it less annoying to detect and investigate errors that might
cause the vlserver to fail during startup, check if the vlserver dies
right away. We already sleep for 5 seconds when starting the vlserver,
so just check if the pid still exists after those 5 seconds.

Change-Id: I6c33059542fa975e4cb389b718f9da190cd13289
Reviewed-on: https://gerrit.openafs.org/13942
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

tests/common/servers.c
tests/volser/vos-t.c

index 4380e57..24b2bee 100644 (file)
@@ -11,6 +11,8 @@
 
 #include <afs/cellconfig.h>
 
+#include <tests/tap/basic.h>
+
 #include "common.h"
 
 /* Start up the VLserver, using the configuration in dirname, and putting our
@@ -21,6 +23,7 @@ int
 afstest_StartVLServer(char *dirname, pid_t *serverPid)
 {
     pid_t pid;
+    int status;
 
     pid = fork();
     if (pid == -1) {
@@ -46,6 +49,20 @@ afstest_StartVLServer(char *dirname, pid_t *serverPid)
        fprintf(stderr, "Running %s failed\n", binPath);
        exit(1);
     }
+
+    if (waitpid(pid, &status, WNOHANG) != 0) {
+       fprintf(stderr, "Error starting vlserver\n");
+       return -1;
+    }
+
+    diag("Sleeping for a few seconds to let the vlserver startup");
+    sleep(5);
+
+    if (waitpid(pid, &status, WNOHANG) != 0) {
+       fprintf(stderr, "vlserver died during startup\n");
+       return -1;
+    }
+
     *serverPid = pid;
 
     return 0;
index 57161f4..a8b8f54 100644 (file)
@@ -128,8 +128,6 @@ main(int argc, char **argv)
        goto out;
     }
 
-    /* Let it figure itself out ... */
-    sleep(5);
     code = afsconf_ClientAuthSecure(dir, &secClass, &secIndex);
     is_int(code, 0, "Successfully got security class");
     if (code) {