|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v7 18/65] tests: update check-qom-proplist for QAPI-aware property registration
Migrate the dummy object's string and enum properties from the legacy
object_class_property_add_str/enum() helpers to the new QAPI-aware
object_class_property_add_qapi/qapi_enum() registration.
Add test cases verifying that the qapi_type metadata is correctly
populated on properties registered through the new API, and that it
remains NULL for properties using the old-style registration.
Signed-off-by: Markus Armbruster <armbru@xxxxxxxxxx>
Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx>
---
tests/unit/check-qom-proplist.c | 93 ++++++++++++++++++++++++++++++++++-------
1 file changed, 77 insertions(+), 16 deletions(-)
diff --git a/tests/unit/check-qom-proplist.c b/tests/unit/check-qom-proplist.c
index 89de92b7d91f..69155e720751 100644
--- a/tests/unit/check-qom-proplist.c
+++ b/tests/unit/check-qom-proplist.c
@@ -108,22 +108,21 @@ static int dummy_get_av(Object *obj,
}
-static void dummy_set_sv(Object *obj,
- const char *value,
- Error **errp)
+static void dummy_set_sv(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
DummyObject *dobj = DUMMY_OBJECT(obj);
- g_free(dobj->sv);
- dobj->sv = g_strdup(value);
+ g_clear_pointer(&dobj->sv, g_free);
+ visit_type_str(v, name, &dobj->sv, errp);
}
-static char *dummy_get_sv(Object *obj,
- Error **errp)
+static void dummy_get_sv(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
DummyObject *dobj = DUMMY_OBJECT(obj);
- return g_strdup(dobj->sv);
+ visit_type_str(v, name, &dobj->sv, errp);
}
@@ -135,16 +134,28 @@ static void dummy_init(Object *obj)
}
+static const QAPITypeInfo dummy_animal_qapi_type_info = {
+ .name = "DummyAnimal",
+ .masked_name = "DummyAnimalSchema",
+ .lookup = &dummy_animal_map,
+};
+
+static const QAPITypeInfo dummy_str_qapi_type_info = {
+ .name = "str",
+ .masked_name = "StrSchema",
+};
+
static void dummy_class_init(ObjectClass *cls, const void *data)
{
- object_class_property_add_str(cls, "sv",
- dummy_get_sv,
- dummy_set_sv);
- object_class_property_add_enum(cls, "av",
- "DummyAnimal",
- &dummy_animal_map,
- dummy_get_av,
- dummy_set_av);
+ object_class_property_add_qapi(cls, "sv", &dummy_str_qapi_type_info,
+ dummy_get_sv, dummy_set_sv,
+ NULL, NULL);
+ object_class_property_add_qapi_enum(cls, QAPI_ENUM_PROP(
+ .name = "av",
+ .qapi_type = &dummy_animal_qapi_type_info,
+ .get = dummy_get_av,
+ .set = dummy_set_av,
+ ));
}
@@ -703,6 +714,54 @@ static void test_qom_partial_path(void)
object_unparent(cont1);
}
+static void test_dummy_qapi_enum(void)
+{
+ ObjectProperty *prop;
+ Object *parent = object_get_objects_root();
+ DummyObject *dobj = DUMMY_OBJECT(
+ object_new_with_props(TYPE_DUMMY,
+ parent,
+ "dummy0",
+ &error_abort,
+ "av", "platypus",
+ NULL));
+
+ g_assert(dobj->av == DUMMY_PLATYPUS);
+
+ prop = object_property_find(OBJECT(dobj), "av");
+ g_assert(prop);
+ g_assert(prop->qapi_type == &dummy_animal_qapi_type_info);
+ g_assert_cmpstr(prop->qapi_type->name, ==, "DummyAnimal");
+ g_assert_cmpstr(prop->qapi_type->masked_name, ==, "DummyAnimalSchema");
+ g_assert(prop->qapi_type->lookup == &dummy_animal_map);
+
+ object_unparent(OBJECT(dobj));
+}
+
+static void test_dummy_qapi_prop(void)
+{
+ ObjectProperty *prop;
+ Object *parent = object_get_objects_root();
+ DummyObject *dobj = DUMMY_OBJECT(
+ object_new_with_props(TYPE_DUMMY,
+ parent,
+ "dummy0",
+ &error_abort,
+ "sv", "hello",
+ NULL));
+
+ g_assert_cmpstr(dobj->sv, ==, "hello");
+
+ prop = object_property_find(OBJECT(dobj), "sv");
+ g_assert(prop);
+ g_assert(prop->qapi_type == &dummy_str_qapi_type_info);
+ g_assert_cmpstr(prop->qapi_type->name, ==, "str");
+ g_assert_cmpstr(prop->qapi_type->masked_name, ==, "StrSchema");
+ g_assert(prop->qapi_type->lookup == NULL);
+
+ object_unparent(OBJECT(dobj));
+}
+
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
@@ -727,6 +786,8 @@ int main(int argc, char **argv)
g_test_add_func("/qom/proplist/iterator", test_dummy_iterator);
g_test_add_func("/qom/proplist/class_iterator", test_dummy_class_iterator);
g_test_add_func("/qom/proplist/delchild", test_dummy_delchild);
+ g_test_add_func("/qom/proplist/qapi_enum", test_dummy_qapi_enum);
+ g_test_add_func("/qom/proplist/qapi_prop", test_dummy_qapi_prop);
g_test_add_func("/qom/resolve/partial", test_qom_partial_path);
return g_test_run();
--
2.56.0.116.g6de20f6092dc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |