summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc/sys/atf-c.c
diff options
context:
space:
mode:
authorbluhm <>2019-11-19 19:57:04 +0000
committerbluhm <>2019-11-19 19:57:04 +0000
commit9185f840eda265016178aeb0dcdba964f8f6f3e2 (patch)
treeda100b3712514c566fe948116f7926ad7f725401 /src/regress/lib/libc/sys/atf-c.c
parent6a6fe688152b422f3d65c970dad56e7d9d28b1ee (diff)
downloadopenbsd-9185f840eda265016178aeb0dcdba964f8f6f3e2.tar.gz
openbsd-9185f840eda265016178aeb0dcdba964f8f6f3e2.tar.bz2
openbsd-9185f840eda265016178aeb0dcdba964f8f6f3e2.zip
Import NetBSD system call regression tests. They were written with
ATF (Automated Testing Framework), so we use a small wrapper to map it to our bsd.regress.mk framework. Only half of the 80 NetBSD tests have been taken, the others need more work to adapt. Of them 34 syscall tests pass. Moritz Buhl ported the tests to OpenBSD.
Diffstat (limited to 'src/regress/lib/libc/sys/atf-c.c')
-rw-r--r--src/regress/lib/libc/sys/atf-c.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/regress/lib/libc/sys/atf-c.c b/src/regress/lib/libc/sys/atf-c.c
new file mode 100644
index 0000000000..45181c7353
--- /dev/null
+++ b/src/regress/lib/libc/sys/atf-c.c
@@ -0,0 +1,113 @@
1/* $OpenBSD: atf-c.c,v 1.1.1.1 2019/11/19 19:57:03 bluhm Exp $ */
2
3#include <sys/wait.h>
4
5#include <err.h>
6#include <errno.h>
7#include <limits.h>
8#include <stdarg.h>
9#include <stdio.h>
10#include <stdlib.h>
11#include <pwd.h>
12#include <unistd.h>
13
14#include "atf-c.h"
15
16void usage(void);
17
18int cleanup;
19int count;
20int inspect;
21int run;
22int test;
23
24int
25main(int argc, char *argv[])
26{
27 int ch, test;
28 const char *errstr, *num;
29
30 while ((ch = getopt(argc, argv, "c:i:nr:")) != -1) {
31 switch(ch) {
32 case 'c':
33 cleanup = 1;
34 num = optarg;
35 break;
36 case 'i':
37 inspect = 1;
38 num = optarg;
39 break;
40 case 'n':
41 count = 1;
42 break;
43 case 'r':
44 run = 1;
45 num = optarg;
46 break;
47 default:
48 usage();
49 }
50 }
51 argc -= optind;
52 argv += optind;
53
54 if (cleanup + count + inspect + run > 1)
55 usage();
56
57 if (cleanup || inspect || run) {
58 test = strtonum(num, 1, INT_MAX, &errstr);
59 if (errstr != NULL)
60 errx(1, "test # is %s: %s", errstr, argv[1]);
61 }
62 if (count)
63 printf("%d\n", atf_test(0, 0));
64 else if (cleanup)
65 ATF_CLEANUP(test);
66 else if (run)
67 ATF_RUN(test);
68 else if (inspect)
69 ATF_INSPECT(test);
70 else
71 usage();
72
73 return 0;
74}
75
76void
77usage(void)
78{
79 fprintf(stderr, "usage: %s [-n] [-c|i|r test#]\n", getprogname());
80 exit(1);
81}
82
83void
84atf_require(int exp, int expected_errno, const char *expstr, const char *src,
85 const int lineno, char *fmt, ...)
86{
87 va_list args;
88 if (!(exp)) {
89 fprintf(stderr, "\n%s:%d: ", src, lineno);
90 if (fmt != NULL) {
91 va_start(args, fmt);
92 vfprintf(stderr, fmt, args);
93 va_end(args);
94 } else {
95 fprintf(stderr, "'%s' evaluated to false\n", expstr);
96 }
97 exit(1);
98 } else if (expected_errno >= 0 && errno != expected_errno) {
99 fprintf(stderr, "\n%s:%d: ", src, lineno);
100 fprintf(stderr, "expected errno %d but got %d instead\n",
101 expected_errno, errno);
102 exit(1);
103 }
104 return;
105}
106
107void
108atf_tc_fail(char *fmt, ...)
109{
110 va_list args;
111 va_start(args, fmt);
112 verrx(1, fmt, args);
113}