Hi Juuso,
On 2026-08-12T09:48:39, Juuso Rinta <[email protected]> wrote:
> test: wdt: add a test for max_timeout_ms
>
> Add a DM test for the case where wdt_start() is called with
> a timeout_ms value greater than the (emulated) hardware-supported
> limit.
>
> Add console-print asserts for both the clamped and unclamped cases,
> as well as for the per-device uclass-plat data max_timeout_ms field.
>
> Add matching tests for the GPIO driver, which does not set the
> max_timeout_ms value.
>
> Signed-off-by: Juuso Rinta <[email protected]>
>
> test/dm/wdt.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 47 insertions(+), 2 deletions(-)
> diff --git a/test/dm/wdt.c b/test/dm/wdt.c
> @@ -16,34 +17,68 @@
> +static void format_wdt_servicing_str(char *str, size_t len, struct udevice
> *dev)
> +{
> + if (IS_ENABLED(CONFIG_WATCHDOG)) {
> + u32 reset_period = dev_read_u32_default(dev, "hw_margin_ms",
> + 4000) / 4;
> +
> + snprintf(str, len, " with servicing every %ums ",
> + reset_period);
> + } else {
> + snprintf(str, len, " without servicing ");
> + }
> +}
This helper reimplements internal wdt-uclass details (the format
string, the "every %ldms" text, and the hw_margin_ms / 4 calculation
from wdt_pre_probe()). If any of that drifts, the tests silently rot
rather than catching a real change. Please drop the string
reconstruction and either match against a fixed literal (choose
test-side values that make the expected text deterministic) or split
the assertion into a handful of ut_assert_nextlinen() / substring
checks. Reproducing driver-private logic in the test isn't the right
layer.
Also, wdt-uclass prints "every %ldms" (long), not %ums, and when
CONFIG_WATCHDOG is not enabled the driver's format string produces two
spaces before the '(' (because svc_str is empty inside " %s ("), while
this helper emits only one trailing space. Sandbox does not select
CONFIG_WATCHDOG, so I suspect the ut_assert_nextline() calls below
will not match today.
> diff --git a/test/dm/wdt.c b/test/dm/wdt.c
> @@ -16,34 +17,68 @@
> + /* Clamped timeout path */
> + console_record_reset();
> + ut_assertok(wdt_start(dev, SANDBOX_WDT_MAX_TIMEOUT_MS + 1000, 0));
> + ut_asserteq(SANDBOX_WDT_MAX_TIMEOUT_MS, state->wdt.counter);
> + ut_assert_nextline("WDT: Started %s%s(%ds timeout, requested %ds)",
> + dev->name, svc, SANDBOX_WDT_MAX_TIMEOUT_MS / 1000,
> + (SANDBOX_WDT_MAX_TIMEOUT_MS + 1000) / 1000);
> + ut_assert_console_end();
The clamped case only exercises timeout_ms > max_timeout_ms. The
uclass code has a second branch, the sub-second difference guard, that
suppresses req_str when the whole-second value would be unchanged. How
about a case where timeout_ms is greater than max but rounds to the
same whole second (e.g. max + 100ms), to lock down that behaviour?
Regards,
Simon