summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorguenther <>2009-12-14 05:08:19 +0000
committerguenther <>2009-12-14 05:08:19 +0000
commite0fd73fcca39e03d57dc0a553e943e84cda61e30 (patch)
treef1c6a7b3c524ee3e67f8bbfd4ca9c741ed1915af /src
parent3db0519782031aa1e2d42b99ad04bd5a00ec126d (diff)
downloadopenbsd-e0fd73fcca39e03d57dc0a553e943e84cda61e30.tar.gz
openbsd-e0fd73fcca39e03d57dc0a553e943e84cda61e30.tar.bz2
openbsd-e0fd73fcca39e03d57dc0a553e943e84cda61e30.zip
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 'src')
-rw-r--r--src/regress/lib/libc/sleep/Makefile13
-rw-r--r--src/regress/lib/libc/sleep/sleep_test.c84
2 files changed, 97 insertions, 0 deletions
diff --git a/src/regress/lib/libc/sleep/Makefile b/src/regress/lib/libc/sleep/Makefile
new file mode 100644
index 0000000000..3700b1662a
--- /dev/null
+++ b/src/regress/lib/libc/sleep/Makefile
@@ -0,0 +1,13 @@
1# $OpenBSD: Makefile,v 1.1 2009/12/14 05:08:19 guenther Exp $
2
3NOMAN=
4PROG=sleep_test
5CPPFLAGS+=-I${.CURDIR}/../../../../lib/libc
6
7run-regress-${PROG}: ${PROG}
8 [ x$$(./${PROG} 1) = x0 ] || exit 1
9 file=$$(mktemp -t sleep.XXXXXXXXXX); ./${PROG} 4 >$$file & pid=$$!; \
10 sleep 1; kill $$pid; sleep 1; v=$$(cat $$file); rm -f $$file; \
11 { [ $$v -gt 0 ] && [ $$v -lt 4 ] ; } || exit 2
12
13.include <bsd.regress.mk>
diff --git a/src/regress/lib/libc/sleep/sleep_test.c b/src/regress/lib/libc/sleep/sleep_test.c
new file mode 100644
index 0000000000..c9ab0d095f
--- /dev/null
+++ b/src/regress/lib/libc/sleep/sleep_test.c
@@ -0,0 +1,84 @@
1/* $OpenBSD: sleep_test.c,v 1.1 2009/12/14 05:08:19 guenther Exp $ */
2
3/*
4 * Copyright (c) 2009 Philip Guenther
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * - Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32/*
33 * Test whether sleep returns the correct value
34 */
35
36#include <sys/types.h>
37#include <err.h>
38#include <errno.h>
39#include <limits.h>
40#include <signal.h>
41#include <stddef.h>
42#include <stdio.h>
43#include <stdlib.h>
44#include <unistd.h>
45
46static void
47handler(int sig)
48{
49 return;
50}
51
52static void *
53garbage(void)
54{
55 char buf[20];
56 strlcpy(buf, "012354678901235467890123546789", sizeof buf);
57 return buf;
58}
59
60int
61main(int argc, char *argv[])
62{
63 struct sigaction sa;
64 char const *errstr;
65 int i;
66
67 if (argc != 2)
68 return (1);
69 errno = 0;
70 i = strtonum(argv[1], 0, INT_MAX, &errstr);
71 if (i == 0 && errno != 0) {
72 fprintf(stderr, "%s\n", errstr);
73 return (1);
74 }
75
76 memset(&sa, 0, sizeof sa);
77 sa.sa_handler = &handler;
78 if (sigaction(SIGTERM, &sa, NULL))
79 err(3, "sigaction");
80 garbage();
81 printf("%d\n", sleep(i));
82 return (0);
83}
84