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