[U-Boot] [PATCH V4 10/10] dm: test: Add tests for get/find uclass's device by name

Simon Glass sjg at chromium.org
Sun Apr 19 15:25:21 CEST 2015


Hi Przemyslaw,

On 15 April 2015 at 05:07, Przemyslaw Marczak <p.marczak at samsung.com> wrote:
> This commit introduces simple tests for functions:
> - uclass_find_device_by_name()
> - uclass_get_device_by_name()
>
> Tests added by this commit:
> - Test: dm_test_uclass_devices_find_by_name: for uclass id: UCLASS_TEST_FDT
>  * get uclass's devices by uclass_find_first/next_device() each as 'testdev',
>  * for each returned device, call: uclass_find_device_by_name(),
>    with previously returned device's name as an argument ('testdev->name').
>  * for the found device ('founddev') check if:
>    * founddev != NULL
>    * testdev == founddev
>    * testdev->name == founddev->name (by strcmp)
>
> - Test: dm_test_uclass_devices_get_by_name: for uclass id: UCLASS_TEST_FDT
>  * get uclass's devices by uclass_get_first/next_device() each as 'testdev',
>  * for each returned device, call: uclass_get_device_by_name(),
>    with previously returned device's name as an argument ('testdev->name').
>  * for the found device ('founddev') check if:
>    * founddev != NULL
>    * founddev is active
>    * testdev == founddev
>    * testdev->name == founddev->name (by strcmp)
>
> Signed-off-by: Przemyslaw Marczak <p.marczak at samsung.com>
> Cc: Simon Glass <sjg at chromium.org>
> ---
> Changes V4:
> -new commit
> ---
>  test/dm/core.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 81 insertions(+)
>
> diff --git a/test/dm/core.c b/test/dm/core.c
> index 3a8dd1d..b678511 100644
> --- a/test/dm/core.c
> +++ b/test/dm/core.c
> @@ -674,6 +674,43 @@ static int dm_test_uclass_devices_find(struct dm_test_state *dms)
>  }
>  DM_TEST(dm_test_uclass_devices_find, DM_TESTF_SCAN_PDATA);
>
> +static int dm_test_uclass_devices_find_by_name(struct dm_test_state *dms)
> +{
> +       struct udevice *founddev;
> +       struct udevice *testdev;
> +       int foundret, ret;
> +
> +       /**

/*

(It is not a docbook comment for a function, etc.)

> +        * For each test device found in fdt like: "a-test", "b-test", etc.,
> +        * use its name and try to find it by uclass_find_device_by_name().
> +        * Then, on success check if:
> +        * - current 'testdev' name is equal to the returned 'founddev' name
> +        * - current 'testdev' pointer is equal to the returned 'founddev'
> +        *
> +        * We assume that, each uclass's device name is unique, so if not, then
> +        * this will fail on checking condition: testdev == founddev, since the
> +        * uclass_find_device_by_name(), returns the first device by given name.
> +       */
> +       for (ret = uclass_find_first_device(UCLASS_TEST_FDT, &testdev);
> +            testdev;
> +            ret = uclass_find_next_device(&testdev)) {
> +               ut_assert(!ret);
> +               ut_assert(testdev);
> +
> +               foundret = uclass_find_device_by_name(UCLASS_TEST_FDT,
> +                                                     testdev->name,
> +                                                     &founddev);
> +
> +               ut_assert(!foundret);
> +               ut_assert(testdev);
> +               ut_asserteq_str(testdev->name, founddev->name);
> +               ut_asserteq_ptr(testdev, founddev);
> +       }
> +
> +       return 0;
> +}
> +DM_TEST(dm_test_uclass_devices_find_by_name, DM_TESTF_SCAN_FDT);
> +
>  static int dm_test_uclass_devices_get(struct dm_test_state *dms)
>  {
>         struct udevice *dev;
> @@ -691,6 +728,50 @@ static int dm_test_uclass_devices_get(struct dm_test_state *dms)
>  }
>  DM_TEST(dm_test_uclass_devices_get, DM_TESTF_SCAN_PDATA);
>
> +static int dm_test_uclass_devices_get_by_name(struct dm_test_state *dms)
> +{
> +       struct udevice *founddev;
> +       struct udevice *testdev;
> +       int ret, foundret;
> +
> +       /**

/*

> +        * For each test device found in fdt like: "a-test", "b-test", etc.,
> +        * use its name and try to get it by uclass_get_device_by_name().
> +        * On success check if:
> +        * - returned founddev' is active
> +        * - current 'testdev' name is equal to the returned 'founddev' name
> +        * - current 'testdev' pointer is equal to the returned 'founddev'
> +        *
> +        * We asserts that the 'testdev' is active on each loop entry, so we
> +        * could be sure that the 'founddev' is activated too, but for sure
> +        * we check it again.
> +        *
> +        * We assume that, each uclass's device name is unique, so if not, then
> +        * this will fail on checking condition: testdev == founddev, since the
> +        * uclass_get_device_by_name(), returns the first device by given name.
> +       */
> +       for (ret = uclass_first_device(UCLASS_TEST_FDT, &testdev);
> +            testdev;
> +            ret = uclass_next_device(&testdev)) {
> +               ut_assert(!ret);
> +               ut_assert(testdev);
> +               ut_assert(device_active(testdev));
> +
> +               foundret = uclass_get_device_by_name(UCLASS_TEST_FDT,
> +                                                   testdev->name,
> +                                                   &founddev);
> +
> +               ut_assert(!foundret);

nit: ut_assertok(foundret);

> +               ut_assert(founddev);
> +               ut_assert(device_active(founddev));
> +               ut_asserteq_str(testdev->name, founddev->name);
> +               ut_asserteq_ptr(testdev, founddev);
> +       }
> +
> +       return 0;
> +}
> +DM_TEST(dm_test_uclass_devices_get_by_name, DM_TESTF_SCAN_FDT);
> +
>  static int dm_test_device_get_uclass_id(struct dm_test_state *dms)
>  {
>         struct udevice *dev;
> --
> 1.9.1
>

If you like I can tweak these when applying. I need to wait until the
driver model pull request is accepted before applying anything else.

Regards,
Simon


More information about the U-Boot mailing list