mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-08 12:41:29 +00:00
Introduce a test suite for the JSON monitor
Take advantage of the previously added monitor helpers to create a test suite for the QEMU JSON monitor impl. As a proof of concept, this tests the 'qemuMonitorGetStatus' implementation Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
8d78fd04be
commit
48d112210d
1
.gitignore
vendored
1
.gitignore
vendored
@ -140,6 +140,7 @@
|
|||||||
/tests/openvzutilstest
|
/tests/openvzutilstest
|
||||||
/tests/qemuargv2xmltest
|
/tests/qemuargv2xmltest
|
||||||
/tests/qemuhelptest
|
/tests/qemuhelptest
|
||||||
|
/tests/qemumonitorjsontest
|
||||||
/tests/qemumonitortest
|
/tests/qemumonitortest
|
||||||
/tests/qemuxmlnstest
|
/tests/qemuxmlnstest
|
||||||
/tests/qparamtest
|
/tests/qparamtest
|
||||||
|
@ -113,7 +113,7 @@ endif
|
|||||||
if WITH_QEMU
|
if WITH_QEMU
|
||||||
test_programs += qemuxml2argvtest qemuxml2xmltest qemuxmlnstest \
|
test_programs += qemuxml2argvtest qemuxml2xmltest qemuxmlnstest \
|
||||||
qemuargv2xmltest qemuhelptest domainsnapshotxml2xmltest \
|
qemuargv2xmltest qemuhelptest domainsnapshotxml2xmltest \
|
||||||
qemumonitortest
|
qemumonitortest qemumonitorjsontest
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if WITH_LXC
|
if WITH_LXC
|
||||||
@ -350,6 +350,14 @@ qemuhelptest_LDADD = $(qemu_LDADDS)
|
|||||||
qemumonitortest_SOURCES = qemumonitortest.c testutils.c testutils.h
|
qemumonitortest_SOURCES = qemumonitortest.c testutils.c testutils.h
|
||||||
qemumonitortest_LDADD = $(qemu_LDADDS)
|
qemumonitortest_LDADD = $(qemu_LDADDS)
|
||||||
|
|
||||||
|
qemumonitorjsontest_SOURCES = \
|
||||||
|
qemumonitorjsontest.c \
|
||||||
|
testutils.c testutils.h \
|
||||||
|
testutilsqemu.c testutilsqemu.h \
|
||||||
|
$(NULL)
|
||||||
|
qemumonitorjsontest_LDADD = $(qemu_LDADDS) libqemumonitortestutils.la
|
||||||
|
qemumonitorjsontest_CFLAGS = -Dabs_builddir="\"$(abs_builddir)\"" $(AM_CFLAGS)
|
||||||
|
|
||||||
domainsnapshotxml2xmltest_SOURCES = \
|
domainsnapshotxml2xmltest_SOURCES = \
|
||||||
domainsnapshotxml2xmltest.c testutilsqemu.c testutilsqemu.h \
|
domainsnapshotxml2xmltest.c testutilsqemu.c testutilsqemu.h \
|
||||||
testutils.c testutils.h
|
testutils.c testutils.h
|
||||||
@ -358,6 +366,7 @@ else
|
|||||||
EXTRA_DIST += qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c \
|
EXTRA_DIST += qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c \
|
||||||
qemuxmlnstest.c qemuhelptest.c domainsnapshotxml2xmltest.c \
|
qemuxmlnstest.c qemuhelptest.c domainsnapshotxml2xmltest.c \
|
||||||
qemumonitortest.c testutilsqemu.c testutilsqemu.h \
|
qemumonitortest.c testutilsqemu.c testutilsqemu.h \
|
||||||
|
qemumonitorjsontest.c \
|
||||||
$(QEMUMONITORTESTUTILS_SOURCES)
|
$(QEMUMONITORTESTUTILS_SOURCES)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
150
tests/qemumonitorjsontest.c
Normal file
150
tests/qemumonitorjsontest.c
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2012 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "testutils.h"
|
||||||
|
#include "testutilsqemu.h"
|
||||||
|
#include "qemumonitortestutils.h"
|
||||||
|
#include "threads.h"
|
||||||
|
#include "virterror_internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define VIR_FROM_THIS VIR_FROM_NONE
|
||||||
|
|
||||||
|
static int
|
||||||
|
testQemuMonitorJSONGetStatus(const void *data)
|
||||||
|
{
|
||||||
|
virCapsPtr caps = (virCapsPtr)data;
|
||||||
|
qemuMonitorTestPtr test = qemuMonitorTestNew(true, caps);
|
||||||
|
int ret = -1;
|
||||||
|
bool running = false;
|
||||||
|
virDomainPausedReason reason = 0;
|
||||||
|
|
||||||
|
if (!test)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddItem(test, "query-status",
|
||||||
|
"{ "
|
||||||
|
" \"return\": { "
|
||||||
|
" \"status\": \"running\", "
|
||||||
|
" \"singlestep\": false, "
|
||||||
|
" \"running\": true "
|
||||||
|
" } "
|
||||||
|
"}") < 0)
|
||||||
|
goto cleanup;
|
||||||
|
if (qemuMonitorTestAddItem(test, "query-status",
|
||||||
|
"{ "
|
||||||
|
" \"return\": { "
|
||||||
|
" \"singlestep\": false, "
|
||||||
|
" \"running\": false "
|
||||||
|
" } "
|
||||||
|
"}") < 0)
|
||||||
|
goto cleanup;
|
||||||
|
if (qemuMonitorTestAddItem(test, "query-status",
|
||||||
|
"{ "
|
||||||
|
" \"return\": { "
|
||||||
|
" \"status\": \"inmigrate\", "
|
||||||
|
" \"singlestep\": false, "
|
||||||
|
" \"running\": false "
|
||||||
|
" } "
|
||||||
|
"}") < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuMonitorGetStatus(qemuMonitorTestGetMonitor(test),
|
||||||
|
&running, &reason) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!running) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
"Running was not true");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reason != VIR_DOMAIN_PAUSED_UNKNOWN) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
"Reason was unexpectedly set to %d", reason);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qemuMonitorGetStatus(qemuMonitorTestGetMonitor(test),
|
||||||
|
&running, &reason) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (running) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
"Running was not false");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reason != VIR_DOMAIN_PAUSED_UNKNOWN) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
"Reason was unexpectedly set to %d", reason);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qemuMonitorGetStatus(qemuMonitorTestGetMonitor(test),
|
||||||
|
&running, &reason) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (running) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
"Running was not false");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reason != VIR_DOMAIN_PAUSED_MIGRATION) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
"Reason was unexpectedly set to %d", reason);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
qemuMonitorTestFree(test);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
mymain(void)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
virCapsPtr caps;
|
||||||
|
|
||||||
|
if (virThreadInitialize() < 0)
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
|
if (!(caps = testQemuCapsInit()))
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
|
virEventRegisterDefaultImpl();
|
||||||
|
|
||||||
|
#define DO_TEST(name) \
|
||||||
|
if (virtTestRun(# name, 1, testQemuMonitorJSON ## name, caps) < 0) \
|
||||||
|
ret = -1
|
||||||
|
|
||||||
|
DO_TEST(GetStatus);
|
||||||
|
|
||||||
|
virCapabilitiesFree(caps);
|
||||||
|
|
||||||
|
return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VIRT_TEST_MAIN(mymain)
|
Loading…
x
Reference in New Issue
Block a user