diff --git a/README.adoc b/README.adoc index b785ac6..f65fb24 100644 --- a/README.adoc +++ b/README.adoc @@ -31,8 +31,13 @@ url = "tcp://app.example.com:12345" check_type = "Tcp" ---- -The value for `interval` can be set by using plain seconds or using units of `h`, `m` and `s`. Unparseable values will -default to 60 seconds. +The value for `interval` can be set by using plain seconds or using units. Accepted units: + +* h, hour, hours +* m, min, mins, minutes, minutes +* s, sec, secs, second, seconds + +Unparseable values will default to 60 seconds. ---- # Update interval using seconds as number. diff --git a/src/config.rs b/src/config.rs index 887235c..e84219e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -107,9 +107,9 @@ where fn parse_duration(value: &str) -> Option { let mut duration_in_secs = 0; - if let Ok(re) = - Regex::new(r"^((?P\d+)h\s*)?((?P\d+)m\s*)?((?P\d+)s?\s*)?$") - { + if let Ok(re) = Regex::new( + r"^((?P\d+)(h|hour|hours)\s*)?((?P\d+)(m|min|mins|minute|minutes)\s*)?((?P\d+)(s|sec|secs|second|seconds)?\s*)?$", + ) { if re.is_match(value) { let parts = re.captures_iter(value).next().unwrap(); if let Some(hours) = parts.name("hours") { @@ -222,18 +222,51 @@ mod tests { assert_eq!(config.checks.len(), 0); } + macro_rules! multi_assert_eq { + ($f:expr, $expected:expr, $ ( $left:expr ), + ) => { + $( + assert_eq!($f($left), $expected, $left); + )+ + }; + } + #[test] fn test_should_parse_durations() { assert_eq!(parse_duration("1m30s"), Some(Duration::from_secs(90))); assert_eq!(parse_duration("2m"), Some(Duration::from_secs(120))); - assert_eq!(parse_duration("1h1m1s"), Some(Duration::from_secs(3661))); assert_eq!(parse_duration("90"), Some(Duration::from_secs(90))); + + multi_assert_eq!( + parse_duration, + Some(Duration::from_secs(3661)), + "1h1m1s", + "1hour1min1s", + "1hour1mins1s", + "1hour1minute1sec", + "1hour1minute1secs", + "1hour1minutes1second", + "1hour1minutes1seconds", + "1hours1minutes1seconds" + ); } #[test] fn test_should_parse_durations_with_whitespaces() { assert_eq!(parse_duration("1m 30s"), Some(Duration::from_secs(90))); assert_eq!(parse_duration("1h 1m 1s"), Some(Duration::from_secs(3661))); + + multi_assert_eq!( + parse_duration, + Some(Duration::from_secs(3661)), + "1h 1m 1s", + "1hour 1min 1s", + "1hour 1mins 1s", + "1hour 1minute 1sec", + "1hour 1minute 1secs", + "1hour 1minutes 1second", + "1hour 1minutes 1seconds", + "1hours 1minutes 1seconds" + ); } #[test]