2015-01-19 23:15:51 +03:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <glib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <sys/wait.h>
|
|
|
|
|
|
|
|
#include "libqtest.h"
|
|
|
|
#include "libqos/libqos.h"
|
|
|
|
#include "libqos/pci.h"
|
|
|
|
|
|
|
|
/*** Test Setup & Teardown ***/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Launch QEMU with the given command line,
|
|
|
|
* and then set up interrupts and our guest malloc interface.
|
|
|
|
*/
|
2015-01-19 23:15:55 +03:00
|
|
|
QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap)
|
2015-01-19 23:15:51 +03:00
|
|
|
{
|
|
|
|
char *cmdline;
|
|
|
|
|
2015-01-19 23:15:52 +03:00
|
|
|
struct QOSState *qs = g_malloc(sizeof(QOSState));
|
2015-01-19 23:15:51 +03:00
|
|
|
|
2015-01-19 23:15:52 +03:00
|
|
|
cmdline = g_strdup_vprintf(cmdline_fmt, ap);
|
2015-01-19 23:15:51 +03:00
|
|
|
qs->qts = qtest_start(cmdline);
|
2015-01-19 23:15:55 +03:00
|
|
|
qs->ops = ops;
|
2015-01-19 23:15:51 +03:00
|
|
|
qtest_irq_intercept_in(global_qtest, "ioapic");
|
2015-01-19 23:15:55 +03:00
|
|
|
if (ops && ops->init_allocator) {
|
|
|
|
qs->alloc = ops->init_allocator(ALLOC_NO_FLAGS);
|
|
|
|
}
|
2015-01-19 23:15:51 +03:00
|
|
|
|
|
|
|
g_free(cmdline);
|
|
|
|
return qs;
|
|
|
|
}
|
|
|
|
|
2015-01-19 23:15:52 +03:00
|
|
|
/**
|
|
|
|
* Launch QEMU with the given command line,
|
|
|
|
* and then set up interrupts and our guest malloc interface.
|
|
|
|
*/
|
2015-01-19 23:15:55 +03:00
|
|
|
QOSState *qtest_boot(QOSOps *ops, const char *cmdline_fmt, ...)
|
2015-01-19 23:15:52 +03:00
|
|
|
{
|
|
|
|
QOSState *qs;
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start(ap, cmdline_fmt);
|
2015-01-19 23:15:55 +03:00
|
|
|
qs = qtest_vboot(ops, cmdline_fmt, ap);
|
2015-01-19 23:15:52 +03:00
|
|
|
va_end(ap);
|
|
|
|
|
|
|
|
return qs;
|
|
|
|
}
|
|
|
|
|
2015-01-19 23:15:51 +03:00
|
|
|
/**
|
|
|
|
* Tear down the QEMU instance.
|
|
|
|
*/
|
|
|
|
void qtest_shutdown(QOSState *qs)
|
|
|
|
{
|
2015-01-19 23:15:55 +03:00
|
|
|
if (qs->alloc && qs->ops && qs->ops->uninit_allocator) {
|
|
|
|
qs->ops->uninit_allocator(qs->alloc);
|
2015-01-19 23:15:51 +03:00
|
|
|
qs->alloc = NULL;
|
|
|
|
}
|
|
|
|
qtest_quit(qs->qts);
|
|
|
|
g_free(qs);
|
|
|
|
}
|