}
+int
+qemuMonitorSnapshotSave(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char *vmstate_disk,
+ const char **disks)
+{
+ VIR_DEBUG("jobname='%s', snapshotname='%s', vmstate_disk='%s'",
+ jobname, snapshotname, vmstate_disk);
+
+ QEMU_CHECK_MONITOR(mon);
+
+ return qemuMonitorJSONSnapshotSave(mon, jobname, snapshotname, vmstate_disk, disks);
+}
+
+
+int
+qemuMonitorSnapshotDelete(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char **disks)
+{
+ VIR_DEBUG("jobname='%s', snapshotname='%s'", jobname, snapshotname);
+
+ QEMU_CHECK_MONITOR(mon);
+
+ return qemuMonitorJSONSnapshotDelete(mon, jobname, snapshotname, disks);
+}
+
+
int
qemuMonitorBlockdevMirror(qemuMonitor *mon,
const char *jobname,
qemuMonitorDisplayReload(qemuMonitor *mon,
const char *type,
bool tlsCerts);
+
+
+int
+qemuMonitorSnapshotSave(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char *vmstate_disk,
+ const char **disks);
+
+int
+qemuMonitorSnapshotDelete(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char **disks);
return 0;
}
+
+
+int
+qemuMonitorJSONSnapshotSave(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char *vmstate_disk,
+ const char **disks)
+{
+ g_autoptr(virJSONValue) cmd = NULL;
+ g_autoptr(virJSONValue) reply = NULL;
+ g_autoptr(virJSONValue) devices = virJSONValueNewArray();
+
+ for (; *disks; disks++) {
+ if (virJSONValueArrayAppendString(devices, *disks) < 0)
+ return -1;
+ }
+
+ if (!(cmd = qemuMonitorJSONMakeCommand("snapshot-save",
+ "s:job-id", jobname,
+ "s:tag", snapshotname,
+ "s:vmstate", vmstate_disk,
+ "a:devices", &devices,
+ NULL)))
+ return -1;
+
+ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+ return -1;
+
+ return qemuMonitorJSONCheckError(cmd, reply);
+}
+
+
+int
+qemuMonitorJSONSnapshotDelete(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char **disks)
+{
+ g_autoptr(virJSONValue) cmd = NULL;
+ g_autoptr(virJSONValue) reply = NULL;
+ g_autoptr(virJSONValue) devices = virJSONValueNewArray();
+
+ for (; *disks; disks++) {
+ if (virJSONValueArrayAppendString(devices, *disks) < 0)
+ return -1;
+ }
+
+ if (!(cmd = qemuMonitorJSONMakeCommand("snapshot-delete",
+ "s:job-id", jobname,
+ "s:tag", snapshotname,
+ "a:devices", &devices,
+ NULL)))
+ return -1;
+
+ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+ return -1;
+
+ return qemuMonitorJSONCheckError(cmd, reply);
+}
int qemuMonitorJSONDisplayReload(qemuMonitor *mon,
const char *type,
bool tlsCerts);
+
+int
+qemuMonitorJSONSnapshotSave(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char *vmstate_disk,
+ const char **disks);
+
+int
+qemuMonitorJSONSnapshotDelete(qemuMonitor *mon,
+ const char *jobname,
+ const char *snapshotname,
+ const char **disks);
return 0;
}
+
+static int
+testQemuMonitorJSONqemuMonitorJSONSnapshot(const void *opaque)
+{
+ const testGenericData *data = opaque;
+ virDomainXMLOption *xmlopt = data->xmlopt;
+ g_autoptr(qemuMonitorTest) test = NULL;
+ const char *disks[] = { "test", "disk", NULL };
+
+ if (!(test = qemuMonitorTestNewSchema(xmlopt, data->schema)))
+ return -1;
+
+ if (qemuMonitorTestAddItem(test, "snapshot-save",
+ "{\"return\":{}}") < 0)
+ return -1;
+
+ if (qemuMonitorTestAddItem(test, "snapshot-delete",
+ "{\"return\":{}}") < 0)
+ return -1;
+
+ if (qemuMonitorJSONSnapshotSave(qemuMonitorTestGetMonitor(test),
+ "jobname", "snapshotname", "vmstate", disks) < 0)
+ return -1;
+
+ if (qemuMonitorJSONSnapshotDelete(qemuMonitorTestGetMonitor(test),
+ "jobname", "snapshotname", disks) < 0)
+ return -1;
+
+ return 0;
+}
+
+
static bool
testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct qemuMonitorQueryCpusEntry *a,
struct qemuMonitorQueryCpusEntry *b)
DO_TEST(qemuMonitorJSONGetDumpGuestMemoryCapability);
DO_TEST(qemuMonitorJSONSendKeyHoldtime);
DO_TEST(qemuMonitorJSONNBDServerStart);
+ DO_TEST(qemuMonitorJSONSnapshot);
DO_TEST_CPU_DATA("host");
DO_TEST_CPU_DATA("full");