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();
{
m.get(ATTR_SOFTWARE)?;
}
{
let result = m.get(ATTR_ORIGIN);
assert!(result.is_err(), "should error");
}
Ok(())
}
#[test]
fn test_padding() -> Result<()> {
let tt = vec![
(4, 4), (2, 4), (5, 8), (8, 8), (11, 12), (1, 4), (3, 4), (6, 8), (7, 8), (0, 0), (40, 40), ];
for (i, o) in tt {
let got = nearest_padded_value_length(i);
assert_eq!(got, o, "padded({i}) {got} (got) != {o} (expected)",);
}
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(())
}