[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