@@ -347,4 +347,52 @@ mod tests {
347347 utc_time. encode ( & mut encoder) . unwrap ( ) ;
348348 assert_eq ! ( example_bytes, encoder. finish( ) . unwrap( ) ) ;
349349 }
350+
351+ #[ test]
352+ fn max_valid_generalized_time ( ) {
353+ let example_bytes = "\x18 \x0f 99991231235959Z" . as_bytes ( ) ;
354+ let utc_time = GeneralizedTime :: from_der ( & example_bytes) . unwrap ( ) ;
355+ assert_eq ! ( utc_time. to_unix_duration( ) . as_secs( ) , 253402300799 ) ;
356+
357+ let mut buf = [ 0u8 ; 128 ] ;
358+ let mut encoder = SliceWriter :: new ( & mut buf) ;
359+ utc_time. encode ( & mut encoder) . unwrap ( ) ;
360+ assert_eq ! ( example_bytes, encoder. finish( ) . unwrap( ) ) ;
361+ }
362+
363+ #[ test]
364+ fn invalid_year_generalized_time ( ) {
365+ let example_bytes = "\x18 \x0f 999@1231235959Z" . as_bytes ( ) ;
366+ assert ! ( GeneralizedTime :: from_der( & example_bytes) . is_err( ) ) ;
367+ }
368+
369+ #[ test]
370+ fn invalid_month_generalized_time ( ) {
371+ let example_bytes = "\x18 \x0f 99991331235959Z" . as_bytes ( ) ;
372+ assert ! ( GeneralizedTime :: from_der( & example_bytes) . is_err( ) ) ;
373+ }
374+
375+ #[ test]
376+ fn invalid_day_generalized_time ( ) {
377+ let example_bytes = "\x18 \x0f 99991232235959Z" . as_bytes ( ) ;
378+ assert ! ( GeneralizedTime :: from_der( & example_bytes) . is_err( ) ) ;
379+ }
380+
381+ #[ test]
382+ fn invalid_hour_generalized_time ( ) {
383+ let example_bytes = "\x18 \x0f 99991231245959Z" . as_bytes ( ) ;
384+ assert ! ( GeneralizedTime :: from_der( & example_bytes) . is_err( ) ) ;
385+ }
386+
387+ #[ test]
388+ fn invalid_minute_generalized_time ( ) {
389+ let example_bytes = "\x18 \x0f 99991231236059Z" . as_bytes ( ) ;
390+ assert ! ( GeneralizedTime :: from_der( & example_bytes) . is_err( ) ) ;
391+ }
392+
393+ #[ test]
394+ fn invalid_second_generalized_time ( ) {
395+ let example_bytes = "\x18 \x0f 99991231235960Z" . as_bytes ( ) ;
396+ assert ! ( GeneralizedTime :: from_der( & example_bytes) . is_err( ) ) ;
397+ }
350398}
0 commit comments