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