qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC 3/3 v2] qdev: set globals on post_init() function


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [RFC 3/3 v2] qdev: set globals on post_init() function
Date: Fri, 12 Jul 2013 11:57:32 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Thu, Jul 11, 2013 at 08:48:44AM +0200, Igor Mammedov wrote:
[...]
> >  #define TYPE_STATIC_PROPS "static_prop_type"
> > @@ -80,7 +82,7 @@ static void test_static_prop(void)
> >  static void test_static_globalprop(void)
> >  {
> >      MyType *mt;
> > -    GlobalProperty props[] = {
> > +    static GlobalProperty props[] = {
> >          {TYPE_STATIC_PROPS, "prop1", "200"},
> >          {}
> >      };
> hunk belongs to the 1st patch?

Yes, thanks for noticing.


> 
> > @@ -93,15 +95,82 @@ static void test_static_globalprop(void)
> >      g_assert_cmpuint(mt->prop2, ==, PROP_DEFAULT);
> >  }
> >  
> > +#define TYPE_DYNAMIC_PROPS "dynamic_prop_type"
> > +#define DYNAMIC_TYPE(obj) \
> > +     OBJECT_CHECK(MyType, (obj), TYPE_DYNAMIC_PROPS)
> > +
> > +static void prop1_acessor(Object *obj,
> > +                          struct Visitor *v,
> > +                          void *opaque,
> > +                          const char *name,
> > +                          struct Error **errp)
> > +{
> > +    MyType *mt = DYNAMIC_TYPE(obj);
> > +    visit_type_uint32(v, &mt->prop1, name, errp);
> > +}
> > +
> > +static void prop2_acessor(Object *obj,
> > +                          struct Visitor *v,
> > +                          void *opaque,
> > +                          const char *name,
> > +                          struct Error **errp)
> > +{
> > +    MyType *mt = DYNAMIC_TYPE(obj);
> > +    visit_type_uint32(v, &mt->prop2, name, errp);
> > +}
> > +
> > +static void dynamic_instance_init(Object *obj)
> > +{
> > +    object_property_add(obj, "prop1", "uint32", prop1_acessor, 
> > prop1_acessor,
> > +                        NULL, NULL, NULL);
> > +    object_property_add(obj, "prop2", "uint32", prop2_acessor, 
> > prop2_acessor,
> > +                        NULL, NULL, NULL);
> > +}
> > +
> > +static void dynamic_class_init(ObjectClass *klass, void *data)
> > +{
> > +    DeviceClass *dc = DEVICE_CLASS(klass);
> > +    dc->init = mytype_init;
> > +}
> > +
> > +
> > +static TypeInfo dynamic_prop_type = {
> > +    .name = TYPE_DYNAMIC_PROPS,
> > +    .parent = TYPE_DEVICE,
> > +    .instance_size = sizeof(MyType),
> > +    .instance_init = dynamic_instance_init,
> > +    .class_init = dynamic_class_init,
> > +};
> > +
> > +/* Test setting of static property using global properties */
> > +static void test_dynamic_globalprop(void)
> > +{
> > +    MyType *mt;
> > +    static GlobalProperty props[] = {
> > +        {TYPE_DYNAMIC_PROPS, "prop1", "101"},
> > +        {TYPE_DYNAMIC_PROPS, "prop2", "102"},
> > +        {}
> > +    };
> this list cloud be the same for static and dynamic tests, no need to duplicate
> 
> and perhaps one property is enough, like it's done for static one?

I don't know. I like the fact that both test cases are exercising the
property-setting API in different ways and are likely to catch different
types of bugs.


> 
> 
> > +    qdev_prop_register_global_list(props);
> > +
> > +    mt = DYNAMIC_TYPE(object_new(TYPE_DYNAMIC_PROPS));
> > +    qdev_init_nofail(DEVICE(mt));
> > +
> > +    g_assert_cmpuint(mt->prop1, ==, 101);
> > +    g_assert_cmpuint(mt->prop2, ==, 102);
> > +}
> > +
> >  int main(int argc, char **argv)
> >  {
> >      module_call_init(MODULE_INIT_QOM);
> >      type_register_static(&static_prop_type);
> > +    type_register_static(&dynamic_prop_type);
> >  
> >      g_test_init(&argc, &argv, NULL);
> >  
> >      g_test_add_func("/qdev/properties/static/default", test_static_prop);
> >      g_test_add_func("/qdev/properties/static/global", 
> > test_static_globalprop);
> > +    g_test_add_func("/qdev/properties/dynamic/global", 
> > test_dynamic_globalprop);
> >  
> >      g_test_run();
> >  
> 

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]