提交 db57d7a3 编写于 作者: E Eric Blake 提交者: Thomas Huth

wdt_ib700-test: Drop dependence on global_qtest

As a general rule, we prefer avoiding implicit global state
because it makes code harder to safely copy and paste without
thinking about the global state.  Improve this test to be
explicit about the state.
Signed-off-by: NEric Blake <eblake@redhat.com>
Reviewed-by: NThomas Huth <thuth@redhat.com>
Signed-off-by: NThomas Huth <thuth@redhat.com>
上级 8b19f2b7
......@@ -12,9 +12,9 @@
#include "qapi/qmp/qdict.h"
#include "qemu/timer.h"
static void qmp_check_no_event(void)
static void qmp_check_no_event(QTestState *s)
{
QDict *resp = qmp("{'execute':'query-status'}");
QDict *resp = qtest_qmp(s, "{'execute':'query-status'}");
g_assert(qdict_haskey(resp, "return"));
QDECREF(resp);
}
......@@ -23,30 +23,30 @@ static QDict *ib700_program_and_wait(QTestState *s)
{
QDict *event, *data;
clock_step(NANOSECONDS_PER_SECOND * 40);
qmp_check_no_event();
qtest_clock_step(s, NANOSECONDS_PER_SECOND * 40);
qmp_check_no_event(s);
/* 2 second limit */
outb(0x443, 14);
qtest_outb(s, 0x443, 14);
/* Ping */
clock_step(NANOSECONDS_PER_SECOND);
qmp_check_no_event();
outb(0x443, 14);
qtest_clock_step(s, NANOSECONDS_PER_SECOND);
qmp_check_no_event(s);
qtest_outb(s, 0x443, 14);
/* Disable */
clock_step(NANOSECONDS_PER_SECOND);
qmp_check_no_event();
outb(0x441, 1);
clock_step(3 * NANOSECONDS_PER_SECOND);
qmp_check_no_event();
qtest_clock_step(s, NANOSECONDS_PER_SECOND);
qmp_check_no_event(s);
qtest_outb(s, 0x441, 1);
qtest_clock_step(s, 3 * NANOSECONDS_PER_SECOND);
qmp_check_no_event(s);
/* Enable and let it fire */
outb(0x443, 13);
clock_step(3 * NANOSECONDS_PER_SECOND);
qmp_check_no_event();
clock_step(2 * NANOSECONDS_PER_SECOND);
event = qmp_eventwait_ref("WATCHDOG");
qtest_outb(s, 0x443, 13);
qtest_clock_step(s, 3 * NANOSECONDS_PER_SECOND);
qmp_check_no_event(s);
qtest_clock_step(s, 2 * NANOSECONDS_PER_SECOND);
event = qtest_qmp_eventwait_ref(s, "WATCHDOG");
data = qdict_get_qdict(event, "data");
QINCREF(data);
QDECREF(event);
......@@ -57,48 +57,53 @@ static QDict *ib700_program_and_wait(QTestState *s)
static void ib700_pause(void)
{
QDict *d;
QTestState *s = qtest_start("-watchdog-action pause -device ib700");
QTestState *s = qtest_init("-watchdog-action pause -device ib700");
qtest_irq_intercept_in(s, "ioapic");
d = ib700_program_and_wait(s);
g_assert(!strcmp(qdict_get_str(d, "action"), "pause"));
QDECREF(d);
qmp_eventwait("STOP");
qtest_end();
qtest_qmp_eventwait(s, "STOP");
qtest_quit(s);
}
static void ib700_reset(void)
{
QDict *d;
QTestState *s = qtest_start("-watchdog-action reset -device ib700");
QTestState *s = qtest_init("-watchdog-action reset -device ib700");
qtest_irq_intercept_in(s, "ioapic");
d = ib700_program_and_wait(s);
g_assert(!strcmp(qdict_get_str(d, "action"), "reset"));
QDECREF(d);
qmp_eventwait("RESET");
qtest_end();
qtest_qmp_eventwait(s, "RESET");
qtest_quit(s);
}
static void ib700_shutdown(void)
{
QDict *d;
QTestState *s = qtest_start("-watchdog-action reset -no-reboot -device ib700");
QTestState *s;
s = qtest_init("-watchdog-action reset -no-reboot -device ib700");
qtest_irq_intercept_in(s, "ioapic");
d = ib700_program_and_wait(s);
g_assert(!strcmp(qdict_get_str(d, "action"), "reset"));
QDECREF(d);
qmp_eventwait("SHUTDOWN");
qtest_end();
qtest_qmp_eventwait(s, "SHUTDOWN");
qtest_quit(s);
}
static void ib700_none(void)
{
QDict *d;
QTestState *s = qtest_start("-watchdog-action none -device ib700");
QTestState *s = qtest_init("-watchdog-action none -device ib700");
qtest_irq_intercept_in(s, "ioapic");
d = ib700_program_and_wait(s);
g_assert(!strcmp(qdict_get_str(d, "action"), "none"));
QDECREF(d);
qtest_end();
qtest_quit(s);
}
int main(int argc, char **argv)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册