diff options
author | Philip Guenthe <guenther@cvs.openbsd.org> | 2009-12-14 05:08:20 +0000 |
---|---|---|
committer | Philip Guenthe <guenther@cvs.openbsd.org> | 2009-12-14 05:08:20 +0000 |
commit | a5f1ed8ddd11a952231e563d1907e532da3d113f (patch) | |
tree | 3ce14fb27be7635a28bb37b849013e79740b8707 /regress | |
parent | 2ecec38b1dc55df4c9bda3828098c6ab0f8cbc99 (diff) |
Add a test for sleep(3), to verify that it both (a) returns zero when it
completes, and (b) returns the unslept time in seconds when interrupted
Diffstat (limited to 'regress')
-rw-r--r-- | regress/lib/libc/sleep/Makefile | 13 | ||||
-rw-r--r-- | regress/lib/libc/sleep/sleep_test.c | 84 |
2 files changed, 97 insertions, 0 deletions
diff --git a/regress/lib/libc/sleep/Makefile b/regress/lib/libc/sleep/Makefile new file mode 100644 index 00000000000..3700b1662a1 --- /dev/null +++ b/regress/lib/libc/sleep/Makefile @@ -0,0 +1,13 @@ +# $OpenBSD: Makefile,v 1.1 2009/12/14 05:08:19 guenther Exp $ + +NOMAN= +PROG=sleep_test +CPPFLAGS+=-I${.CURDIR}/../../../../lib/libc + +run-regress-${PROG}: ${PROG} + [ x$$(./${PROG} 1) = x0 ] || exit 1 + file=$$(mktemp -t sleep.XXXXXXXXXX); ./${PROG} 4 >$$file & pid=$$!; \ + sleep 1; kill $$pid; sleep 1; v=$$(cat $$file); rm -f $$file; \ + { [ $$v -gt 0 ] && [ $$v -lt 4 ] ; } || exit 2 + +.include <bsd.regress.mk> diff --git a/regress/lib/libc/sleep/sleep_test.c b/regress/lib/libc/sleep/sleep_test.c new file mode 100644 index 00000000000..c9ab0d095fe --- /dev/null +++ b/regress/lib/libc/sleep/sleep_test.c @@ -0,0 +1,84 @@ +/* $OpenBSD: sleep_test.c,v 1.1 2009/12/14 05:08:19 guenther Exp $ */ + +/* + * Copyright (c) 2009 Philip Guenther + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Test whether sleep returns the correct value + */ + +#include <sys/types.h> +#include <err.h> +#include <errno.h> +#include <limits.h> +#include <signal.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static void +handler(int sig) +{ + return; +} + +static void * +garbage(void) +{ + char buf[20]; + strlcpy(buf, "012354678901235467890123546789", sizeof buf); + return buf; +} + +int +main(int argc, char *argv[]) +{ + struct sigaction sa; + char const *errstr; + int i; + + if (argc != 2) + return (1); + errno = 0; + i = strtonum(argv[1], 0, INT_MAX, &errstr); + if (i == 0 && errno != 0) { + fprintf(stderr, "%s\n", errstr); + return (1); + } + + memset(&sa, 0, sizeof sa); + sa.sa_handler = &handler; + if (sigaction(SIGTERM, &sa, NULL)) + err(3, "sigaction"); + garbage(); + printf("%d\n", sleep(i)); + return (0); +} + |