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