1645fcdebSAntonio Huete Jimenez #include <stdio.h>
2645fcdebSAntonio Huete Jimenez
3645fcdebSAntonio Huete Jimenez #include <fspred.h>
4645fcdebSAntonio Huete Jimenez #include <stdlib.h>
5645fcdebSAntonio Huete Jimenez #include <string.h>
6645fcdebSAntonio Huete Jimenez #include <sys/stat.h>
7645fcdebSAntonio Huete Jimenez #include <unistd.h>
8645fcdebSAntonio Huete Jimenez
9645fcdebSAntonio Huete Jimenez #define TDIR "/bin"
10645fcdebSAntonio Huete Jimenez #define TEXE "/bin/ls"
11645fcdebSAntonio Huete Jimenez #define TDEV "/dev/zero"
12645fcdebSAntonio Huete Jimenez #define TPIPE "/tmp/myfifo123"
13*939d500bSAntonio Huete Jimenez #define TMOUNTP "/dev"
14645fcdebSAntonio Huete Jimenez #define TDEVM "devfs"
15*939d500bSAntonio Huete Jimenez #define TEXIST "/nonexistent"
16645fcdebSAntonio Huete Jimenez
17*939d500bSAntonio Huete Jimenez #define NTESTS 6
18*939d500bSAntonio Huete Jimenez
19*939d500bSAntonio Huete Jimenez static int
test_is_dir(void)20*939d500bSAntonio Huete Jimenez test_is_dir(void)
21645fcdebSAntonio Huete Jimenez {
22*939d500bSAntonio Huete Jimenez int pass = 0;
23*939d500bSAntonio Huete Jimenez
24*939d500bSAntonio Huete Jimenez pass = is_dir("%s", TDIR);
25*939d500bSAntonio Huete Jimenez pass = pass && !is_dir("%s", TEXIST);
26*939d500bSAntonio Huete Jimenez pass = pass && !is_dir("%s", TEXE);
27*939d500bSAntonio Huete Jimenez
28*939d500bSAntonio Huete Jimenez return pass;
29645fcdebSAntonio Huete Jimenez }
30645fcdebSAntonio Huete Jimenez
31*939d500bSAntonio Huete Jimenez static int
test_is_program(void)32*939d500bSAntonio Huete Jimenez test_is_program(void)
33*939d500bSAntonio Huete Jimenez {
34*939d500bSAntonio Huete Jimenez int pass;
35*939d500bSAntonio Huete Jimenez
36*939d500bSAntonio Huete Jimenez pass = is_program(TEXE);
37*939d500bSAntonio Huete Jimenez pass = pass && !is_program("%s", TEXIST);
38*939d500bSAntonio Huete Jimenez pass = pass && !is_program(TDIR);
39*939d500bSAntonio Huete Jimenez
40*939d500bSAntonio Huete Jimenez return pass;
41645fcdebSAntonio Huete Jimenez }
42645fcdebSAntonio Huete Jimenez
43*939d500bSAntonio Huete Jimenez static int
test_is_device(void)44*939d500bSAntonio Huete Jimenez test_is_device(void)
45*939d500bSAntonio Huete Jimenez {
46*939d500bSAntonio Huete Jimenez int pass;
47*939d500bSAntonio Huete Jimenez
48*939d500bSAntonio Huete Jimenez pass = is_device(TDEV);
49*939d500bSAntonio Huete Jimenez pass = pass && !is_device("%s", TEXIST);
50*939d500bSAntonio Huete Jimenez pass = pass && !is_device(TDIR);
51*939d500bSAntonio Huete Jimenez
52*939d500bSAntonio Huete Jimenez return pass;
53645fcdebSAntonio Huete Jimenez }
54645fcdebSAntonio Huete Jimenez
55645fcdebSAntonio Huete Jimenez
56*939d500bSAntonio Huete Jimenez static int
test_is_named_pipe(void)57*939d500bSAntonio Huete Jimenez test_is_named_pipe(void)
58*939d500bSAntonio Huete Jimenez {
59*939d500bSAntonio Huete Jimenez int pass;
60645fcdebSAntonio Huete Jimenez
61*939d500bSAntonio Huete Jimenez /* Need to make a named pipe */
6272a6624fSAntonio Huete Jimenez unlink(TPIPE);
63645fcdebSAntonio Huete Jimenez if (mkfifo(TPIPE, 0600) == -1) {
64645fcdebSAntonio Huete Jimenez perror("mkfifo");
65645fcdebSAntonio Huete Jimenez return EXIT_FAILURE;
66645fcdebSAntonio Huete Jimenez }
67645fcdebSAntonio Huete Jimenez
68*939d500bSAntonio Huete Jimenez pass = is_named_pipe(TPIPE);
69*939d500bSAntonio Huete Jimenez pass = pass && !is_named_pipe("%s", TEXIST);
70*939d500bSAntonio Huete Jimenez pass = pass && !is_named_pipe(TEXE);
71*939d500bSAntonio Huete Jimenez
72*939d500bSAntonio Huete Jimenez return pass;
73645fcdebSAntonio Huete Jimenez }
74645fcdebSAntonio Huete Jimenez
75*939d500bSAntonio Huete Jimenez static int
test_is_mountpoint_mounted(void)76*939d500bSAntonio Huete Jimenez test_is_mountpoint_mounted(void)
77*939d500bSAntonio Huete Jimenez {
78*939d500bSAntonio Huete Jimenez int pass;
79*939d500bSAntonio Huete Jimenez
80*939d500bSAntonio Huete Jimenez pass = is_mountpoint_mounted(TMOUNTP);
81*939d500bSAntonio Huete Jimenez pass = pass && !is_mountpoint_mounted(TEXIST);
82*939d500bSAntonio Huete Jimenez
83*939d500bSAntonio Huete Jimenez return pass;
84645fcdebSAntonio Huete Jimenez }
85645fcdebSAntonio Huete Jimenez
86*939d500bSAntonio Huete Jimenez static int
test_is_device_mounted(void)87*939d500bSAntonio Huete Jimenez test_is_device_mounted(void)
88*939d500bSAntonio Huete Jimenez {
89*939d500bSAntonio Huete Jimenez int pass;
90*939d500bSAntonio Huete Jimenez
91*939d500bSAntonio Huete Jimenez pass = is_device_mounted(TDEVM);
92*939d500bSAntonio Huete Jimenez pass = pass && !is_device_mounted(TEXIST);
93*939d500bSAntonio Huete Jimenez
94*939d500bSAntonio Huete Jimenez return pass;
95645fcdebSAntonio Huete Jimenez }
96645fcdebSAntonio Huete Jimenez
97*939d500bSAntonio Huete Jimenez typedef struct {
98*939d500bSAntonio Huete Jimenez const char *name;
99*939d500bSAntonio Huete Jimenez int (*fn)(void);
100*939d500bSAntonio Huete Jimenez } fspred_test;
101*939d500bSAntonio Huete Jimenez
102*939d500bSAntonio Huete Jimenez fspred_test all_tests[NTESTS] = {
103*939d500bSAntonio Huete Jimenez "is_dir", test_is_dir,
104*939d500bSAntonio Huete Jimenez "is_program", test_is_program,
105*939d500bSAntonio Huete Jimenez "is_device", test_is_device,
106*939d500bSAntonio Huete Jimenez "is_named_pipe", test_is_named_pipe,
107*939d500bSAntonio Huete Jimenez "is_mountpoint_mounted", test_is_mountpoint_mounted,
108*939d500bSAntonio Huete Jimenez "is_device_mounted", test_is_device_mounted
109*939d500bSAntonio Huete Jimenez };
110*939d500bSAntonio Huete Jimenez
111*939d500bSAntonio Huete Jimenez int
main(void)112*939d500bSAntonio Huete Jimenez main(void)
113*939d500bSAntonio Huete Jimenez {
114*939d500bSAntonio Huete Jimenez int pass = 1;
115*939d500bSAntonio Huete Jimenez int ret;
116*939d500bSAntonio Huete Jimenez
117*939d500bSAntonio Huete Jimenez for (int i = 0; i < NTESTS; i++) {
118*939d500bSAntonio Huete Jimenez ret = all_tests[i].fn();
119*939d500bSAntonio Huete Jimenez printf("%s ..... %s\n", all_tests[i].name,
120*939d500bSAntonio Huete Jimenez (ret) ? "pass" : "fail");
121*939d500bSAntonio Huete Jimenez
122*939d500bSAntonio Huete Jimenez if (ret == 0)
123*939d500bSAntonio Huete Jimenez pass = 0;
124645fcdebSAntonio Huete Jimenez }
125645fcdebSAntonio Huete Jimenez
12672a6624fSAntonio Huete Jimenez /* XXX Any reasonable way of testing is_any_slice_mounted? */
127645fcdebSAntonio Huete Jimenez
128*939d500bSAntonio Huete Jimenez return (pass) ? EXIT_SUCCESS : EXIT_FAILURE;
129645fcdebSAntonio Huete Jimenez }
130