Add timeout for test 7 to indicate which test (if any) hangs
This commit is contained in:
parent
b528d52ea8
commit
1b7de33a68
53
test/test7.c
53
test/test7.c
@ -15,6 +15,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
#define ITERATIONS 4
|
#define ITERATIONS 4
|
||||||
#define MAX_ERROR 4
|
#define MAX_ERROR 4
|
||||||
@ -31,7 +32,11 @@ int subtest, errct, xfd;
|
|||||||
int whence = SEEK_SET, func_code = F_SETLK;
|
int whence = SEEK_SET, func_code = F_SETLK;
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
|
#define timed_test(func) (timed_test_func(#func, func));
|
||||||
|
|
||||||
_PROTOTYPE(int main, (int argc, char *argv []));
|
_PROTOTYPE(int main, (int argc, char *argv []));
|
||||||
|
_PROTOTYPE(void timed_test_func, (const char *s, void (* func)(void)));
|
||||||
|
_PROTOTYPE(void timed_test_timeout, (int signum));
|
||||||
_PROTOTYPE(void test7a, (void));
|
_PROTOTYPE(void test7a, (void));
|
||||||
_PROTOTYPE(void test7b, (void));
|
_PROTOTYPE(void test7b, (void));
|
||||||
_PROTOTYPE(void test7c, (void));
|
_PROTOTYPE(void test7c, (void));
|
||||||
@ -67,21 +72,49 @@ char *argv[];
|
|||||||
chdir("DIR_07");
|
chdir("DIR_07");
|
||||||
|
|
||||||
for (i = 0; i < ITERATIONS; i++) {
|
for (i = 0; i < ITERATIONS; i++) {
|
||||||
if (m & 00001) test7a();
|
if (m & 00001) timed_test(test7a);
|
||||||
if (m & 00002) test7b();
|
if (m & 00002) timed_test(test7b);
|
||||||
if (m & 00004) test7c();
|
if (m & 00004) timed_test(test7c);
|
||||||
if (m & 00010) test7d();
|
if (m & 00010) timed_test(test7d);
|
||||||
if (m & 00020) test7e();
|
if (m & 00020) timed_test(test7e);
|
||||||
if (m & 00040) test7f();
|
if (m & 00040) timed_test(test7f);
|
||||||
if (m & 00100) test7g();
|
if (m & 00100) timed_test(test7g);
|
||||||
if (m & 00200) test7h();
|
if (m & 00200) timed_test(test7h);
|
||||||
if (m & 00400) test7i();
|
if (m & 00400) timed_test(test7i);
|
||||||
if (m & 01000) test7j();
|
if (m & 01000) timed_test(test7j);
|
||||||
}
|
}
|
||||||
quit();
|
quit();
|
||||||
return(-1); /* impossible */
|
return(-1); /* impossible */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static jmp_buf timed_test_context;
|
||||||
|
|
||||||
|
void timed_test_timeout(int signum)
|
||||||
|
{
|
||||||
|
longjmp(timed_test_context, -1);
|
||||||
|
e(700);
|
||||||
|
quit();
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void timed_test_func(const char *s, void (* func)(void))
|
||||||
|
{
|
||||||
|
if (setjmp(timed_test_context) == 0)
|
||||||
|
{
|
||||||
|
/* the function gets 60 seconds to complete */
|
||||||
|
if (signal(SIGALRM, timed_test_timeout) == SIG_ERR) { e(701); return; }
|
||||||
|
alarm(60);
|
||||||
|
func();
|
||||||
|
alarm(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* report timeout as error */
|
||||||
|
printf("timeout in %s\n", s);
|
||||||
|
e(702);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void test7a()
|
void test7a()
|
||||||
{
|
{
|
||||||
/* Test pipe(). */
|
/* Test pipe(). */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user