From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, armbru@redhat.com
Subject: [PATCH 1/3] tests: convert check-qom-proplist to keyval
Date: Thu, 11 Mar 2021 12:24:57 -0500 [thread overview]
Message-ID: <20210311172459.990281-2-pbonzini@redhat.com> (raw)
In-Reply-To: <20210311172459.990281-1-pbonzini@redhat.com>
The command-line creation test is using QemuOpts. Switch it to keyval,
since the emulator has some special needs and thus the last user of
user_creatable_add_opts will go away with the next patch.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/check-qom-proplist.c | 74 ++++++++++++++++++++++++++------------
1 file changed, 52 insertions(+), 22 deletions(-)
diff --git a/tests/check-qom-proplist.c b/tests/check-qom-proplist.c
index 1b76581980..73472944a0 100644
--- a/tests/check-qom-proplist.c
+++ b/tests/check-qom-proplist.c
@@ -21,6 +21,9 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qobject-input-visitor.h"
+#include "qapi/qmp/qdict.h"
+#include "qapi/qmp/qobject.h"
#include "qom/object.h"
#include "qemu/module.h"
#include "qemu/option.h"
@@ -398,44 +401,71 @@ static void test_dummy_createlist(void)
object_unparent(OBJECT(dobj));
}
+static bool test_create_obj(QDict *qdict, Error **errp)
+{
+ Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(qdict));
+ Object *obj = user_creatable_add_type(TYPE_DUMMY, "dev0", qdict, v, errp);
+
+ visit_free(v);
+ object_unref(obj);
+ return !!obj;
+}
+
static void test_dummy_createcmdl(void)
{
- QemuOpts *opts;
+ QDict *qdict;
DummyObject *dobj;
Error *err = NULL;
- const char *params = TYPE_DUMMY \
- ",id=dev0," \
- "bv=yes,sv=Hiss hiss hiss,av=platypus";
+ bool help;
+ const char *params = "bv=yes,sv=Hiss hiss hiss,av=platypus";
+ /* Needed for user_creatable_del. */
qemu_add_opts(&qemu_object_opts);
- opts = qemu_opts_parse(&qemu_object_opts, params, true, &err);
+
+ qdict = keyval_parse(params, "qom-type", &help, &err);
g_assert(err == NULL);
- g_assert(opts);
+ g_assert(qdict);
+ g_assert(!help);
- dobj = DUMMY_OBJECT(user_creatable_add_opts(opts, &err));
+ g_assert(test_create_obj(qdict, &err));
g_assert(err == NULL);
+ qobject_unref(qdict);
+
+ dobj = DUMMY_OBJECT(object_resolve_path_component(object_get_objects_root(),
+ "dev0"));
g_assert(dobj);
g_assert_cmpstr(dobj->sv, ==, "Hiss hiss hiss");
g_assert(dobj->bv == true);
g_assert(dobj->av == DUMMY_PLATYPUS);
+ qdict = keyval_parse(params, "qom-type", &help, &err);
+ g_assert(!test_create_obj(qdict, &err));
+ g_assert(err);
+ g_assert(object_resolve_path_component(object_get_objects_root(), "dev0")
+ == OBJECT(dobj));
+ qobject_unref(qdict);
+ error_free(err);
+ err = NULL;
+
+ qdict = keyval_parse(params, "qom-type", &help, &err);
user_creatable_del("dev0", &error_abort);
+ g_assert(object_resolve_path_component(object_get_objects_root(), "dev0")
+ == NULL);
- object_unref(OBJECT(dobj));
-
- /*
- * cmdline-parsing via qemu_opts_parse() results in a QemuOpts entry
- * corresponding to the Object's ID to be added to the QemuOptsList
- * for objects. To avoid having this entry conflict with future
- * Objects using the same ID (which can happen in cases where
- * qemu_opts_parse() is used to parse the object params, such as
- * with hmp_object_add() at the time of this comment), we need to
- * check for this in user_creatable_del() and remove the QemuOpts if
- * it is present.
- *
- * The below check ensures this works as expected.
- */
- g_assert_null(qemu_opts_find(&qemu_object_opts, "dev0"));
+ g_assert(test_create_obj(qdict, &err));
+ g_assert(err == NULL);
+ qobject_unref(qdict);
+
+ dobj = DUMMY_OBJECT(object_resolve_path_component(object_get_objects_root(),
+ "dev0"));
+ g_assert(dobj);
+ g_assert_cmpstr(dobj->sv, ==, "Hiss hiss hiss");
+ g_assert(dobj->bv == true);
+ g_assert(dobj->av == DUMMY_PLATYPUS);
+ g_assert(object_resolve_path_component(object_get_objects_root(), "dev0")
+ == OBJECT(dobj));
+
+ object_unparent(OBJECT(dobj));
}
static void test_dummy_badenum(void)
--
2.26.2
next prev parent reply other threads:[~2021-03-11 17:29 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-11 17:24 [PATCH 0/3] vl: QAPIfy -object Paolo Bonzini
2021-03-11 17:24 ` Paolo Bonzini [this message]
2021-03-11 18:29 ` [PATCH 1/3] tests: convert check-qom-proplist to keyval Eric Blake
2021-03-12 10:21 ` Kevin Wolf
2021-03-11 17:24 ` [PATCH 2/3] qom: move user_creatable_add_opts logic to vl.c and QAPIfy it Paolo Bonzini
2021-03-11 18:37 ` Eric Blake
2021-03-12 10:18 ` Kevin Wolf
2021-03-13 9:35 ` Markus Armbruster
2021-03-13 9:40 ` Paolo Bonzini
2021-03-13 12:32 ` Markus Armbruster
2021-03-13 9:57 ` Markus Armbruster
2021-03-13 10:05 ` Paolo Bonzini
2021-03-11 17:24 ` [PATCH 3/3] vl: allow passing JSON to -object Paolo Bonzini
2021-03-11 18:38 ` Eric Blake
2021-03-12 10:21 ` Kevin Wolf
2021-03-13 9:41 ` Markus Armbruster
2021-03-11 17:39 ` [PATCH 0/3] vl: QAPIfy -object no-reply
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=20210311172459.990281-2-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@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 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).