135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From c71d50132b3ac8dcfefc1acc11ab5d5bd7bc024a Mon Sep 17 00:00:00 2001
 | |
| Message-Id: <c71d50132b3ac8dcfefc1acc11ab5d5bd7bc024a@dist-git>
 | |
| From: Peter Krempa <pkrempa@redhat.com>
 | |
| Date: Tue, 4 Feb 2020 15:08:09 +0100
 | |
| Subject: [PATCH] tests: qemublock: Add test for checkpoint deletion bitmap
 | |
|  merge
 | |
| MIME-Version: 1.0
 | |
| Content-Type: text/plain; charset=UTF-8
 | |
| Content-Transfer-Encoding: 8bit
 | |
| 
 | |
| Add test infrastructure and a basic test for bitmap deletion.
 | |
| 
 | |
| Signed-off-by: Peter Krempa <pkrempa@redhat.com>
 | |
| Reviewed-by: Ján Tomko <jtomko@redhat.com>
 | |
| (cherry picked from commit 25f74899720afce52dcf01f230da5c816deaea71)
 | |
| 
 | |
| https://bugzilla.redhat.com/show_bug.cgi?id=1207659
 | |
| Message-Id: <50b8789a34b762114b6ea2f87bba1a130be206de.1580824112.git.pkrempa@redhat.com>
 | |
| Reviewed-by: Ján Tomko <jtomko@redhat.com>
 | |
| ---
 | |
|  tests/qemublocktest.c                         | 59 +++++++++++++++++++
 | |
|  .../checkpointdelete/basic-noparent-out.json  |  9 +++
 | |
|  2 files changed, 68 insertions(+)
 | |
|  create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
 | |
| 
 | |
| diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
 | |
| index 7ff6a6b17b..80355d1340 100644
 | |
| --- a/tests/qemublocktest.c
 | |
| +++ b/tests/qemublocktest.c
 | |
| @@ -27,6 +27,7 @@
 | |
|  #include "qemu/qemu_qapi.h"
 | |
|  #include "qemu/qemu_monitor_json.h"
 | |
|  #include "qemu/qemu_backup.h"
 | |
| +#include "qemu/qemu_checkpoint.h"
 | |
|  
 | |
|  #include "qemu/qemu_command.h"
 | |
|  
 | |
| @@ -696,6 +697,50 @@ testQemuBackupIncrementalBitmapCalculate(const void *opaque)
 | |
|  }
 | |
|  
 | |
|  
 | |
| +static const char *checkpointDeletePrefix = "qemublocktestdata/checkpointdelete/";
 | |
| +
 | |
| +struct testQemuCheckpointDeleteMergeData {
 | |
| +    const char *name;
 | |
| +    virStorageSourcePtr chain;
 | |
| +    const char *deletebitmap;
 | |
| +    const char *parentbitmap;
 | |
| +};
 | |
| +
 | |
| +
 | |
| +static int
 | |
| +testQemuCheckpointDeleteMerge(const void *opaque)
 | |
| +{
 | |
| +    const struct testQemuCheckpointDeleteMergeData *data = opaque;
 | |
| +    g_autofree char *actual = NULL;
 | |
| +    g_autofree char *expectpath = NULL;
 | |
| +    g_autoptr(virJSONValue) actions = NULL;
 | |
| +    bool currentcheckpoint;
 | |
| +
 | |
| +    expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
 | |
| +                                 checkpointDeletePrefix, data->name);
 | |
| +
 | |
| +    if (!(actions = virJSONValueNewArray()))
 | |
| +        return -1;
 | |
| +
 | |
| +    /* hack to get the 'current' state until the function stops accepting it */
 | |
| +    currentcheckpoint = STREQ("current", data->deletebitmap);
 | |
| +
 | |
| +    if (qemuCheckpointDiscardDiskBitmaps(data->chain,
 | |
| +                                         data->deletebitmap,
 | |
| +                                         data->parentbitmap,
 | |
| +                                         currentcheckpoint,
 | |
| +                                         actions) < 0) {
 | |
| +        VIR_TEST_VERBOSE("failed to generate checkpoint delete transaction\n");
 | |
| +        return -1;
 | |
| +    }
 | |
| +
 | |
| +    if (!(actual = virJSONValueToString(actions, true)))
 | |
| +        return -1;
 | |
| +
 | |
| +    return virTestCompareToFile(actual, expectpath);
 | |
| +}
 | |
| +
 | |
| +
 | |
|  static int
 | |
|  mymain(void)
 | |
|  {
 | |
| @@ -705,6 +750,7 @@ mymain(void)
 | |
|      struct testQemuDiskXMLToJSONData diskxmljsondata;
 | |
|      struct testQemuImageCreateData imagecreatedata;
 | |
|      struct testQemuBackupIncrementalBitmapCalculateData backupbitmapcalcdata;
 | |
| +    struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
 | |
|      char *capslatest_x86_64 = NULL;
 | |
|      virQEMUCapsPtr caps_x86_64 = NULL;
 | |
|      g_autoptr(virStorageSource) bitmapSourceChain = NULL;
 | |
| @@ -941,6 +987,19 @@ mymain(void)
 | |
|      TEST_BACKUP_BITMAP_CALCULATE("snapshot-intermediate", bitmapSourceChain, "d", "snapshots");
 | |
|      TEST_BACKUP_BITMAP_CALCULATE("snapshot-deep", bitmapSourceChain, "a", "snapshots");
 | |
|  
 | |
| +#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, parbmp) \
 | |
| +    do { \
 | |
| +        checkpointdeletedata.name = testname; \
 | |
| +        checkpointdeletedata.chain = bitmapSourceChain; \
 | |
| +        checkpointdeletedata.deletebitmap = delbmp; \
 | |
| +        checkpointdeletedata.parentbitmap = parbmp; \
 | |
| +        if (virTestRun("checkpoint delete " testname, \
 | |
| +                       testQemuCheckpointDeleteMerge, &checkpointdeletedata) < 0) \
 | |
| +        ret = -1; \
 | |
| +    } while (0)
 | |
| +
 | |
| +    TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL);
 | |
| +
 | |
|   cleanup:
 | |
|      virHashFree(diskxmljsondata.schema);
 | |
|      qemuTestDriverFree(&driver);
 | |
| diff --git a/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
 | |
| new file mode 100644
 | |
| index 0000000000..e87382fdb4
 | |
| --- /dev/null
 | |
| +++ b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
 | |
| @@ -0,0 +1,9 @@
 | |
| +[
 | |
| +  {
 | |
| +    "type": "block-dirty-bitmap-remove",
 | |
| +    "data": {
 | |
| +      "node": "libvirt-1-format",
 | |
| +      "name": "a"
 | |
| +    }
 | |
| +  }
 | |
| +]
 | |
| -- 
 | |
| 2.25.0
 | |
| 
 |