]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemublocktest: Add new 'synthetic' bitmap detection and validation test case
authorPeter Krempa <pkrempa@redhat.com>
Tue, 2 Jun 2020 13:11:25 +0000 (15:11 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 22 Jun 2020 14:04:30 +0000 (16:04 +0200)
Based on the 'snapshots' example with manual tweaks to introduce
inactive, transient, inconsistent and duplicate bitmaps in various parts
of the chain to exercise detection and new validation code.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
tests/qemublocktest.c
tests/qemublocktestdata/bitmap/synthetic.json [new file with mode: 0644]
tests/qemublocktestdata/bitmap/synthetic.out [new file with mode: 0644]

index 6d1bf3f250f398674c0f2faa87a8818153b16303..47e9f0f3633b208947f064aabbced38bfe257f0a 100644 (file)
@@ -1303,6 +1303,7 @@ mymain(void)
 
     TEST_BITMAP_DETECT("basic");
     TEST_BITMAP_DETECT("snapshots");
+    TEST_BITMAP_DETECT("synthetic");
 
 #define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
     do { \
@@ -1358,6 +1359,16 @@ mymain(void)
     TEST_BITMAP_VALIDATE("snapshots", "d", true);
     TEST_BITMAP_VALIDATE("snapshots", "current", true);
 
+    TEST_BITMAP_VALIDATE("synthetic", "a", false);
+    TEST_BITMAP_VALIDATE("synthetic", "b", false);
+    TEST_BITMAP_VALIDATE("synthetic", "c", false);
+    TEST_BITMAP_VALIDATE("synthetic", "d", false);
+    TEST_BITMAP_VALIDATE("synthetic", "current", false);
+    TEST_BITMAP_VALIDATE("synthetic", "top-ok", true);
+    TEST_BITMAP_VALIDATE("synthetic", "top-inactive", false);
+    TEST_BITMAP_VALIDATE("synthetic", "top-transient", false);
+    TEST_BITMAP_VALIDATE("synthetic", "top-inactive-transient", false);
+
 #define TEST_BITMAP_BLOCKCOPY(testname, shllw, ndf) \
     do { \
         blockbitmapblockcopydata.name = testname; \
diff --git a/tests/qemublocktestdata/bitmap/synthetic.json b/tests/qemublocktestdata/bitmap/synthetic.json
new file mode 100644 (file)
index 0000000..3712c8e
--- /dev/null
@@ -0,0 +1,506 @@
+[
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "backing-filename-format": "qcow2",
+      "virtual-size": 10485760,
+      "filename": "/tmp/bitmaps.1590749073",
+      "cluster-size": 65536,
+      "format": "qcow2",
+      "actual-size": 208896,
+      "format-specific": {
+        "type": "qcow2",
+        "data": {
+          "compat": "1.1",
+          "compression-type": "zlib",
+          "lazy-refcounts": false,
+          "bitmaps": [
+            {
+              "flags": [
+                "in-use",
+                "auto"
+              ],
+              "name": "current",
+              "granularity": 65536
+            }
+          ],
+          "refcount-bits": 16,
+          "corrupt": false
+        }
+      },
+      "full-backing-filename": "/tmp/bitmaps.1590749012",
+      "backing-filename": "/tmp/bitmaps.1590749012",
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": false,
+    "node-name": "libvirt-1-format",
+    "backing_file_depth": 0,
+    "drv": "qcow2",
+    "iops": 0,
+    "bps_wr": 0,
+    "write_threshold": 0,
+    "backing_file": "/tmp/bitmaps.1590749012",
+    "dirty-bitmaps": [
+      {
+        "name": "current",
+        "recording": true,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "inconsistent": true,
+        "granularity": 65536,
+        "count": 0
+      },
+      {
+        "name": "top-ok",
+        "recording": true,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      },
+      {
+        "name": "top-inactive",
+        "recording": false,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      },
+      {
+        "name": "top-transient",
+        "recording": true,
+        "persistent": false,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      },
+      {
+        "name": "top-transient-inactive",
+        "recording": false,
+        "persistent": false,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      }
+    ],
+    "encrypted": false,
+    "bps": 0,
+    "bps_rd": 0,
+    "cache": {
+      "no-flush": false,
+      "direct": false,
+      "writeback": true
+    },
+    "file": "/tmp/bitmaps.1590749073",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "virtual-size": 328192,
+      "filename": "/tmp/bitmaps.1590749073",
+      "format": "file",
+      "actual-size": 208896,
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": false,
+    "node-name": "libvirt-1-storage",
+    "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": "/tmp/bitmaps.1590749073",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "backing-filename-format": "qcow2",
+      "virtual-size": 10485760,
+      "filename": "/tmp/bitmaps.1590749012",
+      "cluster-size": 65536,
+      "format": "qcow2",
+      "actual-size": 208896,
+      "format-specific": {
+        "type": "qcow2",
+        "data": {
+          "compat": "1.1",
+          "compression-type": "zlib",
+          "lazy-refcounts": false,
+          "bitmaps": [
+            {
+              "flags": [
+                "auto"
+              ],
+              "name": "d",
+              "granularity": 65536
+            }
+          ],
+          "refcount-bits": 16,
+          "corrupt": false
+        }
+      },
+      "full-backing-filename": "/tmp/bitmaps.1590748995",
+      "backing-filename": "/tmp/bitmaps.1590748995",
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": true,
+    "node-name": "libvirt-2-format",
+    "backing_file_depth": 0,
+    "drv": "qcow2",
+    "iops": 0,
+    "bps_wr": 0,
+    "write_threshold": 0,
+    "backing_file": "/tmp/bitmaps.1590748995",
+    "dirty-bitmaps": [
+      {
+        "name": "d",
+        "recording": true,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      }
+    ],
+    "encrypted": false,
+    "bps": 0,
+    "bps_rd": 0,
+    "cache": {
+      "no-flush": false,
+      "direct": false,
+      "writeback": true
+    },
+    "file": "/tmp/bitmaps.1590749012",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "virtual-size": 328192,
+      "filename": "/tmp/bitmaps.1590749012",
+      "format": "file",
+      "actual-size": 208896,
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": false,
+    "node-name": "libvirt-2-storage",
+    "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": "/tmp/bitmaps.1590749012",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "backing-filename-format": "qcow2",
+      "virtual-size": 10485760,
+      "filename": "/tmp/bitmaps.1590748995",
+      "cluster-size": 65536,
+      "format": "qcow2",
+      "actual-size": 212992,
+      "format-specific": {
+        "type": "qcow2",
+        "data": {
+          "compat": "1.1",
+          "compression-type": "zlib",
+          "lazy-refcounts": false,
+          "bitmaps": [
+            {
+              "flags": [
+                "auto"
+              ],
+              "name": "c",
+              "granularity": 65536
+            },
+            {
+              "flags": [
+                "auto"
+              ],
+              "name": "b",
+              "granularity": 65536
+            }
+          ],
+          "refcount-bits": 16,
+          "corrupt": false
+        }
+      },
+      "full-backing-filename": "/tmp/bitmaps.1590748992",
+      "backing-filename": "/tmp/bitmaps.1590748992",
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": true,
+    "node-name": "libvirt-3-format",
+    "backing_file_depth": 0,
+    "drv": "qcow2",
+    "iops": 0,
+    "bps_wr": 0,
+    "write_threshold": 0,
+    "backing_file": "/tmp/bitmaps.1590748992",
+    "dirty-bitmaps": [
+      {
+        "name": "b",
+        "recording": true,
+        "persistent": false,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      },
+      {
+        "name": "c",
+        "recording": false,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      },
+      {
+        "name": "d",
+        "recording": true,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      }
+    ],
+    "encrypted": false,
+    "bps": 0,
+    "bps_rd": 0,
+    "cache": {
+      "no-flush": false,
+      "direct": false,
+      "writeback": true
+    },
+    "file": "/tmp/bitmaps.1590748995",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "virtual-size": 393728,
+      "filename": "/tmp/bitmaps.1590748995",
+      "format": "file",
+      "actual-size": 212992,
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": false,
+    "node-name": "libvirt-3-storage",
+    "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": "/tmp/bitmaps.1590748995",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "backing-filename-format": "qcow2",
+      "virtual-size": 10485760,
+      "filename": "/tmp/bitmaps.1590748992",
+      "cluster-size": 65536,
+      "format": "qcow2",
+      "actual-size": 200704,
+      "format-specific": {
+        "type": "qcow2",
+        "data": {
+          "compat": "1.1",
+          "compression-type": "zlib",
+          "lazy-refcounts": false,
+          "refcount-bits": 16,
+          "corrupt": false
+        }
+      },
+      "full-backing-filename": "/tmp/bitmaps.qcow2",
+      "backing-filename": "/tmp/bitmaps.qcow2",
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": true,
+    "node-name": "libvirt-4-format",
+    "backing_file_depth": 0,
+    "drv": "qcow2",
+    "iops": 0,
+    "bps_wr": 0,
+    "write_threshold": 0,
+    "backing_file": "/tmp/bitmaps.qcow2",
+    "encrypted": false,
+    "bps": 0,
+    "bps_rd": 0,
+    "cache": {
+      "no-flush": false,
+      "direct": false,
+      "writeback": true
+    },
+    "file": "/tmp/bitmaps.1590748992",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "virtual-size": 197120,
+      "filename": "/tmp/bitmaps.1590748992",
+      "format": "file",
+      "actual-size": 200704,
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": false,
+    "node-name": "libvirt-4-storage",
+    "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": "/tmp/bitmaps.1590748992",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "virtual-size": 10485760,
+      "filename": "/tmp/bitmaps.qcow2",
+      "cluster-size": 65536,
+      "format": "qcow2",
+      "actual-size": 208896,
+      "format-specific": {
+        "type": "qcow2",
+        "data": {
+          "compat": "1.1",
+          "compression-type": "zlib",
+          "lazy-refcounts": false,
+          "bitmaps": [
+            {
+              "flags": [
+                "auto"
+              ],
+              "name": "a",
+              "granularity": 65536
+            }
+          ],
+          "refcount-bits": 16,
+          "corrupt": false
+        }
+      },
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": true,
+    "node-name": "libvirt-5-format",
+    "backing_file_depth": 0,
+    "drv": "qcow2",
+    "iops": 0,
+    "bps_wr": 0,
+    "write_threshold": 0,
+    "dirty-bitmaps": [
+      {
+        "name": "a",
+        "recording": true,
+        "persistent": true,
+        "busy": false,
+        "status": "active",
+        "granularity": 65536,
+        "count": 0
+      }
+    ],
+    "encrypted": false,
+    "bps": 0,
+    "bps_rd": 0,
+    "cache": {
+      "no-flush": false,
+      "direct": false,
+      "writeback": true
+    },
+    "file": "/tmp/bitmaps.qcow2",
+    "encryption_key_missing": false
+  },
+  {
+    "iops_rd": 0,
+    "detect_zeroes": "off",
+    "image": {
+      "virtual-size": 328192,
+      "filename": "/tmp/bitmaps.qcow2",
+      "format": "file",
+      "actual-size": 208896,
+      "dirty-flag": false
+    },
+    "iops_wr": 0,
+    "ro": false,
+    "node-name": "libvirt-5-storage",
+    "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": "/tmp/bitmaps.qcow2",
+    "encryption_key_missing": false
+  }
+]
diff --git a/tests/qemublocktestdata/bitmap/synthetic.out b/tests/qemublocktestdata/bitmap/synthetic.out
new file mode 100644 (file)
index 0000000..cde7228
--- /dev/null
@@ -0,0 +1,15 @@
+libvirt-1-format:
+  current: record:1 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
+   top-ok: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
+ top-inactive: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
+ top-transient: record:1 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
+ top-transient-inactive: record:0 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
+libvirt-2-format:
+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
+libvirt-3-format:
+        b: record:1 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
+        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
+libvirt-4-format:
+libvirt-5-format:
+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0