test_path.c revision 178d85b8274f9ac82fb553c80760bbbb4044401c
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync/* Test path override code */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#define _GNU_SOURCE
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync#include "../path.c"
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <stdarg.h>
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <sys/stat.h>
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <fcntl.h>
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/* Any log message kills the test. */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncvoid gemu_log(const char *fmt, ...)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync{
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync va_list ap;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync fprintf(stderr, "FATAL: ");
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync va_start(ap, fmt);
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync vfprintf(stderr, fmt, ap);
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync va_end(ap);
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync exit(1);
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync}
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#define NO_CHANGE(_path) \
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync do { \
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (strcmp(path(_path), _path) != 0) return __LINE__; \
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync } while(0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#define CHANGE_TO(_path, _newpath) \
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync do { \
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (strcmp(path(_path), _newpath) != 0) return __LINE__; \
da957c069c2a3c582fe265ff88170ce4c42b499dvboxsync } while(0)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncstatic void cleanup(void)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync{
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE2");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE3");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE4");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE5");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync rmdir("/tmp/qemu-test_path/DIR1/DIR2");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync rmdir("/tmp/qemu-test_path/DIR1/DIR3");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync rmdir("/tmp/qemu-test_path/DIR1");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync rmdir("/tmp/qemu-test_path");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync}
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsyncstatic unsigned int do_test(void)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync{
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync if (mkdir("/tmp/qemu-test_path", 0700) != 0)
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync return __LINE__;
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync if (mkdir("/tmp/qemu-test_path/DIR1", 0700) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (mkdir("/tmp/qemu-test_path/DIR1/DIR2", 0700) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync if (mkdir("/tmp/qemu-test_path/DIR1/DIR3", 0700) != 0)
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE", 0600)) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE2", 0600)) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE3", 0600)) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE4", 0600)) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE5", 0600)) != 0)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return __LINE__;
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync init_paths("/tmp/qemu-test_path");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/tmp");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/tmp/");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/tmp/qemu-test_path");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/tmp/qemu-test_path/");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/tmp/qemu-test_path/D");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/tmp/qemu-test_path/DI");
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync NO_CHANGE("/tmp/qemu-test_path/DIR");
fa033b734cf3b131680f290326ccbbd23c42946bvboxsync NO_CHANGE("/tmp/qemu-test_path/DIR1");
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync NO_CHANGE("/tmp/qemu-test_path/DIR1/");
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync NO_CHANGE("/D");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DI");
fa033b734cf3b131680f290326ccbbd23c42946bvboxsync NO_CHANGE("/DIR");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR2");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1.");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync CHANGE_TO("/DIR1", "/tmp/qemu-test_path/DIR1");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync CHANGE_TO("/DIR1/", "/tmp/qemu-test_path/DIR1");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/D");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync NO_CHANGE("/DIR1/DI");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/DIR");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync NO_CHANGE("/DIR1/DIR1");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync CHANGE_TO("/DIR1/DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync CHANGE_TO("/DIR1/DIR2/", "/tmp/qemu-test_path/DIR1/DIR2");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
a39ea3668b7019c23a68936259545f9b71bce1aavboxsync CHANGE_TO("/DIR1/DIR3", "/tmp/qemu-test_path/DIR1/DIR3");
a39ea3668b7019c23a68936259545f9b71bce1aavboxsync CHANGE_TO("/DIR1/DIR3/", "/tmp/qemu-test_path/DIR1/DIR3");
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/DIR2/F");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/DIR2/FI");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/DIR2/FIL");
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync NO_CHANGE("/DIR1/DIR2/FIL.");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync CHANGE_TO("/DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync CHANGE_TO("/DIR1/DIR2/FILE2", "/tmp/qemu-test_path/DIR1/DIR2/FILE2");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync CHANGE_TO("/DIR1/DIR2/FILE3", "/tmp/qemu-test_path/DIR1/DIR2/FILE3");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync CHANGE_TO("/DIR1/DIR2/FILE4", "/tmp/qemu-test_path/DIR1/DIR2/FILE4");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync CHANGE_TO("/DIR1/DIR2/FILE5", "/tmp/qemu-test_path/DIR1/DIR2/FILE5");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/DIR2/FILE6");
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync NO_CHANGE("/DIR1/DIR2/FILE/X");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync CHANGE_TO("/DIR1/../DIR1", "/tmp/qemu-test_path/DIR1");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync CHANGE_TO("/DIR1/../DIR1/", "/tmp/qemu-test_path/DIR1");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync CHANGE_TO("/../DIR1", "/tmp/qemu-test_path/DIR1");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync CHANGE_TO("/../DIR1/", "/tmp/qemu-test_path/DIR1");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync CHANGE_TO("/DIR1/DIR2/../DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync CHANGE_TO("/DIR1/DIR2/../DIR2/../../DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync CHANGE_TO("/DIR1/DIR2/../DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync NO_CHANGE("/DIR1/DIR2/../DIR1");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync NO_CHANGE("/DIR1/DIR2/../FILE");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync CHANGE_TO("/./DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync CHANGE_TO("/././DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync CHANGE_TO("/DIR1/./DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
0f1e77149ab5ab40fa2bd74a5330e087416b3c7bvboxsync CHANGE_TO("/DIR1/././DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync CHANGE_TO("/DIR1/DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync CHANGE_TO("/DIR1/DIR2/././FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync CHANGE_TO("/./DIR1/./DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
e3f5c51715cbf77ae2d2e9d05bafd00d69b1bec9vboxsync
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync return 0;
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync}
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsyncint main(int argc, char *argv[])
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync{
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync int ret;
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync ret = do_test();
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync cleanup();
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync if (ret) {
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync fprintf(stderr, "test_path: failed on line %i\n", ret);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync return 1;
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync }
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync return 0;
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync}
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync