1 | /* Test path override code */
|
---|
2 | #define _GNU_SOURCE
|
---|
3 | #include "../path.c"
|
---|
4 | #include <stdarg.h>
|
---|
5 | #include <sys/stat.h>
|
---|
6 | #include <fcntl.h>
|
---|
7 |
|
---|
8 | /* Any log message kills the test. */
|
---|
9 | void gemu_log(const char *fmt, ...)
|
---|
10 | {
|
---|
11 | va_list ap;
|
---|
12 |
|
---|
13 | fprintf(stderr, "FATAL: ");
|
---|
14 | va_start(ap, fmt);
|
---|
15 | vfprintf(stderr, fmt, ap);
|
---|
16 | va_end(ap);
|
---|
17 | exit(1);
|
---|
18 | }
|
---|
19 |
|
---|
20 | #define NO_CHANGE(_path) \
|
---|
21 | do { \
|
---|
22 | if (strcmp(path(_path), _path) != 0) return __LINE__; \
|
---|
23 | } while(0)
|
---|
24 |
|
---|
25 | #define CHANGE_TO(_path, _newpath) \
|
---|
26 | do { \
|
---|
27 | if (strcmp(path(_path), _newpath) != 0) return __LINE__; \
|
---|
28 | } while(0)
|
---|
29 |
|
---|
30 | static void cleanup(void)
|
---|
31 | {
|
---|
32 | unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
33 | unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE2");
|
---|
34 | unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE3");
|
---|
35 | unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE4");
|
---|
36 | unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE5");
|
---|
37 | rmdir("/tmp/qemu-test_path/DIR1/DIR2");
|
---|
38 | rmdir("/tmp/qemu-test_path/DIR1/DIR3");
|
---|
39 | rmdir("/tmp/qemu-test_path/DIR1");
|
---|
40 | rmdir("/tmp/qemu-test_path");
|
---|
41 | }
|
---|
42 |
|
---|
43 | static unsigned int do_test(void)
|
---|
44 | {
|
---|
45 | if (mkdir("/tmp/qemu-test_path", 0700) != 0)
|
---|
46 | return __LINE__;
|
---|
47 |
|
---|
48 | if (mkdir("/tmp/qemu-test_path/DIR1", 0700) != 0)
|
---|
49 | return __LINE__;
|
---|
50 |
|
---|
51 | if (mkdir("/tmp/qemu-test_path/DIR1/DIR2", 0700) != 0)
|
---|
52 | return __LINE__;
|
---|
53 |
|
---|
54 | if (mkdir("/tmp/qemu-test_path/DIR1/DIR3", 0700) != 0)
|
---|
55 | return __LINE__;
|
---|
56 |
|
---|
57 | if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE", 0600)) != 0)
|
---|
58 | return __LINE__;
|
---|
59 |
|
---|
60 | if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE2", 0600)) != 0)
|
---|
61 | return __LINE__;
|
---|
62 |
|
---|
63 | if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE3", 0600)) != 0)
|
---|
64 | return __LINE__;
|
---|
65 |
|
---|
66 | if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE4", 0600)) != 0)
|
---|
67 | return __LINE__;
|
---|
68 |
|
---|
69 | if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE5", 0600)) != 0)
|
---|
70 | return __LINE__;
|
---|
71 |
|
---|
72 | init_paths("/tmp/qemu-test_path");
|
---|
73 |
|
---|
74 | NO_CHANGE("/tmp");
|
---|
75 | NO_CHANGE("/tmp/");
|
---|
76 | NO_CHANGE("/tmp/qemu-test_path");
|
---|
77 | NO_CHANGE("/tmp/qemu-test_path/");
|
---|
78 | NO_CHANGE("/tmp/qemu-test_path/D");
|
---|
79 | NO_CHANGE("/tmp/qemu-test_path/DI");
|
---|
80 | NO_CHANGE("/tmp/qemu-test_path/DIR");
|
---|
81 | NO_CHANGE("/tmp/qemu-test_path/DIR1");
|
---|
82 | NO_CHANGE("/tmp/qemu-test_path/DIR1/");
|
---|
83 |
|
---|
84 | NO_CHANGE("/D");
|
---|
85 | NO_CHANGE("/DI");
|
---|
86 | NO_CHANGE("/DIR");
|
---|
87 | NO_CHANGE("/DIR2");
|
---|
88 | NO_CHANGE("/DIR1.");
|
---|
89 |
|
---|
90 | CHANGE_TO("/DIR1", "/tmp/qemu-test_path/DIR1");
|
---|
91 | CHANGE_TO("/DIR1/", "/tmp/qemu-test_path/DIR1");
|
---|
92 |
|
---|
93 | NO_CHANGE("/DIR1/D");
|
---|
94 | NO_CHANGE("/DIR1/DI");
|
---|
95 | NO_CHANGE("/DIR1/DIR");
|
---|
96 | NO_CHANGE("/DIR1/DIR1");
|
---|
97 |
|
---|
98 | CHANGE_TO("/DIR1/DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
|
---|
99 | CHANGE_TO("/DIR1/DIR2/", "/tmp/qemu-test_path/DIR1/DIR2");
|
---|
100 |
|
---|
101 | CHANGE_TO("/DIR1/DIR3", "/tmp/qemu-test_path/DIR1/DIR3");
|
---|
102 | CHANGE_TO("/DIR1/DIR3/", "/tmp/qemu-test_path/DIR1/DIR3");
|
---|
103 |
|
---|
104 | NO_CHANGE("/DIR1/DIR2/F");
|
---|
105 | NO_CHANGE("/DIR1/DIR2/FI");
|
---|
106 | NO_CHANGE("/DIR1/DIR2/FIL");
|
---|
107 | NO_CHANGE("/DIR1/DIR2/FIL.");
|
---|
108 |
|
---|
109 | CHANGE_TO("/DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
110 | CHANGE_TO("/DIR1/DIR2/FILE2", "/tmp/qemu-test_path/DIR1/DIR2/FILE2");
|
---|
111 | CHANGE_TO("/DIR1/DIR2/FILE3", "/tmp/qemu-test_path/DIR1/DIR2/FILE3");
|
---|
112 | CHANGE_TO("/DIR1/DIR2/FILE4", "/tmp/qemu-test_path/DIR1/DIR2/FILE4");
|
---|
113 | CHANGE_TO("/DIR1/DIR2/FILE5", "/tmp/qemu-test_path/DIR1/DIR2/FILE5");
|
---|
114 |
|
---|
115 | NO_CHANGE("/DIR1/DIR2/FILE6");
|
---|
116 | NO_CHANGE("/DIR1/DIR2/FILE/X");
|
---|
117 |
|
---|
118 | CHANGE_TO("/DIR1/../DIR1", "/tmp/qemu-test_path/DIR1");
|
---|
119 | CHANGE_TO("/DIR1/../DIR1/", "/tmp/qemu-test_path/DIR1");
|
---|
120 | CHANGE_TO("/../DIR1", "/tmp/qemu-test_path/DIR1");
|
---|
121 | CHANGE_TO("/../DIR1/", "/tmp/qemu-test_path/DIR1");
|
---|
122 | CHANGE_TO("/DIR1/DIR2/../DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
|
---|
123 | CHANGE_TO("/DIR1/DIR2/../DIR2/../../DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
124 | CHANGE_TO("/DIR1/DIR2/../DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
125 |
|
---|
126 | NO_CHANGE("/DIR1/DIR2/../DIR1");
|
---|
127 | NO_CHANGE("/DIR1/DIR2/../FILE");
|
---|
128 |
|
---|
129 | CHANGE_TO("/./DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
130 | CHANGE_TO("/././DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
131 | CHANGE_TO("/DIR1/./DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
132 | CHANGE_TO("/DIR1/././DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
133 | CHANGE_TO("/DIR1/DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
134 | CHANGE_TO("/DIR1/DIR2/././FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
135 | CHANGE_TO("/./DIR1/./DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
|
---|
136 |
|
---|
137 | return 0;
|
---|
138 | }
|
---|
139 |
|
---|
140 | int main(int argc, char *argv[])
|
---|
141 | {
|
---|
142 | int ret;
|
---|
143 |
|
---|
144 | ret = do_test();
|
---|
145 | cleanup();
|
---|
146 | if (ret) {
|
---|
147 | fprintf(stderr, "test_path: failed on line %i\n", ret);
|
---|
148 | return 1;
|
---|
149 | }
|
---|
150 | return 0;
|
---|
151 | }
|
---|