/* Test path override code */
#include "config-host.h"
#include "util/cutils.c"
#include "util/hexdump.c"
#include "util/iov.c"
#include "util/path.c"
#include "util/qemu-timer-common.c"
#include <stdarg.h>
#include <sys/stat.h>
#include <fcntl.h>

void qemu_log(const char *fmt, ...);

/* Any log message kills the test. */
void qemu_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;
}
