qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Steve Sistare <steven.sistare@oracle.com>, qemu-devel@nongnu.org
Cc: John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>,
	Eric Blake <eblake@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	"Daniel P. Berrange" <berrange@redhat.com>,
	Eduardo Habkost <eduardo@habkost.net>,
	Fabiano Rosas <farosas@suse.de>,
	Laurent Vivier <lvivier@redhat.com>
Subject: Re: [PATCH V3 3/3] tests/qtest/qom-test: unit test for qom-list-getv
Date: Wed, 9 Jul 2025 00:02:07 +0200	[thread overview]
Message-ID: <bdb92ceb-59d3-4e82-83f7-d4bde9b96583@linaro.org> (raw)
In-Reply-To: <1751995472-211897-4-git-send-email-steven.sistare@oracle.com>

Hi Steve,

On 8/7/25 19:24, Steve Sistare wrote:
> Add a unit test for qom-list-getv.
> 
> Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
> ---
>   tests/qtest/qom-test.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 64 insertions(+)
> 
> diff --git a/tests/qtest/qom-test.c b/tests/qtest/qom-test.c
> index 27d70bc..4defff1 100644
> --- a/tests/qtest/qom-test.c
> +++ b/tests/qtest/qom-test.c
> @@ -11,11 +11,72 @@
>   
>   #include "qobject/qdict.h"
>   #include "qobject/qlist.h"
> +#include "qobject/qstring.h"
>   #include "qemu/cutils.h"
>   #include "libqtest.h"
>   
>   static int verbosity_level;
>   
> +static void test_getv(QTestState *qts, QList *paths)
> +{
> +    QListEntry *entry, *prop_entry, *path_entry;
> +    g_autoptr(QDict) response = NULL;
> +    QDict *args = qdict_new();
> +    QDict *prop;
> +    QList *return_list;
> +
> +    if (verbosity_level >= 2) {

Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>

But I note this doesn't assert anything except if you use V=3 and
look at the output.

Maybe stick it to a particular machine and check for a particular
path and its properties?

> +        g_test_message("Obtaining properties for paths:");
> +        QLIST_FOREACH_ENTRY(paths, path_entry) {
> +            QString *qstr = qobject_to(QString, qlist_entry_obj(path_entry));
> +            g_test_message("  %s", qstring_get_str(qstr));
> +        }
> +    }
> +
> +    qdict_put_obj(args, "paths", QOBJECT(qlist_copy(paths)));
> +    response = qtest_qmp(qts, "{ 'execute': 'qom-list-getv',"
> +                              "  'arguments': %p }", args);
> +    g_assert(response);
> +    g_assert(qdict_haskey(response, "return"));
> +    return_list = qobject_to(QList, qdict_get(response, "return"));
> +
> +    path_entry = QTAILQ_FIRST(&paths->head);
> +    QLIST_FOREACH_ENTRY(return_list, entry) {
> +        QDict *obj = qobject_to(QDict, qlist_entry_obj(entry));
> +        g_assert(qdict_haskey(obj, "properties"));
> +        QList *properties = qobject_to(QList, qdict_get(obj, "properties"));
> +        bool has_child = false;
> +
> +        QLIST_FOREACH_ENTRY(properties, prop_entry) {
> +            prop = qobject_to(QDict, qlist_entry_obj(prop_entry));
> +            g_assert(qdict_haskey(prop, "name"));
> +            g_assert(qdict_haskey(prop, "type"));
> +            has_child |= strstart(qdict_get_str(prop, "type"), "child<", NULL);
> +        }
> +
> +        if (has_child) {
> +            /* build a list of child paths */
> +            QString *qstr = qobject_to(QString, qlist_entry_obj(path_entry));
> +            const char *path = qstring_get_str(qstr);
> +            g_autoptr(QList) child_paths = qlist_new();
> +
> +            QLIST_FOREACH_ENTRY(properties, prop_entry) {
> +                prop = qobject_to(QDict, qlist_entry_obj(prop_entry));
> +                if (strstart(qdict_get_str(prop, "type"), "child<", NULL)) {
> +                    g_autofree char *child_path = g_strdup_printf(
> +                        "%s/%s", path, qdict_get_str(prop, "name"));
> +                    qlist_append_str(child_paths, child_path);
> +                }
> +            }
> +
> +            /* fetch props for all children with one qom-list-getv call */
> +            test_getv(qts, child_paths);
> +        }
> +
> +        path_entry = QTAILQ_NEXT(path_entry, next);
> +    }
> +}


  parent reply	other threads:[~2025-07-08 22:16 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-08 17:24 [PATCH V3 0/3] fast qom tree get Steve Sistare
2025-07-08 17:24 ` [PATCH V3 1/3] qom: qom-list-getv Steve Sistare
2025-07-08 21:54   ` Philippe Mathieu-Daudé
2025-07-10  7:13     ` Philippe Mathieu-Daudé
2025-07-09  8:39   ` Markus Armbruster
2025-07-09 15:19     ` Steven Sistare
2025-07-08 17:24 ` [PATCH V3 2/3] python: use qom-list-getv Steve Sistare
2025-07-08 17:24 ` [PATCH V3 3/3] tests/qtest/qom-test: unit test for qom-list-getv Steve Sistare
2025-07-08 17:47   ` Fabiano Rosas
2025-07-08 22:02   ` Philippe Mathieu-Daudé [this message]
2025-07-09  6:23     ` Markus Armbruster
2025-07-09 15:17     ` Steven Sistare
2025-07-10  7:12       ` Philippe Mathieu-Daudé
2025-07-10  8:54       ` Markus Armbruster
2025-07-10 15:58         ` Steven Sistare

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=bdb92ceb-59d3-4e82-83f7-d4bde9b96583@linaro.org \
    --to=philmd@linaro.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=crosa@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=farosas@suse.de \
    --cc=jsnow@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=steven.sistare@oracle.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).