test_path.c revision 8d3f9624838fe3f51aa71276ada9759b407a0ad3
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/* Test path override code */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define _GNU_SOURCE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include "../path.c"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <stdarg.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <sys/stat.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <fcntl.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/* Any log message kills the test. */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncvoid gemu_log(const char *fmt, ...)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync{
1c43cacd545be15afb64413d49eccbecff95e759vboxsync va_list ap;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync fprintf(stderr, "FATAL: ");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync va_start(ap, fmt);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync vfprintf(stderr, fmt, ap);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync va_end(ap);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync exit(1);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define NO_CHANGE(_path) \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync do { \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (strcmp(path(_path), _path) != 0) return __LINE__; \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync } while(0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define CHANGE_TO(_path, _newpath) \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync do { \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (strcmp(path(_path), _newpath) != 0) return __LINE__; \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync } while(0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncstatic void cleanup(void)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync{
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE3");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE4");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE5");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync rmdir("/tmp/qemu-test_path/DIR1/DIR2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync rmdir("/tmp/qemu-test_path/DIR1/DIR3");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync rmdir("/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync rmdir("/tmp/qemu-test_path");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncstatic unsigned int do_test(void)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync{
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (mkdir("/tmp/qemu-test_path", 0700) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (mkdir("/tmp/qemu-test_path/DIR1", 0700) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (mkdir("/tmp/qemu-test_path/DIR1/DIR2", 0700) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (mkdir("/tmp/qemu-test_path/DIR1/DIR3", 0700) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE", 0600)) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE2", 0600)) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE3", 0600)) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE4", 0600)) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE5", 0600)) != 0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return __LINE__;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync init_paths("/tmp/qemu-test_path");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path/");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path/D");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path/DI");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path/DIR");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/tmp/qemu-test_path/DIR1/");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/D");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DI");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1.");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1", "/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/", "/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/D");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DI");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/", "/tmp/qemu-test_path/DIR1/DIR2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR3", "/tmp/qemu-test_path/DIR1/DIR3");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR3/", "/tmp/qemu-test_path/DIR1/DIR3");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/F");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/FI");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/FIL");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/FIL.");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/FILE2", "/tmp/qemu-test_path/DIR1/DIR2/FILE2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/FILE3", "/tmp/qemu-test_path/DIR1/DIR2/FILE3");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/FILE4", "/tmp/qemu-test_path/DIR1/DIR2/FILE4");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/FILE5", "/tmp/qemu-test_path/DIR1/DIR2/FILE5");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/FILE6");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/FILE/X");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/../DIR1", "/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/../DIR1/", "/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/../DIR1", "/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/../DIR1/", "/tmp/qemu-test_path/DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/../DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/../DIR2/../../DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/../DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/../DIR1");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync NO_CHANGE("/DIR1/DIR2/../FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/./DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/././DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/./DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/././DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/DIR1/DIR2/././FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CHANGE_TO("/./DIR1/./DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return 0;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncint main(int argc, char *argv[])
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync{
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync int ret;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret = do_test();
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cleanup();
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (ret) {
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync fprintf(stderr, "test_path: failed on line %i\n", ret);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return 1;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync }
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return 0;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync