1 use super::*; 2 use crate::textattrs::TextAttribute; 3 4 #[test] 5 fn test_raw_attribute_add_to() -> Result<()> { 6 let v = vec![1, 2, 3, 4]; 7 let mut m = Message::new(); 8 let ra = Box::new(RawAttribute { 9 typ: ATTR_DATA, 10 value: v.clone(), 11 ..Default::default() 12 }); 13 m.build(&[ra])?; 14 let got_v = m.get(ATTR_DATA)?; 15 assert_eq!(got_v, v, "value mismatch"); 16 17 Ok(()) 18 } 19 20 #[test] 21 fn test_message_get_no_allocs() -> Result<()> { 22 let mut m = Message::new(); 23 let a = TextAttribute { 24 attr: ATTR_SOFTWARE, 25 text: "c".to_owned(), 26 }; 27 a.add_to(&mut m)?; 28 m.write_header(); 29 30 //"Default" 31 { 32 m.get(ATTR_SOFTWARE)?; 33 } 34 //"Not found" 35 { 36 let result = m.get(ATTR_ORIGIN); 37 assert!(result.is_err(), "should error"); 38 } 39 40 Ok(()) 41 } 42 43 #[test] 44 fn test_padding() -> Result<()> { 45 let tt = vec![ 46 (4, 4), // 0 47 (2, 4), // 1 48 (5, 8), // 2 49 (8, 8), // 3 50 (11, 12), // 4 51 (1, 4), // 5 52 (3, 4), // 6 53 (6, 8), // 7 54 (7, 8), // 8 55 (0, 0), // 9 56 (40, 40), // 10 57 ]; 58 59 for (i, o) in tt { 60 let got = nearest_padded_value_length(i); 61 assert_eq!(got, o, "padd({}) {} (got) != {} (expected)", i, got, o,); 62 } 63 64 Ok(()) 65 } 66 67 #[test] 68 fn test_attr_type_range() -> Result<()> { 69 let tests = vec![ 70 ATTR_PRIORITY, 71 ATTR_ERROR_CODE, 72 ATTR_USE_CANDIDATE, 73 ATTR_EVEN_PORT, 74 ATTR_REQUESTED_ADDRESS_FAMILY, 75 ]; 76 for a in tests { 77 assert!(!(a.optional() || !a.required()), "should be required"); 78 } 79 80 let tests = vec![ATTR_SOFTWARE, ATTR_ICE_CONTROLLED, ATTR_ORIGIN]; 81 for a in tests { 82 assert!(!(a.required() || !a.optional()), "should be optional"); 83 } 84 85 Ok(()) 86 } 87