rtc: test: Split rtc unit test into slow and normal speed test
authorGuenter Roeck <linux@roeck-us.net>
Wed, 13 Mar 2024 17:42:21 +0000 (10:42 -0700)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Fri, 29 Mar 2024 14:58:45 +0000 (15:58 +0100)
On slow systems, the rtc unit test may result in soft lockups and/or
generate messages such as

 # rtc_time64_to_tm_test_date_range: Test should be marked slow (runtime: 34.253230015s)
 # rtc_time64_to_tm_test_date_range: pass:1 fail:0 skip:0 total:1

The test covers a date range of 160,000 years, resulting in the long
runtime.

Unit tests running for more than 1 second are supposed to be marked as
slow. Just marking the test as slow would prevent it from running when
slow tests are disabled, which would not be desirable. At the same time,
the current test range of 160,000 years seems to be of limited value.

Split the test into two parts, one covering a range of 1,000 years and
the other covering the current range of 160,000 years. Mark the 160,000
year test as slow to be able to separate it from the faster test.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20240313174221.1999654-1-linux@roeck-us.net
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/lib_test.c

index 225c859d6da550a8cb44c3d2446f3d433c9716e3..3893a202e9ea192906102cad378e08bdd7c3566f 100644 (file)
@@ -27,17 +27,17 @@ static void advance_date(int *year, int *month, int *mday, int *yday)
 }
 
 /*
- * Checks every day in a 160000 years interval starting on 1970-01-01
+ * Check every day in specified number of years interval starting on 1970-01-01
  * against the expected result.
  */
-static void rtc_time64_to_tm_test_date_range(struct kunit *test)
+static void rtc_time64_to_tm_test_date_range(struct kunit *test, int years)
 {
        /*
-        * 160000 years = (160000 / 400) * 400 years
-        *              = (160000 / 400) * 146097 days
-        *              = (160000 / 400) * 146097 * 86400 seconds
+        * years        = (years / 400) * 400 years
+        *              = (years / 400) * 146097 days
+        *              = (years / 400) * 146097 * 86400 seconds
         */
-       time64_t total_secs = ((time64_t) 160000) / 400 * 146097 * 86400;
+       time64_t total_secs = ((time64_t)years) / 400 * 146097 * 86400;
 
        int year        = 1970;
        int month       = 1;
@@ -66,8 +66,27 @@ static void rtc_time64_to_tm_test_date_range(struct kunit *test)
        }
 }
 
+/*
+ * Checks every day in a 160000 years interval starting on 1970-01-01
+ * against the expected result.
+ */
+static void rtc_time64_to_tm_test_date_range_160000(struct kunit *test)
+{
+       rtc_time64_to_tm_test_date_range(test, 160000);
+}
+
+/*
+ * Checks every day in a 1000 years interval starting on 1970-01-01
+ * against the expected result.
+ */
+static void rtc_time64_to_tm_test_date_range_1000(struct kunit *test)
+{
+       rtc_time64_to_tm_test_date_range(test, 1000);
+}
+
 static struct kunit_case rtc_lib_test_cases[] = {
-       KUNIT_CASE(rtc_time64_to_tm_test_date_range),
+       KUNIT_CASE(rtc_time64_to_tm_test_date_range_1000),
+       KUNIT_CASE_SLOW(rtc_time64_to_tm_test_date_range_160000),
        {}
 };