qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v4 11/22] test-qga: Simplify command constructio


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v4 11/22] test-qga: Simplify command construction
Date: Wed, 09 Aug 2017 13:40:44 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Eric Blake <address@hidden> writes:

> When you build qga input manually like this:
>
>     cmd = g_strdup_printf("{'execute': 'guest-file-write',"
>                           " 'arguments': {'handle': %" PRId64 ","
>                           " 'buf-b64': '%s' } }", id, enc);
>     ret = qmp_fd(fixture->fd, cmd);
>     g_free(cmd);
>
> you're responsible for escaping the interpolated values for JSON.
> Not done here, and therefore works only because the base64 encoding
> does not include % or '.
>
> Leaving interpolation into JSON via qobject_from_jsonf() is more
> robust; we can also reduce the boilerplate by factoring out the
> common 'execute':%s and 'arguments':%p code into new qga() and
> qga_args() helpers:
>
>     ret = qga_args(fixture, "guest-file-write",
>                    "{'handle': %" PRId64 ", 'buf-b64': %s}", id, enc);
>
> Note that this reverts part of commit 1792d7d0; but that is because
> we just recently guaranteed support of PRId64 in qobject_from_jsonf().
>
> Also note that the simple form qga() sends "arguments":{} over the
> wire rather than the previous approach of omitting it entirely;
> test_qga_ping() is updated to use a long-hand form to ensure that
> "arguments" is truly optional.
>
> As a bonus, this eliminates the last external caller using varargs
> for qmp_fd_send(); the next patch will simplify that interface to

I'm blind... where?

> take just the string being sent over the wire rather than performing
> a string->QObject->string round trip (there's already a hint
> of that in the simplification of passing '\xff' separately from
> the command, where this patch had to tweak things to avoid an
> assertion).  Also, this is a step towards getting rid of non-literal
> format strings; our new helpers can already use GCC_ATTR_FMT() just
> like qobject_from_jsonf().
>
> Signed-off-by: Eric Blake <address@hidden>
> ---
>  tests/libqtest.c |   3 +-
>  tests/test-qga.c | 222 
> +++++++++++++++++++++++++++----------------------------
>  2 files changed, 111 insertions(+), 114 deletions(-)
>
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index 0cb439eefa..ba09c949dc 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -458,7 +458,8 @@ void qmp_fd_sendv(int fd, const char *fmt, va_list ap)
>       * resyncs */
>      if (*fmt == '\377') {
>          socket_send(fd, fmt, 1);
> -        fmt++;
> +        assert(!fmt[1]);
> +        return;
>      }
>      assert(*fmt);
>
> diff --git a/tests/test-qga.c b/tests/test-qga.c
> index fd6bc7690f..839481e49b 100644
> --- a/tests/test-qga.c
> +++ b/tests/test-qga.c
> @@ -5,6 +5,7 @@
>  #include <sys/un.h>
>
>  #include "libqtest.h"
> +#include "qapi/qmp/qjson.h"
>
>  typedef struct {
>      char *test_dir;
> @@ -111,6 +112,55 @@ fixture_tear_down(TestFixture *fixture, gconstpointer 
> data)
>      g_free(fixture->test_dir);
>  }
>
> +static void GCC_FMT_ATTR(3, 0) qga_sendv(const TestFixture *fixture,
> +                                         const char *cmd,
> +                                         const char *fmt, va_list ap)
> +{
> +    QObject *args = qobject_from_jsonv(fmt, ap);
> +    QObject *obj = qobject_from_jsonf("{'execute':%s, 'arguments':%p}",
> +                                      cmd, args);
> +    QString *qstr = qobject_to_json(obj);
> +    const char *str;
> +
> +    qstring_append_chr(qstr, '\n');
> +    str = qstring_get_str(qstr);
> +    assert(!strchr(str, '%'));

I figure you assert here because you can't rely on the compiler to catch
mistakes, and the technique you'd use with genuine printf, namely
passing "%s", str, isn't applicable.  Not entirely obvious.  Hmm, it
goes away in the next patch.  Okay then.

> +    qmp_fd_send(fixture->fd, str);
> +    QDECREF(qstr);
> +    qobject_decref(obj);
> +}
> +
> +static void GCC_FMT_ATTR(3, 4) qga_send_args(const TestFixture *fixture,
> +                                             const char *cmd,
> +                                             const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    qga_sendv(fixture, cmd, fmt, ap);
> +    va_end(ap);
> +}
> +
> +
> +static QDict * GCC_FMT_ATTR(3, 4) qga_args(const TestFixture *fixture,
> +                                           const char *cmd,
> +                                           const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    qga_sendv(fixture, cmd, fmt, ap);
> +    va_end(ap);
> +    return qmp_fd_receive(fixture->fd);
> +}
> +
> +static QDict *qga(const TestFixture *fixture, const char *cmd)
> +{
> +    qga_send_args(fixture, cmd, "{}");
> +    return qmp_fd_receive(fixture->fd);
> +}
> +
> +
>  static void qmp_assertion_message_error(const char     *domain,
>                                          const char     *file,
>                                          int             line,
> @@ -144,12 +194,9 @@ static void test_qga_sync_delimited(gconstpointer fix)
>      guint32 v, r = g_random_int();
>      unsigned char c;
>      QDict *ret;
> -    gchar *cmd;
>
> -    cmd = g_strdup_printf("\xff{'execute': 'guest-sync-delimited',"
> -                          " 'arguments': {'id': %u } }", r);
> -    qmp_fd_send(fixture->fd, cmd);
> -    g_free(cmd);
> +    qmp_fd_send(fixture->fd, "\xff");

I was starting to type "opportunity to switch to the \377 used in
libqtest.c", but then I noticed that one will go away in the next
patch.  Nevermind then.

> +    qga_send_args(fixture, "guest-sync-delimited", "{'id': %u}", r);
>
>      /*
>       * Read and ignore garbage until resynchronized.
> @@ -186,7 +233,6 @@ static void test_qga_sync(gconstpointer fix)
>      const TestFixture *fixture = fix;
>      guint32 v, r = g_random_int();
>      QDict *ret;
> -    gchar *cmd;
>
>      /*
>       * TODO guest-sync is inherently limited: we cannot distinguish
> @@ -199,10 +245,7 @@ static void test_qga_sync(gconstpointer fix)
>       * invalid JSON. Testing of '\xff' handling is done in
>       * guest-sync-delimited instead.
>       */
> -    cmd = g_strdup_printf("{'execute': 'guest-sync',"
> -                          " 'arguments': {'id': %u } }", r);
> -    ret = qmp_fd(fixture->fd, cmd);
> -    g_free(cmd);
> +    ret = qga_args(fixture, "guest-sync", "{'id': %u}", r);
>
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
> @@ -218,10 +261,17 @@ static void test_qga_ping(gconstpointer fix)
>      const TestFixture *fixture = fix;
>      QDict *ret;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-ping'}");
> +    /* qga() adds an "arguments":{} over the wire... */
> +    ret = qga(fixture, "guest-ping");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
> +    QDECREF(ret);
>
> +    /* ...so also test in long-hand that "arguments" can be omitted. */
> +    qmp_fd_send(fixture->fd, "{'execute':'guest-ping'}");
> +    ret = qmp_fd_receive(fixture->fd);
> +    g_assert_nonnull(ret);
> +    qmp_assert_no_error(ret);
>      QDECREF(ret);
>  }
>
> @@ -231,8 +281,7 @@ static void test_qga_invalid_args(gconstpointer fix)
>      QDict *ret, *error;
>      const gchar *class, *desc;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-ping', "
> -                 "'arguments': {'foo': 42 }}");
> +    ret = qga_args(fixture, "guest-ping", "{'foo': 42 }");
>      g_assert_nonnull(ret);
>
>      error = qdict_get_qdict(ret, "error");
> @@ -251,7 +300,7 @@ static void test_qga_invalid_cmd(gconstpointer fix)
>      QDict *ret, *error;
>      const gchar *class, *desc;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-invalid-cmd'}");
> +    ret = qga(fixture, "guest-invalid-cmd");
>      g_assert_nonnull(ret);
>
>      error = qdict_get_qdict(ret, "error");
> @@ -270,7 +319,7 @@ static void test_qga_info(gconstpointer fix)
>      QDict *ret, *val;
>      const gchar *version;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-info'}");
> +    ret = qga(fixture, "guest-info");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -288,7 +337,7 @@ static void test_qga_get_vcpus(gconstpointer fix)
>      QList *list;
>      const QListEntry *entry;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-get-vcpus'}");
> +    ret = qga(fixture, "guest-get-vcpus");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -308,7 +357,7 @@ static void test_qga_get_fsinfo(gconstpointer fix)
>      QList *list;
>      const QListEntry *entry;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-get-fsinfo'}");
> +    ret = qga(fixture, "guest-get-fsinfo");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -331,7 +380,7 @@ static void test_qga_get_memory_block_info(gconstpointer 
> fix)
>      QDict *ret, *val;
>      int64_t size;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-get-memory-block-info'}");
> +    ret = qga(fixture, "guest-get-memory-block-info");
>      g_assert_nonnull(ret);
>
>      /* some systems might not expose memory block info in sysfs */
> @@ -352,7 +401,7 @@ static void test_qga_get_memory_blocks(gconstpointer fix)
>      QList *list;
>      const QListEntry *entry;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-get-memory-blocks'}");
> +    ret = qga(fixture, "guest-get-memory-blocks");
>      g_assert_nonnull(ret);
>
>      /* some systems might not expose memory block info in sysfs */
> @@ -376,7 +425,7 @@ static void test_qga_network_get_interfaces(gconstpointer 
> fix)
>      QList *list;
>      const QListEntry *entry;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-network-get-interfaces'}");
> +    ret = qga(fixture, "guest-network-get-interfaces");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -393,7 +442,7 @@ static void test_qga_file_ops(gconstpointer fix)
>      const TestFixture *fixture = fix;
>      const unsigned char helloworld[] = "Hello World!\n";
>      const char *b64;
> -    gchar *cmd, *path, *enc;
> +    gchar *path, *enc;
>      unsigned char *dec;
>      QDict *ret, *val;
>      int64_t id, eof;
> @@ -402,8 +451,8 @@ static void test_qga_file_ops(gconstpointer fix)
>      char tmp[100];
>
>      /* open */
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-file-open',"
> -                 " 'arguments': { 'path': 'foo', 'mode': 'w+' } }");
> +    ret = qga_args(fixture, "guest-file-open",
> +                   "{ 'path': 'foo', 'mode': 'w+' }");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>      id = qdict_get_int(ret, "return");
> @@ -411,10 +460,8 @@ static void test_qga_file_ops(gconstpointer fix)
>
>      enc = g_base64_encode(helloworld, sizeof(helloworld));
>      /* write */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-write',"
> -                          " 'arguments': { 'handle': %" PRId64 ","
> -                          " 'buf-b64': '%s' } }", id, enc);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-write",
> +                   "{ 'handle': %" PRId64 ", 'buf-b64': %s }", id, enc);
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -424,23 +471,14 @@ static void test_qga_file_ops(gconstpointer fix)
>      g_assert_cmpint(count, ==, sizeof(helloworld));
>      g_assert_cmpint(eof, ==, 0);
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* flush */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-flush',"
> -                          " 'arguments': {'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-flush", "{'handle': %" PRId64 "}", 
> id);

I'd break the line after the second argument.

>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* close */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-close',"
> -                          " 'arguments': {'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-close", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* check content */
>      path = g_build_filename(fixture->test_dir, "foo", NULL);
> @@ -454,18 +492,15 @@ static void test_qga_file_ops(gconstpointer fix)
>      fclose(f);
>
>      /* open */
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-file-open',"
> -                 " 'arguments': { 'path': 'foo', 'mode': 'r' } }");
> +    ret = qga_args(fixture, "guest-file-open",
> +                   "{ 'path': 'foo', 'mode': 'r' }");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>      id = qdict_get_int(ret, "return");
>      QDECREF(ret);
>
>      /* read */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-read',"
> -                          " 'arguments': { 'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-read", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "count");
>      eof = qdict_get_bool(val, "eof");
> @@ -475,14 +510,10 @@ static void test_qga_file_ops(gconstpointer fix)
>      g_assert_cmpstr(b64, ==, enc);
>
>      QDECREF(ret);
> -    g_free(cmd);
>      g_free(enc);
>
>      /* read eof */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-read',"
> -                          " 'arguments': { 'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-read", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "count");
>      eof = qdict_get_bool(val, "eof");
> @@ -491,14 +522,11 @@ static void test_qga_file_ops(gconstpointer fix)
>      g_assert(eof);
>      g_assert_cmpstr(b64, ==, "");
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* seek */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-seek',"
> -                          " 'arguments': { 'handle': %" PRId64 ", "
> -                          " 'offset': %d, 'whence': '%s' } }",
> -                          id, 6, "set");
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-seek",
> +                   "{'handle': %" PRId64 ", 'offset': %d, 'whence': %s}",
> +                   id, 6, "set");
>      qmp_assert_no_error(ret);
>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "position");
> @@ -506,13 +534,9 @@ static void test_qga_file_ops(gconstpointer fix)
>      g_assert_cmpint(count, ==, 6);
>      g_assert(!eof);
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* partial read */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-read',"
> -                          " 'arguments': { 'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-read", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "count");
>      eof = qdict_get_bool(val, "eof");
> @@ -525,15 +549,10 @@ static void test_qga_file_ops(gconstpointer fix)
>      g_free(dec);
>
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* close */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-close',"
> -                          " 'arguments': {'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-close", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      QDECREF(ret);
> -    g_free(cmd);
>  }
>
>  static void test_qga_file_write_read(gconstpointer fix)
> @@ -541,14 +560,14 @@ static void test_qga_file_write_read(gconstpointer fix)
>      const TestFixture *fixture = fix;
>      const unsigned char helloworld[] = "Hello World!\n";
>      const char *b64;
> -    gchar *cmd, *enc;
> +    gchar *enc;
>      QDict *ret, *val;
>      int64_t id, eof;
>      gsize count;
>
>      /* open */
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-file-open',"
> -                 " 'arguments': { 'path': 'foo', 'mode': 'w+' } }");
> +    ret = qga_args(fixture, "guest-file-open",
> +                   "{ 'path': 'foo', 'mode': 'w+' }");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>      id = qdict_get_int(ret, "return");
> @@ -556,10 +575,8 @@ static void test_qga_file_write_read(gconstpointer fix)
>
>      enc = g_base64_encode(helloworld, sizeof(helloworld));
>      /* write */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-write',"
> -                          " 'arguments': { 'handle': %" PRId64 ","
> -                          " 'buf-b64': '%s' } }", id, enc);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-write",
> +                   "{'handle': %" PRId64 ", 'buf-b64': %s}", id, enc);
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -569,13 +586,9 @@ static void test_qga_file_write_read(gconstpointer fix)
>      g_assert_cmpint(count, ==, sizeof(helloworld));
>      g_assert_cmpint(eof, ==, 0);
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* read (check implicit flush) */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-read',"
> -                          " 'arguments': { 'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-read", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "count");
>      eof = qdict_get_bool(val, "eof");
> @@ -584,14 +597,11 @@ static void test_qga_file_write_read(gconstpointer fix)
>      g_assert(eof);
>      g_assert_cmpstr(b64, ==, "");
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* seek to 0 */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-seek',"
> -                          " 'arguments': { 'handle': %" PRId64 ", "
> -                          " 'offset': %d, 'whence': '%s' } }",
> -                          id, 0, "set");
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-seek",
> +                   "{'handle': %" PRId64 ", 'offset': %d, 'whence': %s}",
> +                   id, 0, "set");
>      qmp_assert_no_error(ret);
>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "position");
> @@ -599,13 +609,9 @@ static void test_qga_file_write_read(gconstpointer fix)
>      g_assert_cmpint(count, ==, 0);
>      g_assert(!eof);
>      QDECREF(ret);
> -    g_free(cmd);
>
>      /* read */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-read',"
> -                          " 'arguments': { 'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-read", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      val = qdict_get_qdict(ret, "return");
>      count = qdict_get_int(val, "count");
>      eof = qdict_get_bool(val, "eof");
> @@ -614,16 +620,11 @@ static void test_qga_file_write_read(gconstpointer fix)
>      g_assert(eof);
>      g_assert_cmpstr(b64, ==, enc);
>      QDECREF(ret);
> -    g_free(cmd);
>      g_free(enc);
>
>      /* close */
> -    cmd = g_strdup_printf("{'execute': 'guest-file-close',"
> -                          " 'arguments': {'handle': %" PRId64 "} }",
> -                          id);
> -    ret = qmp_fd(fixture->fd, cmd);
> +    ret = qga_args(fixture, "guest-file-close", "{'handle': %" PRId64 "}", 
> id);

Likewise.

>      QDECREF(ret);
> -    g_free(cmd);
>  }
>
>  static void test_qga_get_time(gconstpointer fix)
> @@ -632,7 +633,7 @@ static void test_qga_get_time(gconstpointer fix)
>      QDict *ret;
>      int64_t time;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-get-time'}");
> +    ret = qga(fixture, "guest-get-time");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -651,7 +652,7 @@ static void test_qga_blacklist(gconstpointer data)
>      fixture_setup(&fix, "-b guest-ping,guest-get-time", NULL);
>
>      /* check blacklist */
> -    ret = qmp_fd(fix.fd, "{'execute': 'guest-ping'}");
> +    ret = qga(&fix, "guest-ping");
>      g_assert_nonnull(ret);
>      error = qdict_get_qdict(ret, "error");
>      class = qdict_get_try_str(error, "class");
> @@ -660,7 +661,7 @@ static void test_qga_blacklist(gconstpointer data)
>      g_assert_nonnull(g_strstr_len(desc, -1, "has been disabled"));
>      QDECREF(ret);
>
> -    ret = qmp_fd(fix.fd, "{'execute': 'guest-get-time'}");
> +    ret = qga(&fix, "guest-get-time");
>      g_assert_nonnull(ret);
>      error = qdict_get_qdict(ret, "error");
>      class = qdict_get_try_str(error, "class");
> @@ -670,7 +671,7 @@ static void test_qga_blacklist(gconstpointer data)
>      QDECREF(ret);
>
>      /* check something work */
> -    ret = qmp_fd(fix.fd, "{'execute': 'guest-get-fsinfo'}");
> +    ret = qga(&fix, "guest-get-fsinfo");
>      qmp_assert_no_error(ret);
>      QDECREF(ret);
>
> @@ -762,7 +763,7 @@ static void test_qga_fsfreeze_status(gconstpointer fix)
>      QDict *ret;
>      const gchar *status;
>
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-fsfreeze-status'}");
> +    ret = qga(fixture, "guest-fsfreeze-status");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>
> @@ -781,12 +782,11 @@ static void test_qga_guest_exec(gconstpointer fix)
>      int64_t pid, now, exitcode;
>      gsize len;
>      bool exited;
> -    char *cmd;
>
>      /* exec 'echo foo bar' */
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec', 'arguments': {"
> -                 " 'path': '/bin/echo', 'arg': [ '-n', '\" test_str \"' ],"
> -                 " 'capture-output': true } }");
> +    ret = qga_args(fixture, "guest-exec",
> +                 "{ 'path': '/bin/echo', 'arg': [ '-n', '\" test_str \"' ],"
> +                 " 'capture-output': true }");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);
>      val = qdict_get_qdict(ret, "return");
> @@ -796,10 +796,9 @@ static void test_qga_guest_exec(gconstpointer fix)
>
>      /* wait for completion */
>      now = g_get_monotonic_time();
> -    cmd = g_strdup_printf("{'execute': 'guest-exec-status',"
> -                          " 'arguments': { 'pid': %" PRId64 " } }", pid);
>      do {
> -        ret = qmp_fd(fixture->fd, cmd);
> +        ret = qga_args(fixture, "guest-exec-status", "{'pid': %" PRId64 "}",
> +                       pid);
>          g_assert_nonnull(ret);
>          val = qdict_get_qdict(ret, "return");
>          exited = qdict_get_bool(val, "exited");
> @@ -809,7 +808,6 @@ static void test_qga_guest_exec(gconstpointer fix)
>      } while (!exited &&
>               g_get_monotonic_time() < now + 5 * G_TIME_SPAN_SECOND);
>      g_assert(exited);
> -    g_free(cmd);
>
>      /* check stdout */
>      exitcode = qdict_get_int(val, "exitcode");
> @@ -829,8 +827,7 @@ static void test_qga_guest_exec_invalid(gconstpointer fix)
>      const gchar *class, *desc;
>
>      /* invalid command */
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec', 'arguments': {"
> -                 " 'path': '/bin/invalid-cmd42' } }");
> +    ret = qga_args(fixture, "guest-exec", "{ 'path': '/bin/invalid-cmd42' 
> }");
>      g_assert_nonnull(ret);
>      error = qdict_get_qdict(ret, "error");
>      g_assert_nonnull(error);
> @@ -841,8 +838,7 @@ static void test_qga_guest_exec_invalid(gconstpointer fix)
>      QDECREF(ret);
>
>      /* invalid pid */
> -    ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec-status',"
> -                 " 'arguments': { 'pid': 0 } }");
> +    ret = qga_args(fixture, "guest-exec-status", "{ 'pid': 0 }");

Likewise.

>      g_assert_nonnull(ret);
>      error = qdict_get_qdict(ret, "error");
>      g_assert_nonnull(error);
> @@ -868,7 +864,7 @@ static void test_qga_guest_get_osinfo(gconstpointer data)
>      g_free(cwd);
>      fixture_setup(&fixture, NULL, env);
>
> -    ret = qmp_fd(fixture.fd, "{'execute': 'guest-get-osinfo'}");
> +    ret = qga(&fixture, "guest-get-osinfo");
>      g_assert_nonnull(ret);
>      qmp_assert_no_error(ret);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]