tests: qemublocktest: Add another synthetic test case for broken bitmaps

Add a case where a bitmap spanning multiple images is missing one of the
intermediate components.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-01-29 15:48:36 +01:00
parent 41c7e5c2a6
commit 8e29a8b151
3 changed files with 839 additions and 0 deletions

View File

@ -1030,6 +1030,7 @@ mymain(void)
TEST_BITMAP_DETECT("synthetic");
TEST_BITMAP_DETECT("snapshots");
TEST_BITMAP_DETECT("snapshots-synthetic-checkpoint");
TEST_BITMAP_DETECT("snapshots-synthetic-broken");
#define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
do { \
@ -1116,6 +1117,13 @@ mymain(void)
TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "c", true);
TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "d", true);
TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "current", true);
TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "a", false);
TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "b", true);
TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "c", true);
TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "d", false);
TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "current", true);
cleanup:
virHashFree(diskxmljsondata.schema);
qemuTestDriverFree(&driver);

View File

@ -0,0 +1,819 @@
[
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"backing-image": {
"backing-image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911527",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 217088,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "c",
"granularity": 65536
},
{
"flags": [
],
"name": "b",
"granularity": 65536
},
{
"flags": [
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911522",
"backing-filename": "/tmp/pull4.1575911522",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911540",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 212992,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "d",
"granularity": 65536
},
{
"flags": [
],
"name": "c",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911527",
"backing-filename": "/tmp/pull4.1575911527",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911550",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 212992,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"in-use",
"auto"
],
"name": "current",
"granularity": 65536
},
{
"flags": [
"in-use"
],
"name": "d",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911540",
"backing-filename": "/tmp/pull4.1575911540",
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-1-format",
"backing_file_depth": 4,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.1575911540",
"dirty-bitmaps": [
{
"name": "d",
"recording": false,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
},
{
"name": "current",
"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/pull4.1575911550",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 393728,
"filename": "/tmp/pull4.1575911550",
"format": "file",
"actual-size": 212992,
"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/pull4.1575911550",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"backing-image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911527",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 217088,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "c",
"granularity": 65536
},
{
"flags": [
],
"name": "b",
"granularity": 65536
},
{
"flags": [
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911522",
"backing-filename": "/tmp/pull4.1575911522",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911540",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 212992,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "d",
"granularity": 65536
},
{
"flags": [
],
"name": "c",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911527",
"backing-filename": "/tmp/pull4.1575911527",
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-2-format",
"backing_file_depth": 3,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.1575911527",
"dirty-bitmaps": [
{
"name": "c",
"recording": false,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
},
{
"name": "d",
"recording": true,
"persistent": true,
"busy": false,
"status": "active",
"granularity": 65536,
"inconsistent": true,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911540",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 393728,
"filename": "/tmp/pull4.1575911540",
"format": "file",
"actual-size": 212992,
"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/pull4.1575911540",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911527",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 217088,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "c",
"granularity": 65536
},
{
"flags": [
],
"name": "b",
"granularity": 65536
},
{
"flags": [
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911522",
"backing-filename": "/tmp/pull4.1575911522",
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-3-format",
"backing_file_depth": 2,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.1575911522",
"dirty-bitmaps": [
{
"name": "a",
"recording": false,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
},
{
"name": "b",
"recording": true,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911527",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 459264,
"filename": "/tmp/pull4.1575911527",
"format": "file",
"actual-size": 217088,
"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/pull4.1575911527",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-4-format",
"backing_file_depth": 1,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.qcow2",
"dirty-bitmaps": [
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911522",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 328192,
"filename": "/tmp/pull4.1575911522",
"format": "file",
"actual-size": 208896,
"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/pull4.1575911522",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"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/pull4.qcow2",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 328192,
"filename": "/tmp/pull4.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/pull4.qcow2",
"encryption_key_missing": false
}
]

View File

@ -0,0 +1,12 @@
libvirt-1-format:
d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
libvirt-2-format:
c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
d: record:1 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
libvirt-3-format:
a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
b: 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