mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
tests: qemumonitorjson: Add test case for node name detection code
The code is rather magic so a test case will help making sure that everything works well. The first case is a simple backing chain.
This commit is contained in:
parent
dbad8f8aee
commit
217484bdbd
268
tests/qemumonitorjsondata/qemumonitorjson-nodename-1.json
Normal file
268
tests/qemumonitorjsondata/qemumonitorjson-nodename-1.json
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"iops_rd": 0,
|
||||||
|
"detect_zeroes": "off",
|
||||||
|
"image": {
|
||||||
|
"virtual-size": 9663676416,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"cluster-size": 65536,
|
||||||
|
"format": "qcow2",
|
||||||
|
"actual-size": 9665384448,
|
||||||
|
"format-specific": {
|
||||||
|
"type": "qcow2",
|
||||||
|
"data": {
|
||||||
|
"compat": "1.1",
|
||||||
|
"lazy-refcounts": true,
|
||||||
|
"refcount-bits": 16,
|
||||||
|
"corrupt": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"iops_wr": 0,
|
||||||
|
"ro": true,
|
||||||
|
"node-name": "#block567",
|
||||||
|
"backing_file_depth": 0,
|
||||||
|
"drv": "qcow2",
|
||||||
|
"iops": 0,
|
||||||
|
"bps_wr": 0,
|
||||||
|
"write_threshold": 0,
|
||||||
|
"encrypted": false,
|
||||||
|
"bps": 0,
|
||||||
|
"bps_rd": 0,
|
||||||
|
"cache": {
|
||||||
|
"no-flush": false,
|
||||||
|
"direct": false,
|
||||||
|
"writeback": true
|
||||||
|
},
|
||||||
|
"file": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"encryption_key_missing": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iops_rd": 0,
|
||||||
|
"detect_zeroes": "off",
|
||||||
|
"image": {
|
||||||
|
"virtual-size": 9665380352,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"format": "file",
|
||||||
|
"actual-size": 9665384448,
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"iops_wr": 0,
|
||||||
|
"ro": true,
|
||||||
|
"node-name": "#block424",
|
||||||
|
"backing_file_depth": 0,
|
||||||
|
"drv": "file",
|
||||||
|
"iops": 0,
|
||||||
|
"bps_wr": 0,
|
||||||
|
"write_threshold": 0,
|
||||||
|
"encrypted": false,
|
||||||
|
"bps": 0,
|
||||||
|
"bps_rd": 0,
|
||||||
|
"cache": {
|
||||||
|
"no-flush": false,
|
||||||
|
"direct": false,
|
||||||
|
"writeback": true
|
||||||
|
},
|
||||||
|
"file": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"encryption_key_missing": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iops_rd": 0,
|
||||||
|
"detect_zeroes": "off",
|
||||||
|
"image": {
|
||||||
|
"backing-image": {
|
||||||
|
"virtual-size": 9663676416,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"cluster-size": 65536,
|
||||||
|
"format": "qcow2",
|
||||||
|
"actual-size": 9665384448,
|
||||||
|
"format-specific": {
|
||||||
|
"type": "qcow2",
|
||||||
|
"data": {
|
||||||
|
"compat": "1.1",
|
||||||
|
"lazy-refcounts": true,
|
||||||
|
"refcount-bits": 16,
|
||||||
|
"corrupt": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"backing-filename-format": "qcow2",
|
||||||
|
"virtual-size": 9663676416,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"cluster-size": 65536,
|
||||||
|
"format": "qcow2",
|
||||||
|
"actual-size": 200704,
|
||||||
|
"format-specific": {
|
||||||
|
"type": "qcow2",
|
||||||
|
"data": {
|
||||||
|
"compat": "1.1",
|
||||||
|
"lazy-refcounts": false,
|
||||||
|
"refcount-bits": 16,
|
||||||
|
"corrupt": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"full-backing-filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"backing-filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"iops_wr": 0,
|
||||||
|
"ro": true,
|
||||||
|
"node-name": "#block331",
|
||||||
|
"backing_file_depth": 1,
|
||||||
|
"drv": "qcow2",
|
||||||
|
"iops": 0,
|
||||||
|
"bps_wr": 0,
|
||||||
|
"write_threshold": 0,
|
||||||
|
"backing_file": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"encrypted": false,
|
||||||
|
"bps": 0,
|
||||||
|
"bps_rd": 0,
|
||||||
|
"cache": {
|
||||||
|
"no-flush": false,
|
||||||
|
"direct": false,
|
||||||
|
"writeback": true
|
||||||
|
},
|
||||||
|
"file": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"encryption_key_missing": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iops_rd": 0,
|
||||||
|
"detect_zeroes": "off",
|
||||||
|
"image": {
|
||||||
|
"virtual-size": 197120,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"format": "file",
|
||||||
|
"actual-size": 200704,
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"iops_wr": 0,
|
||||||
|
"ro": true,
|
||||||
|
"node-name": "#block281",
|
||||||
|
"backing_file_depth": 0,
|
||||||
|
"drv": "file",
|
||||||
|
"iops": 0,
|
||||||
|
"bps_wr": 0,
|
||||||
|
"write_threshold": 0,
|
||||||
|
"encrypted": false,
|
||||||
|
"bps": 0,
|
||||||
|
"bps_rd": 0,
|
||||||
|
"cache": {
|
||||||
|
"no-flush": false,
|
||||||
|
"direct": false,
|
||||||
|
"writeback": true
|
||||||
|
},
|
||||||
|
"file": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"encryption_key_missing": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iops_rd": 0,
|
||||||
|
"detect_zeroes": "off",
|
||||||
|
"image": {
|
||||||
|
"backing-image": {
|
||||||
|
"backing-image": {
|
||||||
|
"virtual-size": 9663676416,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"cluster-size": 65536,
|
||||||
|
"format": "qcow2",
|
||||||
|
"actual-size": 9665384448,
|
||||||
|
"format-specific": {
|
||||||
|
"type": "qcow2",
|
||||||
|
"data": {
|
||||||
|
"compat": "1.1",
|
||||||
|
"lazy-refcounts": true,
|
||||||
|
"refcount-bits": 16,
|
||||||
|
"corrupt": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"backing-filename-format": "qcow2",
|
||||||
|
"virtual-size": 9663676416,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"cluster-size": 65536,
|
||||||
|
"format": "qcow2",
|
||||||
|
"actual-size": 200704,
|
||||||
|
"format-specific": {
|
||||||
|
"type": "qcow2",
|
||||||
|
"data": {
|
||||||
|
"compat": "1.1",
|
||||||
|
"lazy-refcounts": false,
|
||||||
|
"refcount-bits": 16,
|
||||||
|
"corrupt": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"full-backing-filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"backing-filename": "/var/lib/libvirt/images/rhel7.3.qcow2",
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"backing-filename-format": "qcow2",
|
||||||
|
"virtual-size": 9663676416,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.1483545313",
|
||||||
|
"cluster-size": 65536,
|
||||||
|
"format": "qcow2",
|
||||||
|
"actual-size": 32968704,
|
||||||
|
"format-specific": {
|
||||||
|
"type": "qcow2",
|
||||||
|
"data": {
|
||||||
|
"compat": "1.1",
|
||||||
|
"lazy-refcounts": false,
|
||||||
|
"refcount-bits": 16,
|
||||||
|
"corrupt": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"full-backing-filename": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"backing-filename": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"iops_wr": 0,
|
||||||
|
"ro": false,
|
||||||
|
"node-name": "#block118",
|
||||||
|
"backing_file_depth": 2,
|
||||||
|
"drv": "qcow2",
|
||||||
|
"iops": 0,
|
||||||
|
"bps_wr": 0,
|
||||||
|
"write_threshold": 0,
|
||||||
|
"backing_file": "/var/lib/libvirt/images/rhel7.3.1483536402",
|
||||||
|
"encrypted": false,
|
||||||
|
"bps": 0,
|
||||||
|
"bps_rd": 0,
|
||||||
|
"cache": {
|
||||||
|
"no-flush": false,
|
||||||
|
"direct": false,
|
||||||
|
"writeback": true
|
||||||
|
},
|
||||||
|
"file": "/var/lib/libvirt/images/rhel7.3.1483545313",
|
||||||
|
"encryption_key_missing": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iops_rd": 0,
|
||||||
|
"detect_zeroes": "off",
|
||||||
|
"image": {
|
||||||
|
"virtual-size": 33030144,
|
||||||
|
"filename": "/var/lib/libvirt/images/rhel7.3.1483545313",
|
||||||
|
"format": "file",
|
||||||
|
"actual-size": 32968704,
|
||||||
|
"dirty-flag": false
|
||||||
|
},
|
||||||
|
"iops_wr": 0,
|
||||||
|
"ro": false,
|
||||||
|
"node-name": "#block078",
|
||||||
|
"backing_file_depth": 0,
|
||||||
|
"drv": "file",
|
||||||
|
"iops": 0,
|
||||||
|
"bps_wr": 0,
|
||||||
|
"write_threshold": 0,
|
||||||
|
"encrypted": false,
|
||||||
|
"bps": 0,
|
||||||
|
"bps_rd": 0,
|
||||||
|
"cache": {
|
||||||
|
"no-flush": false,
|
||||||
|
"direct": false,
|
||||||
|
"writeback": true
|
||||||
|
},
|
||||||
|
"file": "/var/lib/libvirt/images/rhel7.3.1483545313",
|
||||||
|
"encryption_key_missing": false
|
||||||
|
}
|
||||||
|
]
|
15
tests/qemumonitorjsondata/qemumonitorjson-nodename-1.result
Normal file
15
tests/qemumonitorjsondata/qemumonitorjson-nodename-1.result
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
filename : '/var/lib/libvirt/images/rhel7.3.1483545313'
|
||||||
|
format node : '#block118'
|
||||||
|
storage node: '#block078'
|
||||||
|
backingfile : '/var/lib/libvirt/images/rhel7.3.1483536402'
|
||||||
|
backing ptr : '#block331'
|
||||||
|
filename : '/var/lib/libvirt/images/rhel7.3.1483536402'
|
||||||
|
format node : '#block331'
|
||||||
|
storage node: '#block281'
|
||||||
|
backingfile : '/var/lib/libvirt/images/rhel7.3.qcow2'
|
||||||
|
backing ptr : '#block567'
|
||||||
|
filename : '/var/lib/libvirt/images/rhel7.3.qcow2'
|
||||||
|
format node : '#block567'
|
||||||
|
storage node: '#block424'
|
||||||
|
backingfile : '<null>'
|
||||||
|
backing ptr : '<null>'
|
@ -23,6 +23,7 @@
|
|||||||
#include "testutilsqemu.h"
|
#include "testutilsqemu.h"
|
||||||
#include "qemumonitortestutils.h"
|
#include "qemumonitortestutils.h"
|
||||||
#include "qemu/qemu_domain.h"
|
#include "qemu/qemu_domain.h"
|
||||||
|
#include "qemu/qemu_block.h"
|
||||||
#include "qemu/qemu_monitor_json.h"
|
#include "qemu/qemu_monitor_json.h"
|
||||||
#include "virthread.h"
|
#include "virthread.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
@ -2682,6 +2683,109 @@ testQemuMonitorCPUInfo(const void *opaque)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct testBlockNodeNameDetectData {
|
||||||
|
const char *name;
|
||||||
|
const char *nodenames;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
testBlockNodeNameDetectFormat(virBufferPtr buf,
|
||||||
|
const char *basenode,
|
||||||
|
virHashTablePtr nodedata)
|
||||||
|
{
|
||||||
|
qemuBlockNodeNameBackingChainDataPtr entry = NULL;
|
||||||
|
const char *node = basenode;
|
||||||
|
|
||||||
|
virBufferSetIndent(buf, 0);
|
||||||
|
|
||||||
|
while (node) {
|
||||||
|
if (!(entry = virHashLookup(nodedata, node)))
|
||||||
|
break;
|
||||||
|
|
||||||
|
virBufferAsprintf(buf, "filename : '%s'\n", entry->qemufilename);
|
||||||
|
virBufferAsprintf(buf, "format node : '%s'\n",
|
||||||
|
NULLSTR(entry->nodeformat));
|
||||||
|
virBufferAsprintf(buf, "storage node: '%s'\n",
|
||||||
|
NULLSTR(entry->nodestorage));
|
||||||
|
virBufferAsprintf(buf, "backingfile : '%s'\n",
|
||||||
|
NULLSTR(entry->backingstore));
|
||||||
|
virBufferAsprintf(buf, "backing ptr : '%s'\n",
|
||||||
|
NULLSTR(entry->nodebacking));
|
||||||
|
|
||||||
|
virBufferAdjustIndent(buf, 2);
|
||||||
|
|
||||||
|
node = entry->nodebacking;
|
||||||
|
}
|
||||||
|
|
||||||
|
virBufferSetIndent(buf, 0);
|
||||||
|
virBufferAddLit(buf, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
testBlockNodeNameDetect(const void *opaque)
|
||||||
|
{
|
||||||
|
const struct testBlockNodeNameDetectData *data = opaque;
|
||||||
|
char *jsonFile = NULL;
|
||||||
|
char *jsonStr = NULL;
|
||||||
|
char *resultFile = NULL;
|
||||||
|
char *actual = NULL;
|
||||||
|
char **nodenames = NULL;
|
||||||
|
char **next;
|
||||||
|
virJSONValuePtr json = NULL;
|
||||||
|
virHashTablePtr nodedata = NULL;
|
||||||
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (virAsprintf(&jsonFile,
|
||||||
|
"%s/qemumonitorjsondata/qemumonitorjson-nodename-%s.json",
|
||||||
|
abs_srcdir, data->name) < 0 ||
|
||||||
|
virAsprintf(&resultFile,
|
||||||
|
"%s/qemumonitorjsondata/qemumonitorjson-nodename-%s.result",
|
||||||
|
abs_srcdir, data->name) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!(nodenames = virStringSplit(data->nodenames, ",", 0)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virTestLoadFile(jsonFile, &jsonStr) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!(json = virJSONValueFromString(jsonStr)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!(nodedata = qemuBlockNodeNameGetBackingChain(json)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
for (next = nodenames; *next; next++)
|
||||||
|
testBlockNodeNameDetectFormat(&buf, *next, nodedata);
|
||||||
|
|
||||||
|
virBufferTrim(&buf, "\n", -1);
|
||||||
|
|
||||||
|
if (virBufferCheckError(&buf) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
actual = virBufferContentAndReset(&buf);
|
||||||
|
|
||||||
|
if (virTestCompareToFile(actual, resultFile) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VIR_FREE(jsonFile);
|
||||||
|
VIR_FREE(resultFile);
|
||||||
|
VIR_FREE(jsonStr);
|
||||||
|
VIR_FREE(actual);
|
||||||
|
virHashFree(nodedata);
|
||||||
|
virStringListFree(nodenames);
|
||||||
|
virJSONValueFree(json);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mymain(void)
|
mymain(void)
|
||||||
{
|
{
|
||||||
@ -2816,6 +2920,18 @@ mymain(void)
|
|||||||
DO_TEST_CPU_INFO("ppc64-hotplug-4", 24);
|
DO_TEST_CPU_INFO("ppc64-hotplug-4", 24);
|
||||||
DO_TEST_CPU_INFO("ppc64-no-threads", 16);
|
DO_TEST_CPU_INFO("ppc64-no-threads", 16);
|
||||||
|
|
||||||
|
#define DO_TEST_BLOCK_NODE_DETECT(testname, testnodes) \
|
||||||
|
do { \
|
||||||
|
struct testBlockNodeNameDetectData testdata = {testname, testnodes}; \
|
||||||
|
if (virTestRun("node-name-detect(" testname ")", \
|
||||||
|
testBlockNodeNameDetect, &testdata) < 0) \
|
||||||
|
ret = -1; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
DO_TEST_BLOCK_NODE_DETECT("1", "#block118");
|
||||||
|
|
||||||
|
#undef DO_TEST_BLOCK_NODE_DETECT
|
||||||
|
|
||||||
qemuTestDriverFree(&driver);
|
qemuTestDriverFree(&driver);
|
||||||
|
|
||||||
return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
|
Loading…
Reference in New Issue
Block a user