use super::*; use crate::textattrs::TextAttribute; #[test] fn test_raw_attribute_add_to() -> Result<()> { let v = vec![1, 2, 3, 4]; let mut m = Message::new(); let ra = Box::new(RawAttribute { typ: ATTR_DATA, value: v.clone(), ..Default::default() }); m.build(&[ra])?; let got_v = m.get(ATTR_DATA)?; assert_eq!(got_v, v, "value mismatch"); Ok(()) } #[test] fn test_message_get_no_allocs() -> Result<()> { let mut m = Message::new(); let a = TextAttribute { attr: ATTR_SOFTWARE, text: "c".to_owned(), }; a.add_to(&mut m)?; m.write_header(); //"Default" { m.get(ATTR_SOFTWARE)?; } //"Not found" { let result = m.get(ATTR_ORIGIN); assert!(result.is_err(), "should error"); } Ok(()) } #[test] fn test_padding() -> Result<()> { let tt = vec![ (4, 4), // 0 (2, 4), // 1 (5, 8), // 2 (8, 8), // 3 (11, 12), // 4 (1, 4), // 5 (3, 4), // 6 (6, 8), // 7 (7, 8), // 8 (0, 0), // 9 (40, 40), // 10 ]; for (i, o) in tt { let got = nearest_padded_value_length(i); assert_eq!(got, o, "padd({}) {} (got) != {} (expected)", i, got, o,); } Ok(()) } #[test] fn test_attr_type_range() -> Result<()> { let tests = vec![ ATTR_PRIORITY, ATTR_ERROR_CODE, ATTR_USE_CANDIDATE, ATTR_EVEN_PORT, ATTR_REQUESTED_ADDRESS_FAMILY, ]; for a in tests { assert!(!(a.optional() || !a.required()), "should be required"); } let tests = vec![ATTR_SOFTWARE, ATTR_ICE_CONTROLLED, ATTR_ORIGIN]; for a in tests { assert!(!(a.required() || !a.optional()), "should be optional"); } Ok(()) }