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