On Wed, Jul 03, 2024 at 02:22:27PM GMT, Carlos Eduardo Gallo Filho wrote: > Add three KUnit test cases for the drm_framebuffer_init function: > > 1. Test if expected values are being set after drm_framebuffer_init() call. > 2. Try to init a framebuffer without setting its format. > 3. Try calling drm_framebuffer_init() with mismatch of the drm_device passed > at the first argument and the one pointed by fb->dev. > > Signed-off-by: Carlos Eduardo Gallo Filho <gcarlos@xxxxxxxxxxx> > --- > v2: > - Reorder kunit cases alphabetically. > - Let fb1.dev unset instead of set it to wrong_drm to test mismatched > drm_device passed as drm_framebuffer_init() argument. > - Clean the framebuffer object. > v3: > - Split into three tests. > - Add documentation. > - Stop testing lookup here. > --- > drivers/gpu/drm/tests/drm_framebuffer_test.c | 68 ++++++++++++++++++++ > 1 file changed, 68 insertions(+) > > diff --git a/drivers/gpu/drm/tests/drm_framebuffer_test.c b/drivers/gpu/drm/tests/drm_framebuffer_test.c > index 54829e832c5e..73a1a3a3987e 100644 > --- a/drivers/gpu/drm/tests/drm_framebuffer_test.c > +++ b/drivers/gpu/drm/tests/drm_framebuffer_test.c > @@ -569,10 +569,78 @@ static void drm_test_framebuffer_lookup_inexistent(struct kunit *test) > KUNIT_EXPECT_NULL(test, fb); > } > > +/* Test if drm_framebuffer_init initializes the framebuffer with expected values */ What are those expected values? > +static void drm_test_framebuffer_init(struct kunit *test) > +{ > + struct drm_framebuffer_test_priv *priv = test->priv; > + struct drm_device *dev = &priv->dev; > + struct drm_format_info format = { }; > + struct drm_framebuffer fb1 = { .dev = dev, .format = &format }; > + struct drm_framebuffer_funcs funcs = { }; > + int ret; > + > + ret = drm_framebuffer_init(dev, &fb1, &funcs); > + KUNIT_ASSERT_EQ(test, ret, 0); > + > + /* Check if fb->funcs is actually set to the drm_framebuffer_funcs passed on */ > + KUNIT_EXPECT_PTR_EQ(test, fb1.funcs, &funcs); > + > + /* The fb->comm must be set to the current running process */ > + KUNIT_EXPECT_STREQ(test, fb1.comm, current->comm); > + > + /* The fb->base must be successfully initialized */ > + KUNIT_EXPECT_NE(test, fb1.base.id, 0); > + KUNIT_EXPECT_EQ(test, fb1.base.type, DRM_MODE_OBJECT_FB); > + KUNIT_EXPECT_EQ(test, kref_read(&fb1.base.refcount), 1); > + KUNIT_EXPECT_PTR_EQ(test, fb1.base.free_cb, &drm_framebuffer_free); > + > + /* There must be just that one fb initialized */ > + KUNIT_EXPECT_EQ(test, dev->mode_config.num_fb, 1); > + KUNIT_EXPECT_PTR_EQ(test, dev->mode_config.fb_list.prev, &fb1.head); > + KUNIT_EXPECT_PTR_EQ(test, dev->mode_config.fb_list.next, &fb1.head); > + > + drm_framebuffer_cleanup(&fb1); > +} > + > +/* Try to init a framebuffer without setting its format */ > +static void drm_test_framebuffer_init_bad_format(struct kunit *test) > +{ > + struct drm_framebuffer_test_priv *priv = test->priv; > + struct drm_device *dev = &priv->dev; > + struct drm_framebuffer fb1 = { .dev = dev, .format = NULL }; > + struct drm_framebuffer_funcs funcs = { }; > + int ret; > + > + /* Fails if fb.format isn't set */ > + ret = drm_framebuffer_init(dev, &fb1, &funcs); > + KUNIT_EXPECT_EQ(test, ret, -EINVAL); > +} > + > +/* > + * Test calling drm_framebuffer_init() passing a framebuffer linked to a > + * different drm_device parent from the one passed on the first argument. What would be the expected behaviour here? > + */ > +static void drm_test_framebuffer_init_dev_mismatch(struct kunit *test) > +{ > + struct drm_framebuffer_test_priv *priv = test->priv; > + struct drm_device *dev = &priv->dev; > + struct drm_format_info format = { }; > + struct drm_framebuffer fb1 = { .dev = NULL, .format = &format }; You're not really testing what you claim you test here, since dev is an invalid pointer. You would need a different yet valid device here. Maxime
Attachment:
signature.asc
Description: PGP signature