static int dummy_get_av(Object *obj, Error **errp) { DummyObject *dobj = DUMMY_OBJECT(obj); return dobj->av; }
static bool dummy_get_bv(Object *obj, Error **errp) { DummyObject *dobj = DUMMY_OBJECT(obj); return dobj->bv; }
static char *dummy_get_sv(Object *obj, Error **errp) { DummyObject *dobj = DUMMY_OBJECT(obj); return g_strdup(dobj->sv); }
static void dummy_set_av(Object *obj, int value, Error **errp) { DummyObject *dobj = DUMMY_OBJECT(obj); dobj->av = value; }
static void dummy_set_bv(Object *obj, bool value, Error **errp) { DummyObject *dobj = DUMMY_OBJECT(obj); dobj->bv = value; }
static void dummy_set_sv(Object *obj, const char *value, Error **errp) { DummyObject *dobj = DUMMY_OBJECT(obj); g_free(dobj->sv); dobj->sv = g_strdup(value); }
static void test_dummy_iterator(void) { Object *parent = object_get_objects_root(); DummyObject *dobj = DUMMY_OBJECT( object_new_with_props(TYPE_DUMMY, parent, "dummy0", &error_abort, "bv", "yes", "sv", "Hiss hiss hiss", "av", "platypus", NULL)); ObjectPropertyIterator iter; object_property_iter_init(&iter, OBJECT(dobj)); test_dummy_prop_iterator(&iter); object_unparent(OBJECT(dobj)); }
static void test_dummy_getenum(void) { Error *err = NULL; int val; Object *parent = object_get_objects_root(); DummyObject *dobj = DUMMY_OBJECT( object_new_with_props(TYPE_DUMMY, parent, "dummy0", &err, "av", "platypus", NULL)); g_assert(err == NULL); g_assert(dobj->av == DUMMY_PLATYPUS); val = object_property_get_enum(OBJECT(dobj), "av", "DummyAnimal", &err); g_assert(err == NULL); g_assert(val == DUMMY_PLATYPUS); /* A bad enum type name */ val = object_property_get_enum(OBJECT(dobj), "av", "BadAnimal", &err); g_assert(err != NULL); error_free(err); err = NULL; /* A non-enum property name */ val = object_property_get_enum(OBJECT(dobj), "iv", "DummyAnimal", &err); g_assert(err != NULL); error_free(err); object_unparent(OBJECT(dobj)); }
static void test_dummy_createcmdl(void) { QemuOpts *opts; DummyObject *dobj; Error *err = NULL; const char *params = TYPE_DUMMY \ ",id=dev0," \ "bv=yes,sv=Hiss hiss hiss,av=platypus"; qemu_add_opts(&qemu_object_opts); opts = qemu_opts_parse(&qemu_object_opts, params, true, &err); g_assert(err == NULL); g_assert(opts); dobj = DUMMY_OBJECT(user_creatable_add_opts(opts, &err)); g_assert(err == NULL); g_assert(dobj); g_assert_cmpstr(dobj->sv, ==, "Hiss hiss hiss"); g_assert(dobj->bv == true); g_assert(dobj->av == DUMMY_PLATYPUS); user_creatable_del("dev0", &err); g_assert(err == NULL); error_free(err); 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")); }
static void test_dummy_iterator(void) { Object *parent = object_get_objects_root(); DummyObject *dobj = DUMMY_OBJECT( object_new_with_props(TYPE_DUMMY, parent, "dummy0", &error_abort, "bv", "yes", "sv", "Hiss hiss hiss", "av", "platypus", NULL)); ObjectProperty *prop; ObjectPropertyIterator *iter; bool seenbv = false, seensv = false, seenav = false, seentype; iter = object_property_iter_init(OBJECT(dobj)); while ((prop = object_property_iter_next(iter))) { if (g_str_equal(prop->name, "bv")) { seenbv = true; } else if (g_str_equal(prop->name, "sv")) { seensv = true; } else if (g_str_equal(prop->name, "av")) { seenav = true; } else if (g_str_equal(prop->name, "type")) { /* This prop comes from the base Object class */ seentype = true; } else { g_printerr("Found prop '%s'\n", prop->name); g_assert_not_reached(); } } object_property_iter_free(iter); g_assert(seenbv); g_assert(seenav); g_assert(seensv); g_assert(seentype); object_unparent(OBJECT(dobj)); }
static void test_dummy_createlist(void) { Error *err = NULL; Object *parent = object_get_objects_root(); DummyObject *dobj = DUMMY_OBJECT( new_helper(&err, parent, "bv", "yes", "sv", "Hiss hiss hiss", "av", "platypus", NULL)); g_assert(err == NULL); 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(parent, "dummy0") == OBJECT(dobj)); object_unparent(OBJECT(dobj)); }
static void dummy_finalize(Object *obj) { DummyObject *dobj = DUMMY_OBJECT(obj); g_free(dobj->sv); }