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