All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: qemu-devel@nongnu.org, peterx@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 06/10] tests: add qmp/object-add-without-props test
Date: Thu, 30 Aug 2018 14:51:02 +0200	[thread overview]
Message-ID: <87efeg3tmx.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20180829134043.31706-7-marcandre.lureau@redhat.com> ("Marc-André Lureau"'s message of "Wed, 29 Aug 2018 15:40:39 +0200")

Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> test_object_add_without_props() tests a bug in qmp_object_add() we
> fixed in commit e64c75a975.  Sadly, we don't have systematic
> object-add tests.  This lone test can go into qmp-cmd-test for want of
> a better home.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  tests/qmp-cmd-test.c | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
>
> diff --git a/tests/qmp-cmd-test.c b/tests/qmp-cmd-test.c
> index c5b70df974..3ba8f68476 100644
> --- a/tests/qmp-cmd-test.c
> +++ b/tests/qmp-cmd-test.c
> @@ -19,6 +19,15 @@
>  
>  const char common_args[] = "-nodefaults -machine none";
>  
> +static const char *get_error_class(QDict *resp)
> +{
> +    QDict *error = qdict_get_qdict(resp, "error");
> +    const char *desc = qdict_get_try_str(error, "desc");
> +
> +    g_assert(desc);
> +    return error ? qdict_get_try_str(error, "class") : NULL;
> +}
> +
>  /* Query smoke tests */
>  
>  static int query_error_class(const char *cmd)

Copied from qmp-test.c.  It should be factored out instead.  Where to
put it?  libqtest.c isn't quite right, as the function could
theoretically be useful in unit tests as well, but I guess it would do
for now.

Asserting presence of "desc" makes little sense outside qmp-test.c
protocol tests, but it doesn't hurt, either.

Grep shows more possible users in tests/drive_del-test.c and
tests/test-qga.c.

> @@ -197,6 +206,24 @@ static void add_query_tests(QmpSchema *schema)
>      }
>  }
>  
> +static void test_object_add_without_props(void)
> +{
> +    QTestState *qts;
> +    QDict *ret;

qmp-test.c and qmp-cmd-test.c commonly use @resp for the response.

> +
> +    qts = qtest_init(common_args);
> +
> +    ret = qtest_qmp(qts,
> +                    "{'execute': 'object-add', 'arguments':"
> +                    " {'qom-type': 'memory-backend-ram', 'id': 'ram1' } }");
> +    g_assert_nonnull(ret);

What's wrong with g_assert(!ret)?

> +
> +    g_assert_cmpstr(get_error_class(ret), ==, "GenericError");
> +
> +    qobject_unref(ret);

Permit me to digress.

When you expect success, you check @resp like this:

    ret = qdict_get_qdict(resp, "return");
    ... laborously check @ret against expectations ...

If you feel pedantically thorough, you can throw in

    g_assert(!qdict_haskey(resp, "error");

When you expect failure, you check like this:

    error = qdict_get_qdict(resp, "error");
    class = qdict_get_try_str(error, "class");
    g_assert_cmpstr(class, ==, "GenericError");

and perhaps

    g_assert(!qdict_haskey(resp, "return");

get_error_class() saves a little typing in the failure case.  It's still
an awfully verbose overall, and the checking is full of holes more often
than not.  There's got to be a better way.

> +    qtest_quit(qts);
> +}
> +
>  int main(int argc, char *argv[])
>  {
>      QmpSchema schema;
> @@ -206,6 +233,10 @@ int main(int argc, char *argv[])
>  
>      qmp_schema_init(&schema);
>      add_query_tests(&schema);
> +
> +    qtest_add_func("qmp/object-add-without-props",
> +                   test_object_add_without_props);
> +
>      ret = g_test_run();
>  
>      qmp_schema_cleanup(&schema);

May I have a TODO comment asking for coverage of generic object-add
failure modes?

  reply	other threads:[~2018-08-30 12:59 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29 13:40 [Qemu-devel] [PATCH v4 00/10] monitor: various code simplification and fixes Marc-André Lureau
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 01/10] monitor: consitify qmp_send_response() QDict argument Marc-André Lureau
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 02/10] qmp: constify qmp_is_oob() Marc-André Lureau
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 03/10] Revert "qmp: isolate responses into io thread" Marc-André Lureau
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 04/10] monitor: no need to save need_resume Marc-André Lureau
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 05/10] json-lexer: make it safe to call destroy multiple times Marc-André Lureau
2018-08-30 12:16   ` Markus Armbruster
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 06/10] tests: add qmp/object-add-without-props test Marc-André Lureau
2018-08-30 12:51   ` Markus Armbruster [this message]
2018-08-30 15:23     ` Marc-André Lureau
2018-08-31  6:47       ` Markus Armbruster
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 07/10] tests: add qmp/qom-set-without-value test Marc-André Lureau
2018-08-30 13:05   ` Markus Armbruster
2018-08-30 13:10     ` Marc-André Lureau
2018-08-30 15:42     ` Marc-André Lureau
2018-08-31  6:30       ` Markus Armbruster
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 08/10] tests: add a qmp success-response test Marc-André Lureau
2018-08-30 13:14   ` Markus Armbruster
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 09/10] qga: process_event() simplification Marc-André Lureau
2018-08-30 13:57   ` Markus Armbruster
2018-10-02 19:04     ` Marc-André Lureau
2018-10-08 13:25       ` Markus Armbruster
2018-08-29 13:40 ` [Qemu-devel] [PATCH v4 10/10] qmp: common 'id' handling & make QGA conform to QMP spec Marc-André Lureau
2018-09-01 10:59   ` Markus Armbruster
2018-09-01 12:05     ` Marc-André Lureau
2018-09-03  5:19       ` Markus Armbruster
2018-10-02 19:06       ` Marc-André Lureau
2018-10-08 13:26         ` Markus Armbruster
2018-08-30 14:21 ` [Qemu-devel] [PATCH v4 00/10] monitor: various code simplification and fixes Markus Armbruster
2018-08-31  0:19   ` Michael Roth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87efeg3tmx.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.