qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info
@ 2013-09-10  9:33 Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 1/6] qapi: Add ImageInfoSpecific type Max Reitz
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

qemu-img info provides only pretty general information about an image.
For any image format, there might be specific options which cannot be
represented in a universal way; for instance, qcow2 provides the
compatibility and lazy_refcount options whose values are certainly
interesting but currently cannot be output by qemu-img info.

Therefore, this series adds a new ImageInfoSpecific union type to
ImageInfo and BlockDriverInfo which may be used by block drivers as a
template for new types dedicated to the specific information they can
provide. It also adds support to qemu-img info and qemu-io -c info to
print the content of these specific structures.

v3:
 - implemented Fam's remarks:
   - bdrv_get_info already initializes all fields to NULL, no need to do
     this manually (patch 2)
   - implemented bdrv_put_info as a wrapper to
     qapi_free_ImageInfoSpecific, though this may change with further
     extensions to BlockDriverInfo (patch 2)
   - changed one occurence of puts("foo") to printf("foo\n") in order to
     be consistent with the surrounding code (patch 3)
   - other patches (1, 4, 5, 6) remain unmodified

v2:
 - following Eric's recommendation: changed the representation of the
   format specific information from an uninterpreted blobbed string to a
   union of format specific types

Max Reitz (6):
  qapi: Add ImageInfoSpecific type
  block: Add ImageInfoSpecific to BlockDriverInfo
  block/qapi: Human-readable ImageInfoSpecific dump
  qcow2: Add support for ImageInfoSpecific
  qemu-iotests: Discard specific info in _img_info
  qemu-iotests: Additional info from qemu-img info

 block.c                      |  16 +++++-
 block/mirror.c               |  16 ++++--
 block/qapi.c                 | 125 +++++++++++++++++++++++++++++++++++++++++++
 block/qcow2.c                |  12 +++++
 include/block/block.h        |   3 ++
 include/block/qapi.h         |   2 +
 qapi-schema.json             |  34 +++++++++++-
 qemu-img.c                   |   1 +
 qemu-io-cmds.c               |   8 +++
 tests/qemu-iotests/064       |  72 +++++++++++++++++++++++++
 tests/qemu-iotests/064.out   |  22 ++++++++
 tests/qemu-iotests/common.rc |  19 ++++++-
 tests/qemu-iotests/group     |   1 +
 13 files changed, 323 insertions(+), 8 deletions(-)
 create mode 100755 tests/qemu-iotests/064
 create mode 100644 tests/qemu-iotests/064.out

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v3 1/6] qapi: Add ImageInfoSpecific type
  2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
@ 2013-09-10  9:33 ` Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 2/6] block: Add ImageInfoSpecific to BlockDriverInfo Max Reitz
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

Add a new type ImageInfoSpecific as a union for image format specific
information in ImageInfo.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 qapi-schema.json | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index a51f7d2..eebf851 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -210,6 +210,18 @@
             'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
 
 ##
+# @ImageInfoSpecific:
+#
+# A discriminated record of image format specific information structures.
+#
+# Since: 1.7
+##
+
+{ 'union': 'ImageInfoSpecific',
+  'data': {
+  } }
+
+##
 # @ImageInfo:
 #
 # Information about a QEMU image file
@@ -238,6 +250,9 @@
 #
 # @backing-image: #optional info of the backing image (since 1.6)
 #
+# @info-string: #optional string supplying additional format-specific
+# information (since 1.7)
+#
 # Since: 1.3
 #
 ##
@@ -248,7 +263,8 @@
            '*cluster-size': 'int', '*encrypted': 'bool',
            '*backing-filename': 'str', '*full-backing-filename': 'str',
            '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
-           '*backing-image': 'ImageInfo' } }
+           '*backing-image': 'ImageInfo',
+           '*format-specific': 'ImageInfoSpecific' } }
 
 ##
 # @ImageCheck:
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v3 2/6] block: Add ImageInfoSpecific to BlockDriverInfo
  2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 1/6] qapi: Add ImageInfoSpecific type Max Reitz
@ 2013-09-10  9:33 ` Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 3/6] block/qapi: Human-readable ImageInfoSpecific dump Max Reitz
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

Add the new ImageInfoSpecific type also to BlockDriverInfo, as well as a
bdrv_put_info function which releases all data allocated by
bdrv_get_info from BlockDriverInfo (such as the new ImageInfoSpecific
field).

To prevent memory leaks, bdrv_put_info has to be called on every
BlockDriverInfo object when it is no longer required (and bdrv_get_info
has been successful).

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block.c               | 16 +++++++++++++++-
 block/mirror.c        | 16 +++++++++++-----
 block/qapi.c          |  4 ++++
 include/block/block.h |  3 +++
 qemu-img.c            |  1 +
 qemu-io-cmds.c        |  2 ++
 6 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/block.c b/block.c
index 26639e8..2e74fc0 100644
--- a/block.c
+++ b/block.c
@@ -1922,8 +1922,10 @@ void bdrv_round_to_clusters(BlockDriverState *bs,
                             int *cluster_nb_sectors)
 {
     BlockDriverInfo bdi;
+    int ret;
 
-    if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) {
+    ret = bdrv_get_info(bs, &bdi);
+    if (ret < 0 || bdi.cluster_size == 0) {
         *cluster_sector_num = sector_num;
         *cluster_nb_sectors = nb_sectors;
     } else {
@@ -1932,6 +1934,9 @@ void bdrv_round_to_clusters(BlockDriverState *bs,
         *cluster_nb_sectors = QEMU_ALIGN_UP(sector_num - *cluster_sector_num +
                                             nb_sectors, c);
     }
+    if (ret >= 0) {
+        bdrv_put_info(bs, &bdi);
+    }
 }
 
 static bool tracked_request_overlaps(BdrvTrackedRequest *req,
@@ -3229,6 +3234,15 @@ int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
     return drv->bdrv_get_info(bs, bdi);
 }
 
+/**
+ * Releases all data which has been allocated through bdrv_get_info. This
+ * function should be called if and only if bdrv_get_info was successful.
+ */
+void bdrv_put_info(BlockDriverState *bs, BlockDriverInfo *bdi)
+{
+    qapi_free_ImageInfoSpecific(bdi->format_specific);
+}
+
 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
                       int64_t pos, int size)
 {
diff --git a/block/mirror.c b/block/mirror.c
index 86de458..9549add 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -320,10 +320,12 @@ static void coroutine_fn mirror_run(void *opaque)
     bdrv_get_backing_filename(s->target, backing_filename,
                               sizeof(backing_filename));
     if (backing_filename[0] && !s->target->backing_hd) {
-        bdrv_get_info(s->target, &bdi);
-        if (s->granularity < bdi.cluster_size) {
-            s->buf_size = MAX(s->buf_size, bdi.cluster_size);
-            s->cow_bitmap = bitmap_new(length);
+        if (bdrv_get_info(s->target, &bdi) >= 0) {
+            if (s->granularity < bdi.cluster_size) {
+                s->buf_size = MAX(s->buf_size, bdi.cluster_size);
+                s->cow_bitmap = bitmap_new(length);
+            }
+            bdrv_put_info(s->target, &bdi);
         }
     }
 
@@ -545,12 +547,16 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target,
         /* Choose the default granularity based on the target file's cluster
          * size, clamped between 4k and 64k.  */
         BlockDriverInfo bdi;
-        if (bdrv_get_info(target, &bdi) >= 0 && bdi.cluster_size != 0) {
+        int ret = bdrv_get_info(target, &bdi);
+        if (ret >= 0 && bdi.cluster_size != 0) {
             granularity = MAX(4096, bdi.cluster_size);
             granularity = MIN(65536, granularity);
         } else {
             granularity = 65536;
         }
+        if (ret >= 0) {
+            bdrv_put_info(target, &bdi);
+        }
     }
 
     assert ((granularity & (granularity - 1)) == 0);
diff --git a/block/qapi.c b/block/qapi.c
index a4bc411..86c399c 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -133,6 +133,10 @@ void bdrv_query_image_info(BlockDriverState *bs,
         }
         info->dirty_flag = bdi.is_dirty;
         info->has_dirty_flag = true;
+        if (bdi.format_specific) {
+            info->format_specific = bdi.format_specific;
+            info->has_format_specific = true;
+        }
     }
     backing_filename = bs->backing_file;
     if (backing_filename[0] != '\0') {
diff --git a/include/block/block.h b/include/block/block.h
index e6b391c..20f17a1 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -18,6 +18,8 @@ typedef struct BlockDriverInfo {
     /* offset at which the VM state can be saved (0 if not possible) */
     int64_t vm_state_offset;
     bool is_dirty;
+    /* additional information; NULL if none */
+    ImageInfoSpecific *format_specific;
 } BlockDriverInfo;
 
 typedef struct BlockFragInfo {
@@ -312,6 +314,7 @@ int bdrv_get_flags(BlockDriverState *bs);
 int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
                           const uint8_t *buf, int nb_sectors);
 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi);
+void bdrv_put_info(BlockDriverState *bs, BlockDriverInfo *bdi);
 void bdrv_round_to_clusters(BlockDriverState *bs,
                             int64_t sector_num, int nb_sectors,
                             int64_t *cluster_sector_num,
diff --git a/qemu-img.c b/qemu-img.c
index b9a848d..32ae114 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1370,6 +1370,7 @@ static int img_convert(int argc, char **argv)
             goto out;
         }
         cluster_size = bdi.cluster_size;
+        bdrv_put_info(out_bs, &bdi);
         if (cluster_size <= 0 || cluster_size > IO_BUF_SIZE) {
             error_report("invalid cluster size");
             ret = -1;
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
index f91b6c4..a639546 100644
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -1699,6 +1699,8 @@ static int info_f(BlockDriverState *bs, int argc, char **argv)
     printf("cluster size: %s\n", s1);
     printf("vm state offset: %s\n", s2);
 
+    bdrv_put_info(bs, &bdi);
+
     return 0;
 }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v3 3/6] block/qapi: Human-readable ImageInfoSpecific dump
  2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 1/6] qapi: Add ImageInfoSpecific type Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 2/6] block: Add ImageInfoSpecific to BlockDriverInfo Max Reitz
@ 2013-09-10  9:33 ` Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 4/6] qcow2: Add support for ImageInfoSpecific Max Reitz
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

Add a function for generically dumping the ImageInfoSpecific information
in a human-readable format to block/qapi.c.

Use this function in bdrv_image_info_dump and qemu-io-cmds.c:info_f to
allow qemu-img info resp. qemu-io -c info to print that format specific
information.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block/qapi.c         | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++
 include/block/qapi.h |   2 +
 qemu-io-cmds.c       |   6 +++
 3 files changed, 129 insertions(+)

diff --git a/block/qapi.c b/block/qapi.c
index 86c399c..3e33b7f 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -25,6 +25,9 @@
 #include "block/qapi.h"
 #include "block/block_int.h"
 #include "qmp-commands.h"
+#include "qapi-visit.h"
+#include "qapi/qmp-output-visitor.h"
+#include "qapi/qmp/types.h"
 
 /*
  * Returns 0 on success, with *p_list either set to describe snapshot
@@ -401,6 +404,119 @@ void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f,
     }
 }
 
+static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
+                       QDict *dict);
+static void dump_qlist(fprintf_function func_fprintf, void *f, int indentation,
+                       QList *list);
+
+static void dump_qobject(fprintf_function func_fprintf, void *f,
+                         int comp_indent, QObject *obj)
+{
+    switch (qobject_type(obj)) {
+        case QTYPE_QINT: {
+            QInt *value = qobject_to_qint(obj);
+            func_fprintf(f, "%" PRId64, qint_get_int(value));
+            break;
+        }
+        case QTYPE_QSTRING: {
+            QString *value = qobject_to_qstring(obj);
+            func_fprintf(f, "%s", qstring_get_str(value));
+            break;
+        }
+        case QTYPE_QDICT: {
+            QDict *value = qobject_to_qdict(obj);
+            dump_qdict(func_fprintf, f, comp_indent, value);
+            break;
+        }
+        case QTYPE_QLIST: {
+            QList *value = qobject_to_qlist(obj);
+            dump_qlist(func_fprintf, f, comp_indent, value);
+            break;
+        }
+        case QTYPE_QFLOAT: {
+            QFloat *value = qobject_to_qfloat(obj);
+            func_fprintf(f, "%g", qfloat_get_double(value));
+            break;
+        }
+        case QTYPE_QBOOL: {
+            QBool *value = qobject_to_qbool(obj);
+            func_fprintf(f, "%s", qbool_get_int(value) ? "true" : "false");
+            break;
+        }
+        case QTYPE_QERROR: {
+            QString *value = qerror_human((QError *)obj);
+            func_fprintf(f, "%s", qstring_get_str(value));
+            break;
+        }
+        case QTYPE_NONE:
+            break;
+        case QTYPE_MAX:
+        default:
+            abort();
+    }
+}
+
+static void dump_qlist(fprintf_function func_fprintf, void *f, int indentation,
+                       QList *list)
+{
+    const QListEntry *entry;
+    int i = 0;
+
+    for (entry = qlist_first(list); entry; entry = qlist_next(entry), i++) {
+        qtype_code type = qobject_type(entry->value);
+        bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
+        const char *format = composite ? "%*s[%i]:\n" : "%*s[%i]: ";
+
+        func_fprintf(f, format, indentation * 4, "", i);
+        dump_qobject(func_fprintf, f, indentation + 1, entry->value);
+        if (!composite) {
+            func_fprintf(f, "\n");
+        }
+    }
+}
+
+static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation,
+                       QDict *dict)
+{
+    const QDictEntry *entry;
+
+    for (entry = qdict_first(dict); entry; entry = qdict_next(dict, entry)) {
+        qtype_code type = qobject_type(entry->value);
+        bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST);
+        const char *format = composite ? "%*s%s:\n" : "%*s%s: ";
+        char key[strlen(entry->key) + 1];
+        int i;
+
+        /* replace dashes with spaces in key (variable) names */
+        for (i = 0; entry->key[i]; i++) {
+            key[i] = entry->key[i] == '-' ? ' ' : entry->key[i];
+        }
+        key[i] = 0;
+
+        func_fprintf(f, format, indentation * 4, "", key);
+        dump_qobject(func_fprintf, f, indentation + 1, entry->value);
+        if (!composite) {
+            func_fprintf(f, "\n");
+        }
+    }
+}
+
+void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f,
+                                   ImageInfoSpecific *info_spec)
+{
+    Error *local_err = NULL;
+    QmpOutputVisitor *ov = qmp_output_visitor_new();
+    QObject *obj, *data;
+
+    visit_type_ImageInfoSpecific(qmp_output_get_visitor(ov), &info_spec, NULL,
+                                 &local_err);
+    obj = qmp_output_get_qobject(ov);
+    assert(qobject_type(obj) == QTYPE_QDICT);
+    data = qdict_get(qobject_to_qdict(obj), "data");
+    dump_qobject(func_fprintf, f, 0, data);
+    qmp_output_visitor_cleanup(ov);
+}
+
 void bdrv_image_info_dump(fprintf_function func_fprintf, void *f,
                           ImageInfo *info)
 {
@@ -471,4 +587,9 @@ void bdrv_image_info_dump(fprintf_function func_fprintf, void *f,
             func_fprintf(f, "\n");
         }
     }
+
+    if (info->has_format_specific) {
+        func_fprintf(f, "Format specific information:\n");
+        bdrv_image_info_specific_dump(func_fprintf, f, info->format_specific);
+    }
 }
diff --git a/include/block/qapi.h b/include/block/qapi.h
index 0496cc9..9518ee4 100644
--- a/include/block/qapi.h
+++ b/include/block/qapi.h
@@ -42,6 +42,8 @@ BlockStats *bdrv_query_stats(const BlockDriverState *bs);
 
 void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f,
                         QEMUSnapshotInfo *sn);
+void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f,
+                                   ImageInfoSpecific *info_spec);
 void bdrv_image_info_dump(fprintf_function func_fprintf, void *f,
                           ImageInfo *info);
 #endif
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
index a639546..9746616 100644
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -10,6 +10,7 @@
 
 #include "qemu-io.h"
 #include "block/block_int.h"
+#include "block/qapi.h"
 #include "qemu/main-loop.h"
 
 #define CMD_NOFILE_OK   0x01
@@ -1699,6 +1700,11 @@ static int info_f(BlockDriverState *bs, int argc, char **argv)
     printf("cluster size: %s\n", s1);
     printf("vm state offset: %s\n", s2);
 
+    if (bdi.format_specific) {
+        printf("Format specific information:\n");
+        bdrv_image_info_specific_dump(fprintf, stdout, bdi.format_specific);
+    }
+
     bdrv_put_info(bs, &bdi);
 
     return 0;
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v3 4/6] qcow2: Add support for ImageInfoSpecific
  2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
                   ` (2 preceding siblings ...)
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 3/6] block/qapi: Human-readable ImageInfoSpecific dump Max Reitz
@ 2013-09-10  9:33 ` Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 5/6] qemu-iotests: Discard specific info in _img_info Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info Max Reitz
  5 siblings, 0 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

Add a new ImageInfoSpecificQCow2 type as a subtype of ImageInfoSpecific.
This contains the compatibility level as a string and an optional
lazy_refcounts boolean (optional means mandatory for compat >= 1.1 and
not available for compat == 0.10).

In qcow2_get_info, fill the BlockDriverInfo.format_specific field with
that information.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block/qcow2.c    | 12 ++++++++++++
 qapi-schema.json | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/block/qcow2.c b/block/qcow2.c
index 4bc679a..e088c0a 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1755,8 +1755,20 @@ static int64_t qcow2_vm_state_offset(BDRVQcowState *s)
 static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
 {
     BDRVQcowState *s = bs->opaque;
+
     bdi->cluster_size = s->cluster_size;
     bdi->vm_state_offset = qcow2_vm_state_offset(s);
+
+    bdi->format_specific = g_new0(ImageInfoSpecific, 1);
+    bdi->format_specific->kind = IMAGE_INFO_SPECIFIC_KIND_QCOW2;
+    bdi->format_specific->qcow2 = g_new0(ImageInfoSpecificQCow2, 1);
+    if (s->qcow_version == 2) {
+        bdi->format_specific->qcow2->compat = g_strdup("0.10");
+    } else if (s->qcow_version == 3) {
+        bdi->format_specific->qcow2->compat = g_strdup("1.1");
+        bdi->format_specific->qcow2->lazy_refcounts = s->use_lazy_refcounts;
+        bdi->format_specific->qcow2->has_lazy_refcounts = true;
+    }
     return 0;
 }
 
diff --git a/qapi-schema.json b/qapi-schema.json
index eebf851..cadf40b 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -210,6 +210,21 @@
             'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
 
 ##
+# @ImageInfoSpecificQCow2:
+#
+# @compat: compatibility level
+#
+# @lazy-refcounts: #optional on or off; only valid for compat >= 1.1
+#
+# Since: 1.7
+##
+{ 'type': 'ImageInfoSpecificQCow2',
+  'data': {
+      'compat': 'str',
+      '*lazy-refcounts': 'bool'
+  } }
+
+##
 # @ImageInfoSpecific:
 #
 # A discriminated record of image format specific information structures.
@@ -219,6 +234,7 @@
 
 { 'union': 'ImageInfoSpecific',
   'data': {
+      'qcow2': 'ImageInfoSpecificQCow2'
   } }
 
 ##
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v3 5/6] qemu-iotests: Discard specific info in _img_info
  2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
                   ` (3 preceding siblings ...)
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 4/6] qcow2: Add support for ImageInfoSpecific Max Reitz
@ 2013-09-10  9:33 ` Max Reitz
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info Max Reitz
  5 siblings, 0 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

In _img_info, filter out additional information specific to the image
format provided by qemu-img info, since tests designed for multiple
image formats would produce different outputs for every image format
else.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 tests/qemu-iotests/common.rc | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 5e077c3..13f62d8 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -181,12 +181,29 @@ _check_test_img()
 
 _img_info()
 {
+    discard=0
     $QEMU_IMG info "$@" $TEST_IMG 2>&1 | \
         sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
             -e "s#$TEST_DIR#TEST_DIR#g" \
             -e "s#$IMGFMT#IMGFMT#g" \
             -e "/^disk size:/ D" \
-            -e "/actual-size/ D"
+            -e "/actual-size/ D" | \
+        while IFS='' read line; do
+            if [ "$line" == "Format specific information:" ]; then
+                discard=1
+            elif [ "`echo "$line" | sed -e 's/^ *//'`" == '"format-specific": {' ]; then
+                discard=2
+                json_indent="`echo "$line" | sed -e 's/^\( *\).*$/\1/'`"
+            fi
+            if [ $discard == 0 ]; then
+                echo "$line"
+            elif [ $discard == 1 -a -z "$line" ]; then
+                echo
+                discard=0
+            elif [ $discard == 2 -a "`echo "$line" | sed -e 's/ *$//'`" == "${json_indent}}," ]; then
+                discard=0
+            fi
+        done
 }
 
 _get_pids_by_name()
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info
  2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
                   ` (4 preceding siblings ...)
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 5/6] qemu-iotests: Discard specific info in _img_info Max Reitz
@ 2013-09-10  9:33 ` Max Reitz
  2013-09-11  6:23   ` Fam Zheng
  5 siblings, 1 reply; 11+ messages in thread
From: Max Reitz @ 2013-09-10  9:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

Add a test for the additional information now provided by qemu-img info
when used on qcow2 images.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 tests/qemu-iotests/064     | 72 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/064.out | 22 ++++++++++++++
 tests/qemu-iotests/group   |  1 +
 3 files changed, 95 insertions(+)
 create mode 100755 tests/qemu-iotests/064
 create mode 100644 tests/qemu-iotests/064.out

diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064
new file mode 100755
index 0000000..4979db5
--- /dev/null
+++ b/tests/qemu-iotests/064
@@ -0,0 +1,72 @@
+#!/bin/bash
+#
+# Test for additional information emitted by qemu-img info on qcow2
+# images
+#
+# Copyright (C) 2013 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# creator
+owner=mreitz@redhat.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1	# failure is the default!
+
+_cleanup()
+{
+	_cleanup_test_img
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# This tests qocw2-specific low-level functionality
+_supported_fmt qcow2
+_supported_proto generic
+_supported_os Linux
+
+IMG_SIZE=64M
+
+echo
+echo "=== Testing qcow2 image with -o compat=0.10 ==="
+echo
+IMGOPTS="compat=0.10" _make_test_img $IMG_SIZE
+# don't use _img_info, since that function will filter out the
+# additional information we're about to test for
+$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
+
+echo
+echo "=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=off ==="
+echo
+IMGOPTS="compat=1.1,lazy_refcounts=off" _make_test_img $IMG_SIZE
+$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
+
+echo
+echo "=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=on ==="
+echo
+IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img $IMG_SIZE
+$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0
diff --git a/tests/qemu-iotests/064.out b/tests/qemu-iotests/064.out
new file mode 100644
index 0000000..6ce5b43
--- /dev/null
+++ b/tests/qemu-iotests/064.out
@@ -0,0 +1,22 @@
+QA output created by 064
+
+=== Testing qcow2 image with -o compat=0.10 ===
+
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
+Format specific information:
+compat: 0.10
+
+=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=off ===
+
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
+Format specific information:
+compat: 1.1
+lazy refcounts: false
+
+=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=on ===
+
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
+Format specific information:
+compat: 1.1
+lazy refcounts: true
+*** done
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index b696242..740cd84 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -66,3 +66,4 @@
 059 rw auto
 060 rw auto
 062 rw auto
+064 rw auto
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info
  2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info Max Reitz
@ 2013-09-11  6:23   ` Fam Zheng
  2013-09-11  7:26     ` Max Reitz
  0 siblings, 1 reply; 11+ messages in thread
From: Fam Zheng @ 2013-09-11  6:23 UTC (permalink / raw)
  To: Max Reitz; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

On Tue, 09/10 11:33, Max Reitz wrote:
> Add a test for the additional information now provided by qemu-img info
> when used on qcow2 images.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  tests/qemu-iotests/064     | 72 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/064.out | 22 ++++++++++++++
>  tests/qemu-iotests/group   |  1 +
>  3 files changed, 95 insertions(+)
>  create mode 100755 tests/qemu-iotests/064
>  create mode 100644 tests/qemu-iotests/064.out
> 
> diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064
> new file mode 100755
> index 0000000..4979db5
> --- /dev/null
> +++ b/tests/qemu-iotests/064
> @@ -0,0 +1,72 @@
> +#!/bin/bash
> +#
> +# Test for additional information emitted by qemu-img info on qcow2
> +# images
> +#
> +# Copyright (C) 2013 Red Hat, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +#
> +
> +# creator
> +owner=mreitz@redhat.com
> +
> +seq=`basename $0`
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1	# failure is the default!
> +
> +_cleanup()
> +{
> +	_cleanup_test_img
> +}
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +# get standard environment, filters and checks
> +. ./common.rc
> +. ./common.filter
> +
> +# This tests qocw2-specific low-level functionality
> +_supported_fmt qcow2
> +_supported_proto generic
> +_supported_os Linux
> +
> +IMG_SIZE=64M
> +
> +echo
> +echo "=== Testing qcow2 image with -o compat=0.10 ==="
> +echo
> +IMGOPTS="compat=0.10" _make_test_img $IMG_SIZE
> +# don't use _img_info, since that function will filter out the
> +# additional information we're about to test for
> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42

For curiosity, where's 42 from?

Fam

> +
> +echo
> +echo "=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=off ==="
> +echo
> +IMGOPTS="compat=1.1,lazy_refcounts=off" _make_test_img $IMG_SIZE
> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
> +
> +echo
> +echo "=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=on ==="
> +echo
> +IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img $IMG_SIZE
> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
> +
> +# success, all done
> +echo "*** done"
> +rm -f $seq.full
> +status=0
> diff --git a/tests/qemu-iotests/064.out b/tests/qemu-iotests/064.out
> new file mode 100644
> index 0000000..6ce5b43
> --- /dev/null
> +++ b/tests/qemu-iotests/064.out
> @@ -0,0 +1,22 @@
> +QA output created by 064
> +
> +=== Testing qcow2 image with -o compat=0.10 ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
> +Format specific information:
> +compat: 0.10
> +
> +=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=off ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
> +Format specific information:
> +compat: 1.1
> +lazy refcounts: false
> +
> +=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=on ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
> +Format specific information:
> +compat: 1.1
> +lazy refcounts: true
> +*** done
> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
> index b696242..740cd84 100644
> --- a/tests/qemu-iotests/group
> +++ b/tests/qemu-iotests/group
> @@ -66,3 +66,4 @@
>  059 rw auto
>  060 rw auto
>  062 rw auto
> +064 rw auto
> -- 
> 1.8.3.1
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info
  2013-09-11  6:23   ` Fam Zheng
@ 2013-09-11  7:26     ` Max Reitz
  2013-09-11  7:44       ` Fam Zheng
  0 siblings, 1 reply; 11+ messages in thread
From: Max Reitz @ 2013-09-11  7:26 UTC (permalink / raw)
  To: famz; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

On 2013-09-11 08:23, Fam Zheng wrote:
> On Tue, 09/10 11:33, Max Reitz wrote:
>> Add a test for the additional information now provided by qemu-img info
>> when used on qcow2 images.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   tests/qemu-iotests/064     | 72 ++++++++++++++++++++++++++++++++++++++++++++++
>>   tests/qemu-iotests/064.out | 22 ++++++++++++++
>>   tests/qemu-iotests/group   |  1 +
>>   3 files changed, 95 insertions(+)
>>   create mode 100755 tests/qemu-iotests/064
>>   create mode 100644 tests/qemu-iotests/064.out
>>
>> diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064
>> new file mode 100755
>> index 0000000..4979db5
>> --- /dev/null
>> +++ b/tests/qemu-iotests/064
>> @@ -0,0 +1,72 @@
>> +#!/bin/bash
>> +#
>> +# Test for additional information emitted by qemu-img info on qcow2
>> +# images
>> +#
>> +# Copyright (C) 2013 Red Hat, Inc.
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 2 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +#
>> +
>> +# creator
>> +owner=mreitz@redhat.com
>> +
>> +seq=`basename $0`
>> +echo "QA output created by $seq"
>> +
>> +here=`pwd`
>> +tmp=/tmp/$$
>> +status=1	# failure is the default!
>> +
>> +_cleanup()
>> +{
>> +	_cleanup_test_img
>> +}
>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>> +
>> +# get standard environment, filters and checks
>> +. ./common.rc
>> +. ./common.filter
>> +
>> +# This tests qocw2-specific low-level functionality
>> +_supported_fmt qcow2
>> +_supported_proto generic
>> +_supported_os Linux
>> +
>> +IMG_SIZE=64M
>> +
>> +echo
>> +echo "=== Testing qcow2 image with -o compat=0.10 ==="
>> +echo
>> +IMGOPTS="compat=0.10" _make_test_img $IMG_SIZE
>> +# don't use _img_info, since that function will filter out the
>> +# additional information we're about to test for
>> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
> For curiosity, where's 42 from?
I want to read all format specific information there, and because this 
is the last information emitted by qemu_img -info, I have to grep 
everything after the line "Format specific information:" until EOF – I 
didn't find an easy way to do this, so I just chose a number of lines 
which seemed enough to fetch all of that format specific info 
(currently, 2 would suffice).

> Fam
>
>> +
>> +echo
>> +echo "=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=off ==="
>> +echo
>> +IMGOPTS="compat=1.1,lazy_refcounts=off" _make_test_img $IMG_SIZE
>> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
>> +
>> +echo
>> +echo "=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=on ==="
>> +echo
>> +IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img $IMG_SIZE
>> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
>> +
>> +# success, all done
>> +echo "*** done"
>> +rm -f $seq.full
>> +status=0
>> diff --git a/tests/qemu-iotests/064.out b/tests/qemu-iotests/064.out
>> new file mode 100644
>> index 0000000..6ce5b43
>> --- /dev/null
>> +++ b/tests/qemu-iotests/064.out
>> @@ -0,0 +1,22 @@
>> +QA output created by 064
>> +
>> +=== Testing qcow2 image with -o compat=0.10 ===
>> +
>> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
>> +Format specific information:
>> +compat: 0.10
>> +
>> +=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=off ===
>> +
>> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
>> +Format specific information:
>> +compat: 1.1
>> +lazy refcounts: false
>> +
>> +=== Testing qcow2 image with -o compat=1.1,lazy_refcounts=on ===
>> +
>> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
>> +Format specific information:
>> +compat: 1.1
>> +lazy refcounts: true
>> +*** done
>> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
>> index b696242..740cd84 100644
>> --- a/tests/qemu-iotests/group
>> +++ b/tests/qemu-iotests/group
>> @@ -66,3 +66,4 @@
>>   059 rw auto
>>   060 rw auto
>>   062 rw auto
>> +064 rw auto
>> -- 
>> 1.8.3.1
>>

Max

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info
  2013-09-11  7:26     ` Max Reitz
@ 2013-09-11  7:44       ` Fam Zheng
  2013-09-11  7:52         ` Max Reitz
  0 siblings, 1 reply; 11+ messages in thread
From: Fam Zheng @ 2013-09-11  7:44 UTC (permalink / raw)
  To: Max Reitz; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

On Wed, 09/11 09:26, Max Reitz wrote:
> On 2013-09-11 08:23, Fam Zheng wrote:
> >On Tue, 09/10 11:33, Max Reitz wrote:
> >>Add a test for the additional information now provided by qemu-img info
> >>when used on qcow2 images.
> >>
> >>Signed-off-by: Max Reitz <mreitz@redhat.com>
> >>---
> >>  tests/qemu-iotests/064     | 72 ++++++++++++++++++++++++++++++++++++++++++++++
> >>  tests/qemu-iotests/064.out | 22 ++++++++++++++
> >>  tests/qemu-iotests/group   |  1 +
> >>  3 files changed, 95 insertions(+)
> >>  create mode 100755 tests/qemu-iotests/064
> >>  create mode 100644 tests/qemu-iotests/064.out
> >>
> >>diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064
> >>new file mode 100755
> >>index 0000000..4979db5
> >>--- /dev/null
> >>+++ b/tests/qemu-iotests/064
> >>@@ -0,0 +1,72 @@
> >>+#!/bin/bash
> >>+#
> >>+# Test for additional information emitted by qemu-img info on qcow2
> >>+# images
> >>+#
> >>+# Copyright (C) 2013 Red Hat, Inc.
> >>+#
> >>+# This program is free software; you can redistribute it and/or modify
> >>+# it under the terms of the GNU General Public License as published by
> >>+# the Free Software Foundation; either version 2 of the License, or
> >>+# (at your option) any later version.
> >>+#
> >>+# This program is distributed in the hope that it will be useful,
> >>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
> >>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >>+# GNU General Public License for more details.
> >>+#
> >>+# You should have received a copy of the GNU General Public License
> >>+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> >>+#
> >>+
> >>+# creator
> >>+owner=mreitz@redhat.com
> >>+
> >>+seq=`basename $0`
> >>+echo "QA output created by $seq"
> >>+
> >>+here=`pwd`
> >>+tmp=/tmp/$$
> >>+status=1	# failure is the default!
> >>+
> >>+_cleanup()
> >>+{
> >>+	_cleanup_test_img
> >>+}
> >>+trap "_cleanup; exit \$status" 0 1 2 3 15
> >>+
> >>+# get standard environment, filters and checks
> >>+. ./common.rc
> >>+. ./common.filter
> >>+
> >>+# This tests qocw2-specific low-level functionality
> >>+_supported_fmt qcow2
> >>+_supported_proto generic
> >>+_supported_os Linux
> >>+
> >>+IMG_SIZE=64M
> >>+
> >>+echo
> >>+echo "=== Testing qcow2 image with -o compat=0.10 ==="
> >>+echo
> >>+IMGOPTS="compat=0.10" _make_test_img $IMG_SIZE
> >>+# don't use _img_info, since that function will filter out the
> >>+# additional information we're about to test for
> >>+$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
> >For curiosity, where's 42 from?
> I want to read all format specific information there, and because
> this is the last information emitted by qemu_img -info, I have to
> grep everything after the line "Format specific information:" until
> EOF – I didn't find an easy way to do this, so I just chose a number
> of lines which seemed enough to fetch all of that format specific
> info (currently, 2 would suffice).
> 
Maybe
    $QEMU_IMG info "$TEST_IMG" | sed -n 'Format specific information:/,$ p'
?

Fam

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info
  2013-09-11  7:44       ` Fam Zheng
@ 2013-09-11  7:52         ` Max Reitz
  0 siblings, 0 replies; 11+ messages in thread
From: Max Reitz @ 2013-09-11  7:52 UTC (permalink / raw)
  To: famz; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

On 2013-09-11 09:44, Fam Zheng wrote:
> On Wed, 09/11 09:26, Max Reitz wrote:
>> On 2013-09-11 08:23, Fam Zheng wrote:
>>> On Tue, 09/10 11:33, Max Reitz wrote:
>>>> Add a test for the additional information now provided by qemu-img info
>>>> when used on qcow2 images.
>>>>
>>>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>>>> ---
>>>>   tests/qemu-iotests/064     | 72 ++++++++++++++++++++++++++++++++++++++++++++++
>>>>   tests/qemu-iotests/064.out | 22 ++++++++++++++
>>>>   tests/qemu-iotests/group   |  1 +
>>>>   3 files changed, 95 insertions(+)
>>>>   create mode 100755 tests/qemu-iotests/064
>>>>   create mode 100644 tests/qemu-iotests/064.out
>>>>
>>>> diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064
>>>> new file mode 100755
>>>> index 0000000..4979db5
>>>> --- /dev/null
>>>> +++ b/tests/qemu-iotests/064
>>>> @@ -0,0 +1,72 @@
>>>> +#!/bin/bash
>>>> +#
>>>> +# Test for additional information emitted by qemu-img info on qcow2
>>>> +# images
>>>> +#
>>>> +# Copyright (C) 2013 Red Hat, Inc.
>>>> +#
>>>> +# This program is free software; you can redistribute it and/or modify
>>>> +# it under the terms of the GNU General Public License as published by
>>>> +# the Free Software Foundation; either version 2 of the License, or
>>>> +# (at your option) any later version.
>>>> +#
>>>> +# This program is distributed in the hope that it will be useful,
>>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>>> +# GNU General Public License for more details.
>>>> +#
>>>> +# You should have received a copy of the GNU General Public License
>>>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>>>> +#
>>>> +
>>>> +# creator
>>>> +owner=mreitz@redhat.com
>>>> +
>>>> +seq=`basename $0`
>>>> +echo "QA output created by $seq"
>>>> +
>>>> +here=`pwd`
>>>> +tmp=/tmp/$$
>>>> +status=1	# failure is the default!
>>>> +
>>>> +_cleanup()
>>>> +{
>>>> +	_cleanup_test_img
>>>> +}
>>>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>>>> +
>>>> +# get standard environment, filters and checks
>>>> +. ./common.rc
>>>> +. ./common.filter
>>>> +
>>>> +# This tests qocw2-specific low-level functionality
>>>> +_supported_fmt qcow2
>>>> +_supported_proto generic
>>>> +_supported_os Linux
>>>> +
>>>> +IMG_SIZE=64M
>>>> +
>>>> +echo
>>>> +echo "=== Testing qcow2 image with -o compat=0.10 ==="
>>>> +echo
>>>> +IMGOPTS="compat=0.10" _make_test_img $IMG_SIZE
>>>> +# don't use _img_info, since that function will filter out the
>>>> +# additional information we're about to test for
>>>> +$QEMU_IMG info "$TEST_IMG" | grep "Format specific information:" -A 42
>>> For curiosity, where's 42 from?
>> I want to read all format specific information there, and because
>> this is the last information emitted by qemu_img -info, I have to
>> grep everything after the line "Format specific information:" until
>> EOF – I didn't find an easy way to do this, so I just chose a number
>> of lines which seemed enough to fetch all of that format specific
>> info (currently, 2 would suffice).
>>
> Maybe
>      $QEMU_IMG info "$TEST_IMG" | sed -n 'Format specific information:/,$ p'
> ?
>
> Fam
Hm, yes, with a slash up front ('/Format specific information:/,$p') it 
works, I'll use that, then. Thanks.

Max

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-09-11  7:52 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-10  9:33 [Qemu-devel] [PATCH v3 0/6] Provide additional info through qemu-img info Max Reitz
2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 1/6] qapi: Add ImageInfoSpecific type Max Reitz
2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 2/6] block: Add ImageInfoSpecific to BlockDriverInfo Max Reitz
2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 3/6] block/qapi: Human-readable ImageInfoSpecific dump Max Reitz
2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 4/6] qcow2: Add support for ImageInfoSpecific Max Reitz
2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 5/6] qemu-iotests: Discard specific info in _img_info Max Reitz
2013-09-10  9:33 ` [Qemu-devel] [PATCH v3 6/6] qemu-iotests: Additional info from qemu-img info Max Reitz
2013-09-11  6:23   ` Fam Zheng
2013-09-11  7:26     ` Max Reitz
2013-09-11  7:44       ` Fam Zheng
2013-09-11  7:52         ` Max Reitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).