diff --git a/tonic/src/metadata/key.rs b/tonic/src/metadata/key.rs index a5a1248be..e40660d60 100644 --- a/tonic/src/metadata/key.rs +++ b/tonic/src/metadata/key.rs @@ -42,7 +42,7 @@ impl MetadataKey { match HeaderName::from_bytes(src) { Ok(name) => { if !VE::is_valid_key(name.as_str()) { - panic!("invalid metadata key") + return Err(InvalidMetadataKey::new()); } Ok(MetadataKey { @@ -282,3 +282,30 @@ impl Default for InvalidMetadataKey { } impl Error for InvalidMetadataKey {} + +#[cfg(test)] +mod tests { + use super::{AsciiMetadataKey, BinaryMetadataKey}; + + #[test] + fn test_from_bytes_binary() { + assert!(BinaryMetadataKey::from_bytes(b"").is_err()); + assert!(BinaryMetadataKey::from_bytes(b"\xFF").is_err()); + assert!(BinaryMetadataKey::from_bytes(b"abc").is_err()); + assert_eq!( + BinaryMetadataKey::from_bytes(b"abc-bin").unwrap().as_str(), + "abc-bin" + ); + } + + #[test] + fn test_from_bytes_ascii() { + assert!(AsciiMetadataKey::from_bytes(b"").is_err()); + assert!(AsciiMetadataKey::from_bytes(b"\xFF").is_err()); + assert_eq!( + AsciiMetadataKey::from_bytes(b"abc").unwrap().as_str(), + "abc" + ); + assert!(AsciiMetadataKey::from_bytes(b"abc-bin").is_err()); + } +}