tests/check-qom-proplist.c | 59 +++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 16 deletions(-)
user-creatable types will now be forbidden from registering
instance properties, but check-qom-proplist reuse the same type
for testing user_creatable_add_opts() and for testing
class/instance property enumeration.
To address those conflicting requirements, add two subclasses of
TYPE_DUMMY: one that's user-creatable and another one that has
instance properties. Most test that set the "bv" property will
use the new TYPE_DUMMY_WITH_INSTANCE_PROPS type, but
test_dummy_createcmdl() will now TYPE_DUMMY_USER_CREATABLE.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
The patch
[RFC] qom: Lock properties of all TYPE_USER_CREATABLE types
will break check-qom-proplist, unless this patch is applied
first.
---
tests/check-qom-proplist.c | 59 +++++++++++++++++++++++++++-----------
1 file changed, 43 insertions(+), 16 deletions(-)
diff --git a/tests/check-qom-proplist.c b/tests/check-qom-proplist.c
index fba30c20b2..e9d0eec0c2 100644
--- a/tests/check-qom-proplist.c
+++ b/tests/check-qom-proplist.c
@@ -124,14 +124,6 @@ static char *dummy_get_sv(Object *obj,
}
-static void dummy_init(Object *obj)
-{
- object_property_add_bool(obj, "bv",
- dummy_get_bv,
- dummy_set_bv);
-}
-
-
static void dummy_class_init(ObjectClass *cls, void *data)
{
object_class_property_add_str(cls, "sv",
@@ -155,15 +147,48 @@ static void dummy_finalize(Object *obj)
g_free(dobj->sv);
}
-
static const TypeInfo dummy_info = {
.name = TYPE_DUMMY,
.parent = TYPE_OBJECT,
.instance_size = sizeof(DummyObject),
- .instance_init = dummy_init,
.instance_finalize = dummy_finalize,
.class_size = sizeof(DummyObjectClass),
.class_init = dummy_class_init,
+};
+
+static void dummy_with_instance_props_init(Object *obj)
+{
+ object_property_add_bool(obj, "bv",
+ dummy_get_bv,
+ dummy_set_bv);
+}
+
+/* Subclass of TYPE_DUMMY, but with a instance-level "bv" property */
+#define TYPE_DUMMY_WITH_INSTANCE_PROPS "qemu-dummy-with-intance-props"
+
+static const TypeInfo dummy_with_instance_props_info = {
+ .name = TYPE_DUMMY_WITH_INSTANCE_PROPS,
+ .parent = TYPE_DUMMY,
+ .instance_init = dummy_with_instance_props_init,
+};
+
+static void dummy_user_creatable_class_init(ObjectClass *cls, void *data)
+{
+ object_class_property_add_bool(cls, "bv",
+ dummy_get_bv,
+ dummy_set_bv);
+}
+
+/*
+ * Subclass of TYPE_DUMMY, but user-creatable and with a class-level
+ * "bv" property
+ */
+#define TYPE_DUMMY_USER_CREATABLE "qemu-dummy-user-creatable"
+
+static const TypeInfo dummy_user_creatable_info = {
+ .name = TYPE_DUMMY_USER_CREATABLE,
+ .parent = TYPE_DUMMY,
+ .class_init = dummy_user_creatable_class_init,
.interfaces = (InterfaceInfo[]) {
{ TYPE_USER_CREATABLE },
{ }
@@ -341,7 +366,7 @@ static void test_dummy_createv(void)
Error *err = NULL;
Object *parent = object_get_objects_root();
DummyObject *dobj = DUMMY_OBJECT(
- object_new_with_props(TYPE_DUMMY,
+ object_new_with_props(TYPE_DUMMY_WITH_INSTANCE_PROPS,
parent,
"dummy0",
&err,
@@ -370,7 +395,7 @@ static Object *new_helper(Error **errp,
Object *obj;
va_start(vargs, parent);
- obj = object_new_with_propv(TYPE_DUMMY,
+ obj = object_new_with_propv(TYPE_DUMMY_WITH_INSTANCE_PROPS,
parent,
"dummy0",
errp,
@@ -409,7 +434,7 @@ static void test_dummy_createcmdl(void)
QemuOpts *opts;
DummyObject *dobj;
Error *err = NULL;
- const char *params = TYPE_DUMMY \
+ const char *params = TYPE_DUMMY_USER_CREATABLE \
",id=dev0," \
"bv=yes,sv=Hiss hiss hiss,av=platypus";
@@ -449,7 +474,7 @@ static void test_dummy_badenum(void)
Error *err = NULL;
Object *parent = object_get_objects_root();
Object *dobj =
- object_new_with_props(TYPE_DUMMY,
+ object_new_with_props(TYPE_DUMMY_WITH_INSTANCE_PROPS,
parent,
"dummy0",
&err,
@@ -541,7 +566,7 @@ static void test_dummy_iterator(void)
"bv"}; /* instance property */
Object *parent = object_get_objects_root();
DummyObject *dobj = DUMMY_OBJECT(
- object_new_with_props(TYPE_DUMMY,
+ object_new_with_props(TYPE_DUMMY_WITH_INSTANCE_PROPS,
parent,
"dummy0",
&error_abort,
@@ -560,7 +585,7 @@ static void test_dummy_class_iterator(void)
{
const char *expected[] = { "type", "av", "sv", "u8v" };
ObjectPropertyIterator iter;
- ObjectClass *klass = object_class_by_name(TYPE_DUMMY);
+ ObjectClass *klass = object_class_by_name(TYPE_DUMMY_WITH_INSTANCE_PROPS);
object_class_property_iter_init(&iter, klass);
test_dummy_prop_iterator(&iter, expected, ARRAY_SIZE(expected));
@@ -626,6 +651,8 @@ int main(int argc, char **argv)
module_call_init(MODULE_INIT_QOM);
type_register_static(&dummy_info);
+ type_register_static(&dummy_with_instance_props_info);
+ type_register_static(&dummy_user_creatable_info);
type_register_static(&dummy_dev_info);
type_register_static(&dummy_bus_info);
type_register_static(&dummy_backend_info);
--
2.26.2
--
Eduardo
© 2016 - 2024 Red Hat, Inc.