All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests
@ 2017-02-17 20:38 Markus Armbruster
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict() Markus Armbruster
                   ` (13 more replies)
  0 siblings, 14 replies; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Markus Armbruster (14):
  qdict: Make qdict_get_qlist() safe like qdict_get_qdict()
  check-qdict: Simplify qdict_crumple_test_recursive()
  check-qdict: Tighten qdict_crumple_test_recursive() some
  check-qjson: Simplify around compare_litqobj_to_qobj()
  libqtest: Clean up qmp_response() a bit
  test-qmp-event: Simplify and tighten event_test_emit()
  Don't check qobject_type() before qobject_to_qdict()
  tests: Don't check qobject_type() before qobject_to_qlist()
  tests: Don't check qobject_type() before qobject_to_qstring()
  tests: Don't check qobject_type() before qobject_to_qint()
  tests: Don't check qobject_type() before qobject_to_qfloat()
  tests: Don't check qobject_type() before qobject_to_qbool()
  monitor: Clean up handle_hmp_command() a bit
  block: Don't bother asserting type of output visitor's output

 block.c                             |   4 +-
 block/nbd.c                         |   2 -
 block/nfs.c                         |   2 -
 block/qapi.c                        |   1 -
 hw/pci/pcie_aer.c                   |   2 +-
 monitor.c                           |  19 +++---
 qapi/qmp-dispatch.c                 |   5 +-
 qobject/qdict.c                     |  30 +-------
 tests/check-qdict.c                 |  37 ++++------
 tests/check-qjson.c                 | 113 ++++++------------------------
 tests/libqtest.c                    |   4 +-
 tests/test-qmp-event.c              |  14 ++--
 tests/test-qobject-output-visitor.c | 133 ++++++++++++++----------------------
 13 files changed, 113 insertions(+), 253 deletions(-)

-- 
2.7.4

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

* [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-17 22:29   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive() Markus Armbruster
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Commit 89cad9f changed qdict_get_qdict() to return NULL instead of
crash when the key doesn't exist or its value isn't a QDict.
Commit 2d6421a neglected to do the same for qdict_get_qlist().
Correct that, and update the function comments.

qdict_get_obj() is now unused, remove.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 qobject/qdict.c | 30 +++---------------------------
 1 file changed, 3 insertions(+), 27 deletions(-)

diff --git a/qobject/qdict.c b/qobject/qdict.c
index 197b0fb..b0c5364 100644
--- a/qobject/qdict.c
+++ b/qobject/qdict.c
@@ -178,20 +178,6 @@ size_t qdict_size(const QDict *qdict)
 }
 
 /**
- * qdict_get_obj(): Get a QObject of a specific type
- */
-static QObject *qdict_get_obj(const QDict *qdict, const char *key, QType type)
-{
-    QObject *obj;
-
-    obj = qdict_get(qdict, key);
-    assert(obj != NULL);
-    assert(qobject_type(obj) == type);
-
-    return obj;
-}
-
-/**
  * qdict_get_double(): Get an number mapped by 'key'
  *
  * This function assumes that 'key' exists and it stores a
@@ -241,25 +227,15 @@ bool qdict_get_bool(const QDict *qdict, const char *key)
 }
 
 /**
- * qdict_get_qlist(): Get the QList mapped by 'key'
- *
- * This function assumes that 'key' exists and it stores a
- * QList object.
- *
- * Return QList mapped by 'key'.
+ * qdict_get_qlist(): If @qdict maps @key to a QList, return it, else NULL.
  */
 QList *qdict_get_qlist(const QDict *qdict, const char *key)
 {
-    return qobject_to_qlist(qdict_get_obj(qdict, key, QTYPE_QLIST));
+    return qobject_to_qlist(qdict_get(qdict, key));
 }
 
 /**
- * qdict_get_qdict(): Get the QDict mapped by 'key'
- *
- * This function assumes that 'key' exists and it stores a
- * QDict object.
- *
- * Return QDict mapped by 'key'.
+ * qdict_get_qdict(): If @qdict maps @key to a QDict, return it, else NULL.
  */
 QDict *qdict_get_qdict(const QDict *qdict, const char *key)
 {
-- 
2.7.4

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

* [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-17 22:34   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 03/14] check-qdict: Tighten qdict_crumple_test_recursive() some Markus Armbruster
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Use qdict_get_qdict(), qdict_get_qlist() instead of qdict_get()
followed by qobject_to_qdict(), qobject_to_qlist().

While there, drop some redundant code.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qdict.c | 25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/tests/check-qdict.c b/tests/check-qdict.c
index 07b1c79..14e942a 100644
--- a/tests/check-qdict.c
+++ b/tests/check-qdict.c
@@ -591,7 +591,7 @@ static void qdict_join_test(void)
 static void qdict_crumple_test_recursive(void)
 {
     QDict *src, *dst, *rule, *vnc, *acl, *listen;
-    QObject *child, *res;
+    QObject *res;
     QList *rules;
 
     src = qdict_new();
@@ -613,23 +613,19 @@ static void qdict_crumple_test_recursive(void)
 
     g_assert_cmpint(qdict_size(dst), ==, 1);
 
-    child = qdict_get(dst, "vnc");
-    g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT);
-    vnc = qobject_to_qdict(child);
+    vnc = qdict_get_qdict(dst, "vnc");
+    g_assert(vnc);
 
-    child = qdict_get(vnc, "listen");
-    g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT);
-    listen = qobject_to_qdict(child);
+    listen = qdict_get_qdict(vnc, "listen");
+    g_assert(listen);
     g_assert_cmpstr("127.0.0.1", ==, qdict_get_str(listen, "addr"));
     g_assert_cmpstr("5901", ==, qdict_get_str(listen, "port"));
 
-    child = qdict_get(vnc, "acl");
-    g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT);
-    acl = qobject_to_qdict(child);
+    acl = qdict_get_qdict(vnc, "acl");
+    g_assert(acl);
 
-    child = qdict_get(acl, "rules");
-    g_assert_cmpint(qobject_type(child), ==, QTYPE_QLIST);
-    rules = qobject_to_qlist(child);
+    rules = qdict_get_qlist(acl, "rules");
+    g_assert(rules);
     g_assert_cmpint(qlist_size(rules), ==, 2);
 
     rule = qobject_to_qdict(qlist_pop(rules));
@@ -646,9 +642,6 @@ static void qdict_crumple_test_recursive(void)
 
     /* With recursive crumpling, we should see all names unescaped */
     g_assert_cmpstr("acl0", ==, qdict_get_str(vnc, "acl.name"));
-    child = qdict_get(vnc, "acl");
-    g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT);
-    acl = qdict_get_qdict(vnc, "acl");
     g_assert_cmpstr("acl0", ==, qdict_get_str(acl, "rule.name"));
 
     QDECREF(src);
-- 
2.7.4

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

* [Qemu-devel] [PATCH 03/14] check-qdict: Tighten qdict_crumple_test_recursive() some
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict() Markus Armbruster
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-18 13:11   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 04/14] check-qjson: Simplify around compare_litqobj_to_qobj() Markus Armbruster
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Consistently check for unexpected QDict entries, and qdict_get_qdict()
success.  The latter doesn't tighten the test, it only makes it fail
more nicely.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qdict.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tests/check-qdict.c b/tests/check-qdict.c
index 14e942a..ded3a26 100644
--- a/tests/check-qdict.c
+++ b/tests/check-qdict.c
@@ -615,26 +615,31 @@ static void qdict_crumple_test_recursive(void)
 
     vnc = qdict_get_qdict(dst, "vnc");
     g_assert(vnc);
+    g_assert_cmpint(qdict_size(vnc), ==, 3);
 
     listen = qdict_get_qdict(vnc, "listen");
     g_assert(listen);
+    g_assert_cmpint(qdict_size(listen), ==, 2);
     g_assert_cmpstr("127.0.0.1", ==, qdict_get_str(listen, "addr"));
     g_assert_cmpstr("5901", ==, qdict_get_str(listen, "port"));
 
     acl = qdict_get_qdict(vnc, "acl");
     g_assert(acl);
+    g_assert_cmpint(qdict_size(acl), ==, 3);
 
     rules = qdict_get_qlist(acl, "rules");
     g_assert(rules);
     g_assert_cmpint(qlist_size(rules), ==, 2);
 
     rule = qobject_to_qdict(qlist_pop(rules));
+    g_assert(rule);
     g_assert_cmpint(qdict_size(rule), ==, 2);
     g_assert_cmpstr("fred", ==, qdict_get_str(rule, "match"));
     g_assert_cmpstr("allow", ==, qdict_get_str(rule, "policy"));
     QDECREF(rule);
 
     rule = qobject_to_qdict(qlist_pop(rules));
+    g_assert(rule);
     g_assert_cmpint(qdict_size(rule), ==, 2);
     g_assert_cmpstr("bob", ==, qdict_get_str(rule, "match"));
     g_assert_cmpstr("deny", ==, qdict_get_str(rule, "policy"));
-- 
2.7.4

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

* [Qemu-devel] [PATCH 04/14] check-qjson: Simplify around compare_litqobj_to_qobj()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (2 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 03/14] check-qdict: Tighten qdict_crumple_test_recursive() some Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-18 15:54   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 05/14] libqtest: Clean up qmp_response() a bit Markus Armbruster
                   ` (9 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Make compare_litqobj_to_qobj() cope with null, and drop non-null
assertions from callers.

compare_litqobj_to_qobj() already checks the QType matches; drop the
redundant assertions from callers.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qjson.c | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index 0b21a22..49e02591 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -1110,7 +1110,7 @@ static void compare_helper(QObject *obj, void *opaque)
 
 static int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs)
 {
-    if (lhs->type != qobject_type(rhs)) {
+    if (!rhs || lhs->type != qobject_type(rhs)) {
         return 0;
     }
 
@@ -1184,18 +1184,12 @@ static void simple_dict(void)
         QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QDICT);
-
         g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
         str = qobject_to_json(obj);
         qobject_decref(obj);
 
         obj = qobject_from_json(qstring_get_str(str));
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QDICT);
-
         g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
         qobject_decref(obj);
         QDECREF(str);
@@ -1299,18 +1293,12 @@ static void simple_list(void)
         QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QLIST);
-
         g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
         str = qobject_to_json(obj);
         qobject_decref(obj);
 
         obj = qobject_from_json(qstring_get_str(str));
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QLIST);
-
         g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
         qobject_decref(obj);
         QDECREF(str);
@@ -1367,18 +1355,12 @@ static void simple_whitespace(void)
         QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QLIST);
-
         g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
         str = qobject_to_json(obj);
         qobject_decref(obj);
 
         obj = qobject_from_json(qstring_get_str(str));
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QLIST);
-
         g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
         qobject_decref(obj);
@@ -1403,8 +1385,6 @@ static void simple_varargs(void)
     g_assert(embedded_obj != NULL);
 
     obj = qobject_from_jsonf("[%d, 2, %p]", 1, embedded_obj);
-    g_assert(obj != NULL);
-
     g_assert(compare_litqobj_to_qobj(&decoded, obj) == 1);
 
     qobject_decref(obj);
-- 
2.7.4

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

* [Qemu-devel] [PATCH 05/14] libqtest: Clean up qmp_response() a bit
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (3 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 04/14] check-qjson: Simplify around compare_litqobj_to_qobj() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21  2:48   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 06/14] test-qmp-event: Simplify and tighten event_test_emit() Markus Armbruster
                   ` (8 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Use qobject_to_qdict() instead of a type cast.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/libqtest.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/libqtest.c b/tests/libqtest.c
index d8fba66..e54354d 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -379,9 +379,9 @@ static void qmp_response(JSONMessageParser *parser, GQueue *tokens)
         exit(1);
     }
 
-    g_assert(qobject_type(obj) == QTYPE_QDICT);
     g_assert(!qmp->response);
-    qmp->response = (QDict *)obj;
+    qmp->response = qobject_to_qdict(obj);
+    g_assert(qmp->response);
 }
 
 QDict *qmp_fd_receive(int fd)
-- 
2.7.4

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

* [Qemu-devel] [PATCH 06/14] test-qmp-event: Simplify and tighten event_test_emit()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (4 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 05/14] libqtest: Clean up qmp_response() a bit Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 15:03   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 07/14] Don't check qobject_type() before qobject_to_qdict() Markus Armbruster
                   ` (7 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Use qdict_get_qdict() and qdict_get_try_int() to simplify.

While there, add a sanity check for seconds.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/test-qmp-event.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/tests/test-qmp-event.c b/tests/test-qmp-event.c
index 633dc87..7bb621b 100644
--- a/tests/test-qmp-event.c
+++ b/tests/test-qmp-event.c
@@ -95,24 +95,18 @@ static bool qdict_cmp_simple(QDict *a, QDict *b)
    correctness. */
 static void event_test_emit(test_QAPIEvent event, QDict *d, Error **errp)
 {
-    QObject *obj;
     QDict *t;
     int64_t s, ms;
 
     /* Verify that we have timestamp, then remove it to compare other fields */
-    obj = qdict_get(d, "timestamp");
-    g_assert(obj);
-    t = qobject_to_qdict(obj);
+    t = qdict_get_qdict(d, "timestamp");
     g_assert(t);
-    obj = qdict_get(t, "seconds");
-    g_assert(obj && qobject_type(obj) == QTYPE_QINT);
-    s = qint_get_int(qobject_to_qint(obj));
-    obj = qdict_get(t, "microseconds");
-    g_assert(obj && qobject_type(obj) == QTYPE_QINT);
-    ms = qint_get_int(qobject_to_qint(obj));
+    s = qdict_get_try_int(t, "seconds", -2);
+    ms = qdict_get_try_int(t, "microseconds", -2);
     if (s == -1) {
         g_assert(ms == -1);
     } else {
+        g_assert(s >= 0);
         g_assert(ms >= 0 && ms <= 999999);
     }
     g_assert(qdict_size(t) == 2);
-- 
2.7.4

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

* [Qemu-devel] [PATCH 07/14] Don't check qobject_type() before qobject_to_qdict()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (5 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 06/14] test-qmp-event: Simplify and tighten event_test_emit() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 15:05   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 08/14] tests: Don't check qobject_type() before qobject_to_qlist() Markus Armbruster
                   ` (6 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

qobject_to_qdict(obj) returns NULL when obj isn't a QDict.  Check
that instead of qobject_type(obj) == QTYPE_QDICT.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 block.c                             |  4 ++--
 hw/pci/pcie_aer.c                   |  2 +-
 monitor.c                           | 10 ++++-----
 qapi/qmp-dispatch.c                 |  5 ++---
 tests/check-qdict.c                 |  9 ++------
 tests/test-qobject-output-visitor.c | 41 +++++++++++--------------------------
 6 files changed, 24 insertions(+), 47 deletions(-)

diff --git a/block.c b/block.c
index 743c349..3c36af5 100644
--- a/block.c
+++ b/block.c
@@ -1169,13 +1169,13 @@ static QDict *parse_json_filename(const char *filename, Error **errp)
         return NULL;
     }
 
-    if (qobject_type(options_obj) != QTYPE_QDICT) {
+    options = qobject_to_qdict(options_obj);
+    if (!options) {
         qobject_decref(options_obj);
         error_setg(errp, "Invalid JSON object given");
         return NULL;
     }
 
-    options = qobject_to_qdict(options_obj);
     qdict_flatten(options);
 
     return options;
diff --git a/hw/pci/pcie_aer.c b/hw/pci/pcie_aer.c
index daf1f65..a8c1820 100644
--- a/hw/pci/pcie_aer.c
+++ b/hw/pci/pcie_aer.c
@@ -1025,8 +1025,8 @@ void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict)
         return;
     }
 
-    assert(qobject_type(data) == QTYPE_QDICT);
     qdict = qobject_to_qdict(data);
+    assert(qdict);
 
     devfn = (int)qdict_get_int(qdict, "devfn");
     monitor_printf(mon, "OK id: %s root bus: %s, bus: %x devfn: %x.%x\n",
diff --git a/monitor.c b/monitor.c
index 3cd72a9..493bed9 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3686,12 +3686,12 @@ static QDict *qmp_check_input_obj(QObject *input_obj, Error **errp)
     int has_exec_key = 0;
     QDict *input_dict;
 
-    if (qobject_type(input_obj) != QTYPE_QDICT) {
-        error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT, "object");
-        return NULL;
-    }
-
     input_dict = qobject_to_qdict(input_obj);
+    if (!input_dict) {
+        error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT, "object");
+        return NULL;
+    }
+
 
     for (ent = qdict_first(input_dict); ent; ent = qdict_next(input_dict, ent)){
         const char *arg_name = qdict_entry_key(ent);
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 505eb41..48bec20 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -28,14 +28,13 @@ static QDict *qmp_dispatch_check_obj(const QObject *request, Error **errp)
     bool has_exec_key = false;
     QDict *dict = NULL;
 
-    if (qobject_type(request) != QTYPE_QDICT) {
+    dict = qobject_to_qdict(request);
+    if (!dict) {
         error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT,
                    "request is not a dictionary");
         return NULL;
     }
 
-    dict = qobject_to_qdict(request);
-
     for (ent = qdict_first(dict); ent;
          ent = qdict_next(dict, ent)) {
         arg_name = qdict_entry_key(ent);
diff --git a/tests/check-qdict.c b/tests/check-qdict.c
index ded3a26..81162ee 100644
--- a/tests/check-qdict.c
+++ b/tests/check-qdict.c
@@ -591,7 +591,6 @@ static void qdict_join_test(void)
 static void qdict_crumple_test_recursive(void)
 {
     QDict *src, *dst, *rule, *vnc, *acl, *listen;
-    QObject *res;
     QList *rules;
 
     src = qdict_new();
@@ -605,12 +604,8 @@ static void qdict_crumple_test_recursive(void)
     qdict_put(src, "vnc.acl..name", qstring_from_str("acl0"));
     qdict_put(src, "vnc.acl.rule..name", qstring_from_str("acl0"));
 
-    res = qdict_crumple(src, &error_abort);
-
-    g_assert_cmpint(qobject_type(res), ==, QTYPE_QDICT);
-
-    dst = qobject_to_qdict(res);
-
+    dst = qobject_to_qdict(qdict_crumple(src, &error_abort));
+    g_assert(dst);
     g_assert_cmpint(qdict_size(dst), ==, 1);
 
     vnc = qdict_get_qdict(dst, "vnc");
diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c
index 4e2d79c..a874386 100644
--- a/tests/test-qobject-output-visitor.c
+++ b/tests/test-qobject-output-visitor.c
@@ -160,15 +160,12 @@ static void test_visitor_out_struct(TestOutputVisitorData *data,
                                .boolean = false,
                                .string = (char *) "foo"};
     TestStruct *p = &test_struct;
-    QObject *obj;
     QDict *qdict;
 
     visit_type_TestStruct(data->ov, NULL, &p, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QDICT);
-
-    qdict = qobject_to_qdict(obj);
+    qdict = qobject_to_qdict(visitor_get(data));
+    g_assert(qdict);
     g_assert_cmpint(qdict_size(qdict), ==, 3);
     g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 42);
     g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, false);
@@ -180,7 +177,6 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
 {
     int64_t value = 42;
     UserDefTwo *ud2;
-    QObject *obj;
     QDict *qdict, *dict1, *dict2, *dict3, *userdef;
     const char *string = "user def string";
     const char *strings[] = { "forty two", "forty three", "forty four",
@@ -207,10 +203,8 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
 
     visit_type_UserDefTwo(data->ov, "unused", &ud2, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QDICT);
-
-    qdict = qobject_to_qdict(obj);
+    qdict = qobject_to_qdict(visitor_get(data));
+    g_assert(qdict);
     g_assert_cmpint(qdict_size(qdict), ==, 2);
     g_assert_cmpstr(qdict_get_str(qdict, "string0"), ==, strings[0]);
 
@@ -296,8 +290,8 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
     QLIST_FOREACH_ENTRY(qlist, entry) {
         QDict *qdict;
 
-        g_assert(qobject_type(entry->value) == QTYPE_QDICT);
         qdict = qobject_to_qdict(entry->value);
+        g_assert(qdict);
         g_assert_cmpint(qdict_size(qdict), ==, 3);
         g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, value_int + i);
         g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, value_bool);
@@ -362,8 +356,7 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
     qobj = QOBJECT(qdict);
     visit_type_any(data->ov, NULL, &qobj, &error_abort);
     qobject_decref(qobj);
-    obj = visitor_get(data);
-    qdict = qobject_to_qdict(obj);
+    qdict = qobject_to_qdict(visitor_get(data));
     g_assert(qdict);
     qobj = qdict_get(qdict, "integer");
     g_assert(qobj);
@@ -385,7 +378,6 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
 static void test_visitor_out_union_flat(TestOutputVisitorData *data,
                                         const void *unused)
 {
-    QObject *arg;
     QDict *qdict;
 
     UserDefFlatUnion *tmp = g_malloc0(sizeof(UserDefFlatUnion));
@@ -395,11 +387,8 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
     tmp->u.value1.boolean = true;
 
     visit_type_UserDefFlatUnion(data->ov, NULL, &tmp, &error_abort);
-    arg = visitor_get(data);
-
-    g_assert(qobject_type(arg) == QTYPE_QDICT);
-    qdict = qobject_to_qdict(arg);
-
+    qdict = qobject_to_qdict(visitor_get(data));
+    g_assert(qdict);
     g_assert_cmpstr(qdict_get_str(qdict, "enum1"), ==, "value1");
     g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "str");
     g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 41);
@@ -449,10 +438,8 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
     tmp->u.udfu.u.value1.boolean = true;
 
     visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
-    arg = visitor_get(data);
-
-    g_assert_cmpint(qobject_type(arg), ==, QTYPE_QDICT);
-    qdict = qobject_to_qdict(arg);
+    qdict = qobject_to_qdict(visitor_get(data));
+    g_assert(qdict);
     g_assert_cmpint(qdict_size(qdict), ==, 4);
     g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 1);
     g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "str");
@@ -465,7 +452,6 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
 static void test_visitor_out_null(TestOutputVisitorData *data,
                                   const void *unused)
 {
-    QObject *arg;
     QDict *qdict;
     QObject *nil;
 
@@ -473,9 +459,8 @@ static void test_visitor_out_null(TestOutputVisitorData *data,
     visit_type_null(data->ov, "a", &error_abort);
     visit_check_struct(data->ov, &error_abort);
     visit_end_struct(data->ov, NULL);
-    arg = visitor_get(data);
-    g_assert(qobject_type(arg) == QTYPE_QDICT);
-    qdict = qobject_to_qdict(arg);
+    qdict = qobject_to_qdict(visitor_get(data));
+    g_assert(qdict);
     g_assert_cmpint(qdict_size(qdict), ==, 1);
     nil = qdict_get(qdict, "a");
     g_assert(nil);
@@ -618,8 +603,6 @@ static void check_native_list(QObject *qobj,
     QList *qlist;
     int i;
 
-    g_assert(qobj);
-    g_assert(qobject_type(qobj) == QTYPE_QDICT);
     qdict = qobject_to_qdict(qobj);
     g_assert(qdict);
     g_assert(qdict_haskey(qdict, "data"));
-- 
2.7.4

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

* [Qemu-devel] [PATCH 08/14] tests: Don't check qobject_type() before qobject_to_qlist()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (6 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 07/14] Don't check qobject_type() before qobject_to_qdict() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 16:35   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 09/14] tests: Don't check qobject_type() before qobject_to_qstring() Markus Armbruster
                   ` (5 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

qobject_to_qlist(obj) returns NULL when obj isn't a QList.  Check
that instead of qobject_type(obj) == QTYPE_QLIST.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/test-qobject-output-visitor.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c
index a874386..13a0a9b 100644
--- a/tests/test-qobject-output-visitor.c
+++ b/tests/test-qobject-output-visitor.c
@@ -261,7 +261,6 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
     bool value_bool = true;
     int value_int = 10;
     QListEntry *entry;
-    QObject *obj;
     QList *qlist;
     int i;
 
@@ -279,10 +278,8 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
 
     visit_type_TestStructList(data->ov, NULL, &head, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QLIST);
-
-    qlist = qobject_to_qlist(obj);
+    qlist = qobject_to_qlist(visitor_get(data));
+    g_assert(qlist);
     g_assert(!qlist_empty(qlist));
 
     /* ...and ensure that the visitor sees it in order */
-- 
2.7.4

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

* [Qemu-devel] [PATCH 09/14] tests: Don't check qobject_type() before qobject_to_qstring()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (7 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 08/14] tests: Don't check qobject_type() before qobject_to_qlist() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 17:50   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 10/14] tests: Don't check qobject_type() before qobject_to_qint() Markus Armbruster
                   ` (4 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

qobject_to_qstring(obj) returns NULL when obj isn't a QString.  Check
that instead of qobject_type(obj) == QTYPE_QSTRING.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qjson.c                 | 31 ++++++++-----------------------
 tests/test-qobject-output-visitor.c | 37 +++++++++++++++++--------------------
 2 files changed, 25 insertions(+), 43 deletions(-)

diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index 49e02591..dd080a8 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -54,11 +54,8 @@ static void escaped_string(void)
         QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
-
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QSTRING);
-        
         str = qobject_to_qstring(obj);
+        g_assert(str);
         g_assert_cmpstr(qstring_get_str(str), ==, test_cases[i].decoded);
 
         if (test_cases[i].skip == 0) {
@@ -89,11 +86,8 @@ static void simple_string(void)
         QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
-
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QSTRING);
-        
         str = qobject_to_qstring(obj);
+        g_assert(str);
         g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
 
         str = qobject_to_json(obj);
@@ -123,11 +117,8 @@ static void single_quote_string(void)
         QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
-
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QSTRING);
-        
         str = qobject_to_qstring(obj);
+        g_assert(str);
         g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
 
         QDECREF(str);
@@ -820,9 +811,8 @@ static void utf8_string(void)
 
         obj = qobject_from_json(json_in);
         if (utf8_out) {
-            g_assert(obj);
-            g_assert(qobject_type(obj) == QTYPE_QSTRING);
             str = qobject_to_qstring(obj);
+            g_assert(str);
             g_assert_cmpstr(qstring_get_str(str), ==, utf8_out);
         } else {
             g_assert(!obj);
@@ -847,9 +837,8 @@ static void utf8_string(void)
          */
         if (0 && json_out != json_in) {
             obj = qobject_from_json(json_out);
-            g_assert(obj);
-            g_assert(qobject_type(obj) == QTYPE_QSTRING);
             str = qobject_to_qstring(obj);
+            g_assert(str);
             g_assert_cmpstr(qstring_get_str(str), ==, utf8_out);
         }
     }
@@ -867,15 +856,11 @@ static void vararg_string(void)
     };
 
     for (i = 0; test_cases[i].decoded; i++) {
-        QObject *obj;
         QString *str;
 
-        obj = qobject_from_jsonf("%s", test_cases[i].decoded);
-
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QSTRING);
-        
-        str = qobject_to_qstring(obj);
+        str = qobject_to_qstring(qobject_from_jsonf("%s",
+                                                    test_cases[i].decoded));
+        g_assert(str);
         g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
 
         QDECREF(str);
diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c
index 13a0a9b..3e34aa5 100644
--- a/tests/test-qobject-output-visitor.c
+++ b/tests/test-qobject-output-visitor.c
@@ -97,42 +97,41 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
                                     const void *unused)
 {
     char *string = (char *) "Q E M U";
-    QObject *obj;
+    QString *qstr;
 
     visit_type_str(data->ov, NULL, &string, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QSTRING);
-    g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, string);
+    qstr = qobject_to_qstring(visitor_get(data));
+    g_assert(qstr);
+    g_assert_cmpstr(qstring_get_str(qstr), ==, string);
 }
 
 static void test_visitor_out_no_string(TestOutputVisitorData *data,
                                        const void *unused)
 {
     char *string = NULL;
-    QObject *obj;
+    QString *qstr;
 
     /* A null string should return "" */
     visit_type_str(data->ov, NULL, &string, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QSTRING);
-    g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, "");
+    qstr = qobject_to_qstring(visitor_get(data));
+    g_assert(qstr);
+    g_assert_cmpstr(qstring_get_str(qstr), ==, "");
 }
 
 static void test_visitor_out_enum(TestOutputVisitorData *data,
                                   const void *unused)
 {
-    QObject *obj;
     EnumOne i;
+    QString *qstr;
 
     for (i = 0; i < ENUM_ONE__MAX; i++) {
         visit_type_EnumOne(data->ov, "unused", &i, &error_abort);
 
-        obj = visitor_get(data);
-        g_assert(qobject_type(obj) == QTYPE_QSTRING);
-        g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==,
-                        EnumOne_lookup[i]);
+        qstr = qobject_to_qstring(visitor_get(data));
+        g_assert(qstr);
+        g_assert_cmpstr(qstring_get_str(qstr), ==, EnumOne_lookup[i]);
         visitor_reset(data);
     }
 }
@@ -365,9 +364,7 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
     qbool = qobject_to_qbool(qobj);
     g_assert(qbool);
     g_assert(qbool_get_bool(qbool) == true);
-    qobj = qdict_get(qdict, "string");
-    g_assert(qobj);
-    qstring = qobject_to_qstring(qobj);
+    qstring = qobject_to_qstring(qdict_get(qdict, "string"));
     g_assert(qstring);
     g_assert_cmpstr(qstring_get_str(qstring), ==, "foo");
 }
@@ -399,6 +396,7 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
 {
     QObject *arg;
     UserDefAlternate *tmp;
+    QString *qstr;
     QDict *qdict;
 
     tmp = g_new0(UserDefAlternate, 1);
@@ -419,10 +417,9 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
     tmp->u.s = g_strdup("hello");
 
     visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
-    arg = visitor_get(data);
-
-    g_assert(qobject_type(arg) == QTYPE_QSTRING);
-    g_assert_cmpstr(qstring_get_str(qobject_to_qstring(arg)), ==, "hello");
+    qstr = qobject_to_qstring(visitor_get(data));
+    g_assert(qstr);
+    g_assert_cmpstr(qstring_get_str(qstr), ==, "hello");
 
     qapi_free_UserDefAlternate(tmp);
 
-- 
2.7.4

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

* [Qemu-devel] [PATCH 10/14] tests: Don't check qobject_type() before qobject_to_qint()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (8 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 09/14] tests: Don't check qobject_type() before qobject_to_qstring() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 19:18   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 11/14] tests: Don't check qobject_type() before qobject_to_qfloat() Markus Armbruster
                   ` (3 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

qobject_to_qint(obj) returns NULL when obj isn't a QInt.  Check
that instead of qobject_type(obj) == QTYPE_QINT.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qjson.c                 | 24 +++++-------------------
 tests/test-qobject-output-visitor.c | 28 ++++++++++++----------------
 2 files changed, 17 insertions(+), 35 deletions(-)

diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index dd080a8..aab4e0a 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -884,19 +884,15 @@ static void simple_number(void)
     };
 
     for (i = 0; test_cases[i].encoded; i++) {
-        QObject *obj;
         QInt *qint;
 
-        obj = qobject_from_json(test_cases[i].encoded);
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QINT);
-
-        qint = qobject_to_qint(obj);
+        qint = qobject_to_qint(qobject_from_json(test_cases[i].encoded));
+        g_assert(qint);
         g_assert(qint_get_int(qint) == test_cases[i].decoded);
         if (test_cases[i].skip == 0) {
             QString *str;
 
-            str = qobject_to_json(obj);
+            str = qobject_to_json(QOBJECT(qint));
             g_assert(strcmp(qstring_get_str(str), test_cases[i].encoded) == 0);
             QDECREF(str);
         }
@@ -952,22 +948,12 @@ static void vararg_number(void)
     long long value_ll = 0x2342342343LL;
     double valuef = 2.323423423;
 
-    obj = qobject_from_jsonf("%d", value);
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QINT);
-
-    qint = qobject_to_qint(obj);
+    qint = qobject_to_qint(qobject_from_jsonf("%d", value));
     g_assert(qint_get_int(qint) == value);
-
     QDECREF(qint);
 
-    obj = qobject_from_jsonf("%lld", value_ll);
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QINT);
-
-    qint = qobject_to_qint(obj);
+    qint = qobject_to_qint(qobject_from_jsonf("%lld", value_ll));
     g_assert(qint_get_int(qint) == value_ll);
-
     QDECREF(qint);
 
     obj = qobject_from_jsonf("%f", valuef);
diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c
index 3e34aa5..50b807e 100644
--- a/tests/test-qobject-output-visitor.c
+++ b/tests/test-qobject-output-visitor.c
@@ -58,13 +58,13 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
                                  const void *unused)
 {
     int64_t value = -42;
-    QObject *obj;
+    QInt *qint;
 
     visit_type_int(data->ov, NULL, &value, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QINT);
-    g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, value);
+    qint = qobject_to_qint(visitor_get(data));
+    g_assert(qint);
+    g_assert_cmpint(qint_get_int(qint), ==, value);
 }
 
 static void test_visitor_out_bool(TestOutputVisitorData *data,
@@ -335,13 +335,12 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
     QBool *qbool;
     QString *qstring;
     QDict *qdict;
-    QObject *obj;
 
     qobj = QOBJECT(qint_from_int(-42));
     visit_type_any(data->ov, NULL, &qobj, &error_abort);
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QINT);
-    g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, -42);
+    qint = qobject_to_qint(visitor_get(data));
+    g_assert(qint);
+    g_assert_cmpint(qint_get_int(qint), ==, -42);
     qobject_decref(qobj);
 
     visitor_reset(data);
@@ -354,9 +353,7 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
     qobject_decref(qobj);
     qdict = qobject_to_qdict(visitor_get(data));
     g_assert(qdict);
-    qobj = qdict_get(qdict, "integer");
-    g_assert(qobj);
-    qint = qobject_to_qint(qobj);
+    qint = qobject_to_qint(qdict_get(qdict, "integer"));
     g_assert(qint);
     g_assert_cmpint(qint_get_int(qint), ==, -42);
     qobj = qdict_get(qdict, "boolean");
@@ -394,8 +391,8 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
 static void test_visitor_out_alternate(TestOutputVisitorData *data,
                                        const void *unused)
 {
-    QObject *arg;
     UserDefAlternate *tmp;
+    QInt *qint;
     QString *qstr;
     QDict *qdict;
 
@@ -404,10 +401,9 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
     tmp->u.i = 42;
 
     visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
-    arg = visitor_get(data);
-
-    g_assert(qobject_type(arg) == QTYPE_QINT);
-    g_assert_cmpint(qint_get_int(qobject_to_qint(arg)), ==, 42);
+    qint = qobject_to_qint(visitor_get(data));
+    g_assert(qint);
+    g_assert_cmpint(qint_get_int(qint), ==, 42);
 
     qapi_free_UserDefAlternate(tmp);
 
-- 
2.7.4

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

* [Qemu-devel] [PATCH 11/14] tests: Don't check qobject_type() before qobject_to_qfloat()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (9 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 10/14] tests: Don't check qobject_type() before qobject_to_qint() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 19:38   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 12/14] tests: Don't check qobject_type() before qobject_to_qbool() Markus Armbruster
                   ` (2 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

qobject_to_qfloat(obj) returns NULL when obj isn't a QFloat.  Check
that instead of qobject_type(obj) == QTYPE_QFLOAT.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qjson.c                 | 12 ++----------
 tests/test-qobject-output-visitor.c |  8 ++++----
 2 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index aab4e0a..591b70a 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -921,10 +921,8 @@ static void float_number(void)
         QFloat *qfloat;
 
         obj = qobject_from_json(test_cases[i].encoded);
-        g_assert(obj != NULL);
-        g_assert(qobject_type(obj) == QTYPE_QFLOAT);
-
         qfloat = qobject_to_qfloat(obj);
+        g_assert(qfloat);
         g_assert(qfloat_get_double(qfloat) == test_cases[i].decoded);
 
         if (test_cases[i].skip == 0) {
@@ -941,7 +939,6 @@ static void float_number(void)
 
 static void vararg_number(void)
 {
-    QObject *obj;
     QInt *qint;
     QFloat *qfloat;
     int value = 0x2342;
@@ -956,13 +953,8 @@ static void vararg_number(void)
     g_assert(qint_get_int(qint) == value_ll);
     QDECREF(qint);
 
-    obj = qobject_from_jsonf("%f", valuef);
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QFLOAT);
-
-    qfloat = qobject_to_qfloat(obj);
+    qfloat = qobject_to_qfloat(qobject_from_jsonf("%f", valuef));
     g_assert(qfloat_get_double(qfloat) == valuef);
-
     QDECREF(qfloat);
 }
 
diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c
index 50b807e..5617fd3 100644
--- a/tests/test-qobject-output-visitor.c
+++ b/tests/test-qobject-output-visitor.c
@@ -84,13 +84,13 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
                                     const void *unused)
 {
     double value = 3.14;
-    QObject *obj;
+    QFloat *qfloat;
 
     visit_type_number(data->ov, NULL, &value, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QFLOAT);
-    g_assert(qfloat_get_double(qobject_to_qfloat(obj)) == value);
+    qfloat = qobject_to_qfloat(visitor_get(data));
+    g_assert(qfloat);
+    g_assert(qfloat_get_double(qfloat) == value);
 }
 
 static void test_visitor_out_string(TestOutputVisitorData *data,
-- 
2.7.4

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

* [Qemu-devel] [PATCH 12/14] tests: Don't check qobject_type() before qobject_to_qbool()
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (10 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 11/14] tests: Don't check qobject_type() before qobject_to_qfloat() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 19:44   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 13/14] monitor: Clean up handle_hmp_command() a bit Markus Armbruster
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 14/14] block: Don't bother asserting type of output visitor's output Markus Armbruster
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

qobject_to_qbool(obj) returns NULL when obj isn't a QBool.  Check
that instead of qobject_type(obj) == QTYPE_QBOOL.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/check-qjson.c                 | 24 ++++++------------------
 tests/test-qobject-output-visitor.c | 12 +++++-------
 2 files changed, 11 insertions(+), 25 deletions(-)

diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index 591b70a..e6d6935 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -966,10 +966,8 @@ static void keyword_literal(void)
     QString *str;
 
     obj = qobject_from_json("true");
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QBOOL);
-
     qbool = qobject_to_qbool(obj);
+    g_assert(qbool);
     g_assert(qbool_get_bool(qbool) == true);
 
     str = qobject_to_json(obj);
@@ -979,10 +977,8 @@ static void keyword_literal(void)
     QDECREF(qbool);
 
     obj = qobject_from_json("false");
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QBOOL);
-
     qbool = qobject_to_qbool(obj);
+    g_assert(qbool);
     g_assert(qbool_get_bool(qbool) == false);
 
     str = qobject_to_json(obj);
@@ -991,23 +987,15 @@ static void keyword_literal(void)
 
     QDECREF(qbool);
 
-    obj = qobject_from_jsonf("%i", false);
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QBOOL);
-
-    qbool = qobject_to_qbool(obj);
+    qbool = qobject_to_qbool(qobject_from_jsonf("%i", false));
+    g_assert(qbool);
     g_assert(qbool_get_bool(qbool) == false);
-
     QDECREF(qbool);
 
     /* Test that non-zero values other than 1 get collapsed to true */
-    obj = qobject_from_jsonf("%i", 2);
-    g_assert(obj != NULL);
-    g_assert(qobject_type(obj) == QTYPE_QBOOL);
-
-    qbool = qobject_to_qbool(obj);
+    qbool = qobject_to_qbool(qobject_from_jsonf("%i", 2));
+    g_assert(qbool);
     g_assert(qbool_get_bool(qbool) == true);
-
     QDECREF(qbool);
 
     obj = qobject_from_json("null");
diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c
index 5617fd3..500b452 100644
--- a/tests/test-qobject-output-visitor.c
+++ b/tests/test-qobject-output-visitor.c
@@ -71,13 +71,13 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
                                   const void *unused)
 {
     bool value = true;
-    QObject *obj;
+    QBool *qbool;
 
     visit_type_bool(data->ov, NULL, &value, &error_abort);
 
-    obj = visitor_get(data);
-    g_assert(qobject_type(obj) == QTYPE_QBOOL);
-    g_assert(qbool_get_bool(qobject_to_qbool(obj)) == value);
+    qbool = qobject_to_qbool(visitor_get(data));
+    g_assert(qbool);
+    g_assert(qbool_get_bool(qbool) == value);
 }
 
 static void test_visitor_out_number(TestOutputVisitorData *data,
@@ -356,9 +356,7 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
     qint = qobject_to_qint(qdict_get(qdict, "integer"));
     g_assert(qint);
     g_assert_cmpint(qint_get_int(qint), ==, -42);
-    qobj = qdict_get(qdict, "boolean");
-    g_assert(qobj);
-    qbool = qobject_to_qbool(qobj);
+    qbool = qobject_to_qbool(qdict_get(qdict, "boolean"));
     g_assert(qbool);
     g_assert(qbool_get_bool(qbool) == true);
     qstring = qobject_to_qstring(qdict_get(qdict, "string"));
-- 
2.7.4

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

* [Qemu-devel] [PATCH 13/14] monitor: Clean up handle_hmp_command() a bit
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (11 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 12/14] tests: Don't check qobject_type() before qobject_to_qbool() Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 19:45   ` Eric Blake
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 14/14] block: Don't bother asserting type of output visitor's output Markus Armbruster
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

Leave checking qobject_type(req) to qmp_check_input_obj().  Rework
handling of json_parser_parse_err() failing without setting an error.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 monitor.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/monitor.c b/monitor.c
index 493bed9..1e352a6 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3735,10 +3735,11 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
     Error *err = NULL;
 
     req = json_parser_parse_err(tokens, NULL, &err);
-    if (err || !req || qobject_type(req) != QTYPE_QDICT) {
-        if (!err) {
-            error_setg(&err, QERR_JSON_PARSING);
-        }
+    if (!req && !err) {
+        /* json_parser_parse_err() sucks: can fail without setting @err */
+        error_setg(&err, QERR_JSON_PARSING);
+    }
+    if (err) {
         goto err_out;
     }
 
-- 
2.7.4

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

* [Qemu-devel] [PATCH 14/14] block: Don't bother asserting type of output visitor's output
  2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
                   ` (12 preceding siblings ...)
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 13/14] monitor: Clean up handle_hmp_command() a bit Markus Armbruster
@ 2017-02-17 20:38 ` Markus Armbruster
  2017-02-21 19:46   ` Eric Blake
  13 siblings, 1 reply; 30+ messages in thread
From: Markus Armbruster @ 2017-02-17 20:38 UTC (permalink / raw)
  To: qemu-devel

After a visit of a complex QAPI type FOO

    ov = qobject_output_visitor_new(&foo);
    visit_type_FOO(ov, NULL, expr, &error_abort);
    visit_complete(ov, &foo);

we can safely assume qobject_type(foo) is QTYPE_QDICT.  We do in many
places, but occasionally assert qobject_type(obj) == QTYPE_QDICT.
Don't.  The appropriate place to check such fundamental properties of
QAPI visitors is the test suite.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 block/nbd.c  | 2 --
 block/nfs.c  | 2 --
 block/qapi.c | 1 -
 3 files changed, 5 deletions(-)

diff --git a/block/nbd.c b/block/nbd.c
index 35f24be..a7f9108 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -537,8 +537,6 @@ static void nbd_refresh_filename(BlockDriverState *bs, QDict *options)
     visit_type_SocketAddress(ov, NULL, &s->saddr, &error_abort);
     visit_complete(ov, &saddr_qdict);
     visit_free(ov);
-    assert(qobject_type(saddr_qdict) == QTYPE_QDICT);
-
     qdict_put_obj(opts, "server", saddr_qdict);
 
     if (s->export) {
diff --git a/block/nfs.c b/block/nfs.c
index 689eaa7..55a8a62 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -798,8 +798,6 @@ static void nfs_refresh_filename(BlockDriverState *bs, QDict *options)
     ov = qobject_output_visitor_new(&server_qdict);
     visit_type_NFSServer(ov, NULL, &client->server, &error_abort);
     visit_complete(ov, &server_qdict);
-    assert(qobject_type(server_qdict) == QTYPE_QDICT);
-
     qdict_put_obj(opts, "server", server_qdict);
     qdict_put(opts, "path", qstring_from_str(client->path));
 
diff --git a/block/qapi.c b/block/qapi.c
index ac480aa..a40922e 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -682,7 +682,6 @@ void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f,
 
     visit_type_ImageInfoSpecific(v, NULL, &info_spec, &error_abort);
     visit_complete(v, &obj);
-    assert(qobject_type(obj) == QTYPE_QDICT);
     data = qdict_get(qobject_to_qdict(obj), "data");
     dump_qobject(func_fprintf, f, 1, data);
     qobject_decref(obj);
-- 
2.7.4

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

* Re: [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict() Markus Armbruster
@ 2017-02-17 22:29   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-17 22:29 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 685 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Commit 89cad9f changed qdict_get_qdict() to return NULL instead of
> crash when the key doesn't exist or its value isn't a QDict.
> Commit 2d6421a neglected to do the same for qdict_get_qlist().
> Correct that, and update the function comments.
> 
> qdict_get_obj() is now unused, remove.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  qobject/qdict.c | 30 +++---------------------------
>  1 file changed, 3 insertions(+), 27 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive() Markus Armbruster
@ 2017-02-17 22:34   ` Eric Blake
  2017-02-18 10:49     ` Markus Armbruster
  0 siblings, 1 reply; 30+ messages in thread
From: Eric Blake @ 2017-02-17 22:34 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 616 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Use qdict_get_qdict(), qdict_get_qlist() instead of qdict_get()
> followed by qobject_to_qdict(), qobject_to_qlist().

Worth a Coccinelle script to make sure we catch it all?

> 
> While there, drop some redundant code.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qdict.c | 25 +++++++++----------------
>  1 file changed, 9 insertions(+), 16 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive()
  2017-02-17 22:34   ` Eric Blake
@ 2017-02-18 10:49     ` Markus Armbruster
  0 siblings, 0 replies; 30+ messages in thread
From: Markus Armbruster @ 2017-02-18 10:49 UTC (permalink / raw)
  To: Eric Blake; +Cc: qemu-devel

Eric Blake <eblake@redhat.com> writes:

> On 02/17/2017 02:38 PM, Markus Armbruster wrote:
>> Use qdict_get_qdict(), qdict_get_qlist() instead of qdict_get()
>> followed by qobject_to_qdict(), qobject_to_qlist().
>
> Worth a Coccinelle script to make sure we catch it all?

I'm pretty sure I got them all: I examined all uses of the QType
enumeration constants for this series.

>> 
>> While there, drop some redundant code.
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  tests/check-qdict.c | 25 +++++++++----------------
>>  1 file changed, 9 insertions(+), 16 deletions(-)
>> 
>
> Reviewed-by: Eric Blake <eblake@redhat.com>

Thanks!

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

* Re: [Qemu-devel] [PATCH 03/14] check-qdict: Tighten qdict_crumple_test_recursive() some
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 03/14] check-qdict: Tighten qdict_crumple_test_recursive() some Markus Armbruster
@ 2017-02-18 13:11   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-18 13:11 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 511 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Consistently check for unexpected QDict entries, and qdict_get_qdict()
> success.  The latter doesn't tighten the test, it only makes it fail
> more nicely.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qdict.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 04/14] check-qjson: Simplify around compare_litqobj_to_qobj()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 04/14] check-qjson: Simplify around compare_litqobj_to_qobj() Markus Armbruster
@ 2017-02-18 15:54   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-18 15:54 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 619 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Make compare_litqobj_to_qobj() cope with null, and drop non-null
> assertions from callers.
> 
> compare_litqobj_to_qobj() already checks the QType matches; drop the
> redundant assertions from callers.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qjson.c | 22 +---------------------
>  1 file changed, 1 insertion(+), 21 deletions(-)

Wow - impressive diffstat.

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 05/14] libqtest: Clean up qmp_response() a bit
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 05/14] libqtest: Clean up qmp_response() a bit Markus Armbruster
@ 2017-02-21  2:48   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21  2:48 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 549 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Use qobject_to_qdict() instead of a type cast.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/libqtest.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

Happens to be the same (because of our struct layout), but agree that
the conversion function is safer if we ever change struct layout.

Reviewed-by: Eric Blake <eblake@redhat.com>


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 06/14] test-qmp-event: Simplify and tighten event_test_emit()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 06/14] test-qmp-event: Simplify and tighten event_test_emit() Markus Armbruster
@ 2017-02-21 15:03   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 15:03 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 493 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Use qdict_get_qdict() and qdict_get_try_int() to simplify.
> 
> While there, add a sanity check for seconds.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/test-qmp-event.c | 14 ++++----------
>  1 file changed, 4 insertions(+), 10 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 07/14] Don't check qobject_type() before qobject_to_qdict()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 07/14] Don't check qobject_type() before qobject_to_qdict() Markus Armbruster
@ 2017-02-21 15:05   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 15:05 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 397 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> qobject_to_qdict(obj) returns NULL when obj isn't a QDict.  Check
> that instead of qobject_type(obj) == QTYPE_QDICT.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 08/14] tests: Don't check qobject_type() before qobject_to_qlist()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 08/14] tests: Don't check qobject_type() before qobject_to_qlist() Markus Armbruster
@ 2017-02-21 16:35   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 16:35 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 501 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> qobject_to_qlist(obj) returns NULL when obj isn't a QList.  Check
> that instead of qobject_type(obj) == QTYPE_QLIST.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/test-qobject-output-visitor.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 09/14] tests: Don't check qobject_type() before qobject_to_qstring()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 09/14] tests: Don't check qobject_type() before qobject_to_qstring() Markus Armbruster
@ 2017-02-21 17:50   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 17:50 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 622 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> qobject_to_qstring(obj) returns NULL when obj isn't a QString.  Check
> that instead of qobject_type(obj) == QTYPE_QSTRING.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qjson.c                 | 31 ++++++++-----------------------
>  tests/test-qobject-output-visitor.c | 37 +++++++++++++++++--------------------
>  2 files changed, 25 insertions(+), 43 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 10/14] tests: Don't check qobject_type() before qobject_to_qint()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 10/14] tests: Don't check qobject_type() before qobject_to_qint() Markus Armbruster
@ 2017-02-21 19:18   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 19:18 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 597 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> qobject_to_qint(obj) returns NULL when obj isn't a QInt.  Check
> that instead of qobject_type(obj) == QTYPE_QINT.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qjson.c                 | 24 +++++-------------------
>  tests/test-qobject-output-visitor.c | 28 ++++++++++++----------------
>  2 files changed, 17 insertions(+), 35 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 11/14] tests: Don't check qobject_type() before qobject_to_qfloat()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 11/14] tests: Don't check qobject_type() before qobject_to_qfloat() Markus Armbruster
@ 2017-02-21 19:38   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 19:38 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 570 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> qobject_to_qfloat(obj) returns NULL when obj isn't a QFloat.  Check
> that instead of qobject_type(obj) == QTYPE_QFLOAT.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qjson.c                 | 12 ++----------
>  tests/test-qobject-output-visitor.c |  8 ++++----
>  2 files changed, 6 insertions(+), 14 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 12/14] tests: Don't check qobject_type() before qobject_to_qbool()
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 12/14] tests: Don't check qobject_type() before qobject_to_qbool() Markus Armbruster
@ 2017-02-21 19:44   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 19:44 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 584 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> qobject_to_qbool(obj) returns NULL when obj isn't a QBool.  Check
> that instead of qobject_type(obj) == QTYPE_QBOOL.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  tests/check-qjson.c                 | 24 ++++++------------------
>  tests/test-qobject-output-visitor.c | 12 +++++-------
>  2 files changed, 11 insertions(+), 25 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 13/14] monitor: Clean up handle_hmp_command() a bit
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 13/14] monitor: Clean up handle_hmp_command() a bit Markus Armbruster
@ 2017-02-21 19:45   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 19:45 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 502 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> Leave checking qobject_type(req) to qmp_check_input_obj().  Rework
> handling of json_parser_parse_err() failing without setting an error.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  monitor.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

* Re: [Qemu-devel] [PATCH 14/14] block: Don't bother asserting type of output visitor's output
  2017-02-17 20:38 ` [Qemu-devel] [PATCH 14/14] block: Don't bother asserting type of output visitor's output Markus Armbruster
@ 2017-02-21 19:46   ` Eric Blake
  0 siblings, 0 replies; 30+ messages in thread
From: Eric Blake @ 2017-02-21 19:46 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 817 bytes --]

On 02/17/2017 02:38 PM, Markus Armbruster wrote:
> After a visit of a complex QAPI type FOO
> 
>     ov = qobject_output_visitor_new(&foo);
>     visit_type_FOO(ov, NULL, expr, &error_abort);
>     visit_complete(ov, &foo);
> 
> we can safely assume qobject_type(foo) is QTYPE_QDICT.  We do in many
> places, but occasionally assert qobject_type(obj) == QTYPE_QDICT.
> Don't.  The appropriate place to check such fundamental properties of
> QAPI visitors is the test suite.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  block/nbd.c  | 2 --
>  block/nfs.c  | 2 --
>  block/qapi.c | 1 -
>  3 files changed, 5 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

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

end of thread, other threads:[~2017-02-21 19:46 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-17 20:38 [Qemu-devel] [PATCH 00/14] qobject: Cleanups, mostly in tests Markus Armbruster
2017-02-17 20:38 ` [Qemu-devel] [PATCH 01/14] qdict: Make qdict_get_qlist() safe like qdict_get_qdict() Markus Armbruster
2017-02-17 22:29   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 02/14] check-qdict: Simplify qdict_crumple_test_recursive() Markus Armbruster
2017-02-17 22:34   ` Eric Blake
2017-02-18 10:49     ` Markus Armbruster
2017-02-17 20:38 ` [Qemu-devel] [PATCH 03/14] check-qdict: Tighten qdict_crumple_test_recursive() some Markus Armbruster
2017-02-18 13:11   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 04/14] check-qjson: Simplify around compare_litqobj_to_qobj() Markus Armbruster
2017-02-18 15:54   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 05/14] libqtest: Clean up qmp_response() a bit Markus Armbruster
2017-02-21  2:48   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 06/14] test-qmp-event: Simplify and tighten event_test_emit() Markus Armbruster
2017-02-21 15:03   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 07/14] Don't check qobject_type() before qobject_to_qdict() Markus Armbruster
2017-02-21 15:05   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 08/14] tests: Don't check qobject_type() before qobject_to_qlist() Markus Armbruster
2017-02-21 16:35   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 09/14] tests: Don't check qobject_type() before qobject_to_qstring() Markus Armbruster
2017-02-21 17:50   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 10/14] tests: Don't check qobject_type() before qobject_to_qint() Markus Armbruster
2017-02-21 19:18   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 11/14] tests: Don't check qobject_type() before qobject_to_qfloat() Markus Armbruster
2017-02-21 19:38   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 12/14] tests: Don't check qobject_type() before qobject_to_qbool() Markus Armbruster
2017-02-21 19:44   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 13/14] monitor: Clean up handle_hmp_command() a bit Markus Armbruster
2017-02-21 19:45   ` Eric Blake
2017-02-17 20:38 ` [Qemu-devel] [PATCH 14/14] block: Don't bother asserting type of output visitor's output Markus Armbruster
2017-02-21 19:46   ` Eric Blake

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.