1 #include <stdio.h> 2 3 #include <fspred.h> 4 #include <stdlib.h> 5 #include <string.h> 6 #include <sys/stat.h> 7 #include <unistd.h> 8 9 #define TDIR "/bin" 10 #define TEXE "/bin/ls" 11 #define TDEV "/dev/zero" 12 #define TPIPE "/tmp/myfifo123" 13 #define TMOUNTP "/dev" 14 #define TDEVM "devfs" 15 #define TEXIST "/nonexistent" 16 17 #define NTESTS 6 18 19 static int 20 test_is_dir(void) 21 { 22 int pass = 0; 23 24 pass = is_dir("%s", TDIR); 25 pass = pass && !is_dir("%s", TEXIST); 26 pass = pass && !is_dir("%s", TEXE); 27 28 return pass; 29 } 30 31 static int 32 test_is_program(void) 33 { 34 int pass; 35 36 pass = is_program(TEXE); 37 pass = pass && !is_program("%s", TEXIST); 38 pass = pass && !is_program(TDIR); 39 40 return pass; 41 } 42 43 static int 44 test_is_device(void) 45 { 46 int pass; 47 48 pass = is_device(TDEV); 49 pass = pass && !is_device("%s", TEXIST); 50 pass = pass && !is_device(TDIR); 51 52 return pass; 53 } 54 55 56 static int 57 test_is_named_pipe(void) 58 { 59 int pass; 60 61 /* Need to make a named pipe */ 62 unlink(TPIPE); 63 if (mkfifo(TPIPE, 0600) == -1) { 64 perror("mkfifo"); 65 return EXIT_FAILURE; 66 } 67 68 pass = is_named_pipe(TPIPE); 69 pass = pass && !is_named_pipe("%s", TEXIST); 70 pass = pass && !is_named_pipe(TEXE); 71 72 return pass; 73 } 74 75 static int 76 test_is_mountpoint_mounted(void) 77 { 78 int pass; 79 80 pass = is_mountpoint_mounted(TMOUNTP); 81 pass = pass && !is_mountpoint_mounted(TEXIST); 82 83 return pass; 84 } 85 86 static int 87 test_is_device_mounted(void) 88 { 89 int pass; 90 91 pass = is_device_mounted(TDEVM); 92 pass = pass && !is_device_mounted(TEXIST); 93 94 return pass; 95 } 96 97 typedef struct { 98 const char *name; 99 int (*fn)(void); 100 } fspred_test; 101 102 fspred_test all_tests[NTESTS] = { 103 "is_dir", test_is_dir, 104 "is_program", test_is_program, 105 "is_device", test_is_device, 106 "is_named_pipe", test_is_named_pipe, 107 "is_mountpoint_mounted", test_is_mountpoint_mounted, 108 "is_device_mounted", test_is_device_mounted 109 }; 110 111 int 112 main(void) 113 { 114 int pass = 1; 115 int ret; 116 117 for (int i = 0; i < NTESTS; i++) { 118 ret = all_tests[i].fn(); 119 printf("%s ..... %s\n", all_tests[i].name, 120 (ret) ? "pass" : "fail"); 121 122 if (ret == 0) 123 pass = 0; 124 } 125 126 /* XXX Any reasonable way of testing is_any_slice_mounted? */ 127 128 return (pass) ? EXIT_SUCCESS : EXIT_FAILURE; 129 } 130