time-util: extract parse_calendar_date() from sysupdate
Move the YYYY-MM-DD date parsing and validation logic from sysupdate-resource.c into a shared parse_calendar_date() function in time-util, so it can be reused by other subsystems.
This commit is contained in:
@@ -1281,4 +1281,30 @@ static int intro(void) {
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
TEST(parse_calendar_date) {
|
||||
usec_t usec;
|
||||
|
||||
/* Valid dates */
|
||||
ASSERT_OK(parse_calendar_date("2000-01-01", &usec));
|
||||
ASSERT_OK(parse_calendar_date("1970-01-01", &usec));
|
||||
ASSERT_EQ(usec, 0u); /* epoch */
|
||||
ASSERT_OK(parse_calendar_date("2000-02-29", &usec)); /* leap year */
|
||||
|
||||
/* NULL ret is allowed (validation only) */
|
||||
ASSERT_OK(parse_calendar_date("2000-06-15", NULL));
|
||||
|
||||
/* Non-normalized dates */
|
||||
ASSERT_ERROR(parse_calendar_date("2023-02-29", &usec), EINVAL); /* not a leap year */
|
||||
ASSERT_ERROR(parse_calendar_date("2023-04-31", &usec), EINVAL); /* April has 30 days */
|
||||
ASSERT_ERROR(parse_calendar_date("2023-13-01", &usec), EINVAL); /* month 13 */
|
||||
ASSERT_ERROR(parse_calendar_date("2023-00-01", &usec), EINVAL); /* month 0 */
|
||||
|
||||
/* Malformed input */
|
||||
ASSERT_ERROR(parse_calendar_date("", &usec), EINVAL);
|
||||
ASSERT_ERROR(parse_calendar_date("not-a-date", &usec), EINVAL);
|
||||
ASSERT_ERROR(parse_calendar_date("2023-06-15T00:00:00", &usec), EINVAL); /* trailing time */
|
||||
ASSERT_ERROR(parse_calendar_date("2023/06/15", &usec), EINVAL); /* wrong separator */
|
||||
ASSERT_ERROR(parse_calendar_date("06-15-2023", &usec), EINVAL); /* wrong order */
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
||||
|
||||
Reference in New Issue
Block a user