|
|
1.1 root 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: }
1.1.1.2 ! root 152:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.