Re: [PATCH v3 8/9] drm/tests: Add test for drm_framebuffer_init()

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

 



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


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux