1 use super::*;
2 use crate::textattrs::TextAttribute;
3 
4 #[test]
test_raw_attribute_add_to() -> Result<()>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]
test_message_get_no_allocs() -> Result<()>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]
test_padding() -> Result<()>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({i}) {got} (got) != {o} (expected)",);
62     }
63 
64     Ok(())
65 }
66 
67 #[test]
test_attr_type_range() -> Result<()>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