On 6/7/19 2:08 AM, Peter Krempa wrote:
On Thu, Jun 06, 2019 at 08:41:26 -0500, Eric Blake wrote:
> On 6/6/19 7:48 AM, Peter Krempa wrote:
>> On Wed, Jun 05, 2019 at 22:01:09 -0500, Eric Blake wrote:
>>> The upcoming virDomainBackup() API needs to take advantage of various
>>> qcow2 bitmap manipulations as the basis to virDomainCheckpoints and
>>> incremental backups. Add four functions to expose
>>> block-dirty-bitmap-{add,enable,disable,merge} (this is the
>>> recently-added QEMU_CAPS_BITMAP_MERGE capability).
>>>
>>> Signed-off-by: Eric Blake <eblake(a)redhat.com>
>>> ---
>>> src/qemu/qemu_monitor.h | 19 ++++++
>>> src/qemu/qemu_monitor_json.h | 17 +++++
>>> src/qemu/qemu_monitor.c | 51 +++++++++++++++
>>> src/qemu/qemu_monitor_json.c | 119 +++++++++++++++++++++++++++++++++++
>>> 4 files changed, 206 insertions(+)
>>
>> I'd suggest you add GEN_TEST_FUNC/DO_TEST_GEN tests for those. It's
>> simple to add and gives you checking of the arguments against the QAPI
>> schema for free.
>
> Will do. Do you need to see the amended patch with that added, or should
> I go ahead and push once I have it working?
ACK if you add those with all the fields excercised.
Here's what I'm squashing in. The MergeBitmaps test depends on my
cleanup to use TestNewSchema everywhere. Also, I noticed that if we
wanted to use VIR_AUTOPTR(qemuMonitorTest) it might make a lot of the
file easier to read, but that should be a separate patch (including fixing:
qemumonitorjsontest.c:1431:5: error: cleanup argument not a function
VIR_AUTOPTR(qemuMonitorTest) test = NULL;
^~~~~~~~~~~
)
diff --git i/tests/qemumonitorjsontest.c w/tests/qemumonitorjsontest.c
index 2e7e976e9b..c07d8bf548 100644
--- i/tests/qemumonitorjsontest.c
+++ w/tests/qemumonitorjsontest.c
@@ -1375,6 +1375,9 @@ GEN_TEST_FUNC(qemuMonitorJSONBlockdevTrayOpen,
"foodev", true)
GEN_TEST_FUNC(qemuMonitorJSONBlockdevTrayClose, "foodev")
GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumRemove, "foodev")
GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumInsert, "foodev",
"newnode")
+GEN_TEST_FUNC(qemuMonitorJSONAddBitmap, "node", "bitmap", true)
+GEN_TEST_FUNC(qemuMonitorJSONEnableBitmap, "node", "bitmap")
+GEN_TEST_FUNC(qemuMonitorJSONDeleteBitmap, "node", "bitmap")
static int
testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque)
@@ -1419,6 +1422,44 @@
testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque)
return ret;
}
+static int
+testQemuMonitorJSONqemuMonitorJSONMergeBitmaps(const void *opaque)
+{
+ const testGenericData *data = opaque;
+ virDomainXMLOptionPtr xmlopt = data->xmlopt;
+ qemuMonitorTestPtr test = qemuMonitorTestNewSchema(xmlopt,
data->schema);
+ int ret = -1;
+ VIR_AUTOPTR(virJSONValue) arr = NULL;
+
+
+ if (!test)
+ return -1;
+
+ if (!(arr = virJSONValueNewArray()))
+ goto cleanup;
+
+ if (virJSONValueArrayAppendString(arr, "b1") < 0 ||
+ virJSONValueArrayAppendString(arr, "b2") < 0)
+ goto cleanup;
+
+ if (qemuMonitorTestAddItem(test, "block-dirty-bitmap-merge",
+ "{\"return\":{}}") < 0)
+ goto cleanup;
+
+ if (qemuMonitorJSONMergeBitmaps(qemuMonitorTestGetMonitor(test),
+ "node", "dst", &arr) < 0)
+ goto cleanup;
+
+ if (arr)
+ goto cleanup;
+
+ ret = 0;
+
+ cleanup:
+ qemuMonitorTestFree(test);
+ return ret;
+}
+
static bool
testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct
qemuMonitorQueryCpusEntry *a,
struct
qemuMonitorQueryCpusEntry *b)
@@ -3109,6 +3150,9 @@ mymain(void)
DO_TEST_GEN(qemuMonitorJSONBlockdevTrayClose);
DO_TEST_GEN(qemuMonitorJSONBlockdevMediumRemove);
DO_TEST_GEN(qemuMonitorJSONBlockdevMediumInsert);
+ DO_TEST_GEN(qemuMonitorJSONAddBitmap);
+ DO_TEST_GEN(qemuMonitorJSONEnableBitmap);
+ DO_TEST_GEN(qemuMonitorJSONDeleteBitmap);
DO_TEST(qemuMonitorJSONGetBalloonInfo);
DO_TEST(qemuMonitorJSONGetBlockInfo);
DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo);
@@ -3125,6 +3169,7 @@ mymain(void)
DO_TEST(qemuMonitorJSONSendKeyHoldtime);
DO_TEST(qemuMonitorSupportsActiveCommit);
DO_TEST(qemuMonitorJSONNBDServerStart);
+ DO_TEST(qemuMonitorJSONMergeBitmaps);
DO_TEST_CPU_DATA("host");
DO_TEST_CPU_DATA("full");
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org