1 use super::*; 2 use crate::lexer::END_LINE; 3 use crate::util::ATTRIBUTE_KEY; 4 5 use std::io::BufReader; 6 use std::iter::Iterator; 7 8 const EXAMPLE_ATTR_EXTMAP1: &str = "extmap:1 http://example.com/082005/ext.htm#ttime"; 9 const EXAMPLE_ATTR_EXTMAP2: &str = 10 "extmap:2/sendrecv http://example.com/082005/ext.htm#xmeta short"; 11 const FAILING_ATTR_EXTMAP1: &str = 12 "extmap:257/sendrecv http://example.com/082005/ext.htm#xmeta short"; 13 const FAILING_ATTR_EXTMAP2: &str = "extmap:2/blorg http://example.com/082005/ext.htm#xmeta short"; 14 15 #[test] 16 fn test_extmap() -> Result<()> { 17 let example_attr_extmap1_line = EXAMPLE_ATTR_EXTMAP1; 18 let example_attr_extmap2_line = EXAMPLE_ATTR_EXTMAP2; 19 let failing_attr_extmap1_line = format!("{ATTRIBUTE_KEY}{FAILING_ATTR_EXTMAP1}{END_LINE}"); 20 let failing_attr_extmap2_line = format!("{ATTRIBUTE_KEY}{FAILING_ATTR_EXTMAP2}{END_LINE}"); 21 let passingtests = vec![ 22 (EXAMPLE_ATTR_EXTMAP1, example_attr_extmap1_line), 23 (EXAMPLE_ATTR_EXTMAP2, example_attr_extmap2_line), 24 ]; 25 let failingtests = vec![ 26 (FAILING_ATTR_EXTMAP1, failing_attr_extmap1_line), 27 (FAILING_ATTR_EXTMAP2, failing_attr_extmap2_line), 28 ]; 29 30 for (i, u) in passingtests.iter().enumerate() { 31 let mut reader = BufReader::new(u.1.as_bytes()); 32 let actual = ExtMap::unmarshal(&mut reader)?; 33 assert_eq!( 34 actual.marshal(), 35 u.1, 36 "{}: {} vs {}", 37 i, 38 u.1, 39 actual.marshal() 40 ); 41 } 42 43 for u in failingtests { 44 let mut reader = BufReader::new(u.1.as_bytes()); 45 let actual = ExtMap::unmarshal(&mut reader); 46 assert!(actual.is_err()); 47 } 48 49 Ok(()) 50 } 51 52 #[test] 53 fn test_transport_cc_extmap() -> Result<()> { 54 // a=extmap:<value>["/"<direction>] <URI> <extensionattributes> 55 // a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 56 let uri = Some(Url::parse( 57 "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01", 58 )?); 59 let e = ExtMap { 60 value: 3, 61 uri, 62 direction: Direction::Unspecified, 63 ext_attr: None, 64 }; 65 66 let s = e.marshal(); 67 if s == "3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" { 68 panic!("TestTransportCC failed"); 69 } else { 70 assert_eq!( 71 s, 72 "extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" 73 ) 74 } 75 76 Ok(()) 77 } 78