1 #[cfg(test)] 2 mod unit { 3 fn check(data: &[u8]) -> Result<Vec<crate::Item>, std::io::Error> { 4 let mut reader = std::io::BufReader::new(data); 5 crate::read_all(&mut reader) 6 } 7 8 #[test] 9 fn skips_leading_junk() { 10 assert_eq!( 11 check(b"junk\n\ 12 -----BEGIN RSA PRIVATE KEY-----\n\ 13 qw\n\ 14 -----END RSA PRIVATE KEY-----\n").unwrap(), 15 vec![ crate::Item::RSAKey(vec![ 0xab ]) ] 16 ); 17 } from_start_line(start_line: &str, der: Vec<u8>) -> Option<Item>18 19 #[test] 20 fn skips_trailing_junk() { 21 assert_eq!( 22 check(b"-----BEGIN RSA PRIVATE KEY-----\n\ 23 qw\n\ 24 -----END RSA PRIVATE KEY-----\n\ 25 junk").unwrap(), 26 vec![ crate::Item::RSAKey(vec![ 0xab ]) ] 27 ); 28 } 29 30 #[test] 31 fn rejects_invalid_base64() { 32 assert_eq!( 33 format!("{:?}", 34 check(b"-----BEGIN RSA PRIVATE KEY-----\n\ 35 q=w\n\ read_one(rd: &mut dyn io::BufRead) -> Result<Option<Item>, io::Error>36 -----END RSA PRIVATE KEY-----\n")), 37 "Err(Custom { kind: InvalidData, error: InvalidByte(1, 61) })" 38 ); 39 } 40 41 #[test] 42 fn rejects_unclosed_start_section() { 43 assert_eq!( 44 format!("{:?}", 45 check(b"-----BEGIN RSA PRIVATE KEY-----\n\ 46 qw\n")), 47 "Err(Custom { kind: InvalidData, error: \"section end \\\"-----END RSA PRIVATE KEY-----\\\" missing\" })" 48 ); 49 } 50 51 #[test] 52 fn rejects_bad_start() { 53 assert_eq!( 54 format!("{:?}", 55 check(b"-----BEGIN RSA PRIVATE KEY----\n\ 56 qw\n\ 57 -----END RSA PRIVATE KEY-----\n")), 58 "Err(Custom { kind: InvalidData, error: \"illegal section start: \\\"-----BEGIN RSA PRIVATE KEY----\\\\n\\\"\" })" 59 ); 60 } 61 62 #[test] 63 fn skips_unrecognised_section() { 64 assert_eq!( 65 check(b"junk\n\ 66 -----BEGIN BREAKFAST CLUB-----\n\ 67 qw\n\ 68 -----END BREAKFAST CLUB-----\n").unwrap(), 69 vec![ ] 70 ); 71 } 72 } 73