xref: /webrtc/turn/src/client/binding/binding_test.rs (revision ffe74184)
1 use super::*;
2 use crate::error::Result;
3 
4 use std::net::{Ipv4Addr, SocketAddrV4};
5 
6 #[test]
test_binding_manager_number_assignment() -> Result<()>7 fn test_binding_manager_number_assignment() -> Result<()> {
8     let mut m = BindingManager::new();
9     let mut n: u16;
10     for i in 0..10 {
11         n = m.assign_channel_number();
12         assert_eq!(MIN_CHANNEL_NUMBER + i, n, "should match");
13     }
14 
15     m.next = 0x7ff0;
16     for i in 0..16 {
17         n = m.assign_channel_number();
18         assert_eq!(0x7ff0 + i, n, "should match");
19     }
20     // back to min
21     n = m.assign_channel_number();
22     assert_eq!(MIN_CHANNEL_NUMBER, n, "should match");
23 
24     Ok(())
25 }
26 
27 #[test]
test_binding_manager_method() -> Result<()>28 fn test_binding_manager_method() -> Result<()> {
29     let lo = Ipv4Addr::new(127, 0, 0, 1);
30     let count = 100;
31     let mut m = BindingManager::new();
32     for i in 0..count {
33         let addr = SocketAddr::V4(SocketAddrV4::new(lo, 10000 + i));
34         let b0 = {
35             let b = m.create(addr);
36             *b.unwrap()
37         };
38         let b1 = m.find_by_addr(&addr);
39         assert!(b1.is_some(), "should succeed");
40         let b2 = m.find_by_number(b0.number);
41         assert!(b2.is_some(), "should succeed");
42 
43         assert_eq!(b0, *b1.unwrap(), "should match");
44         assert_eq!(b0, *b2.unwrap(), "should match");
45     }
46 
47     assert_eq!(count, m.size() as u16, "should match");
48     assert_eq!(count, m.addr_map.len() as u16, "should match");
49 
50     for i in 0..count {
51         let addr = SocketAddr::V4(SocketAddrV4::new(lo, 10000 + i));
52         if i % 2 == 0 {
53             assert!(m.delete_by_addr(&addr), "should return true");
54         } else {
55             assert!(
56                 m.delete_by_number(MIN_CHANNEL_NUMBER + i),
57                 "should return true"
58             );
59         }
60     }
61 
62     assert_eq!(0, m.size(), "should match");
63     assert_eq!(0, m.addr_map.len(), "should match");
64 
65     Ok(())
66 }
67 
68 #[test]
test_binding_manager_failure() -> Result<()>69 fn test_binding_manager_failure() -> Result<()> {
70     let ipv4 = Ipv4Addr::new(127, 0, 0, 1);
71     let addr = SocketAddr::V4(SocketAddrV4::new(ipv4, 7777));
72     let mut m = BindingManager::new();
73     let b = m.find_by_addr(&addr);
74     assert!(b.is_none(), "should fail");
75     let b = m.find_by_number(5555);
76     assert!(b.is_none(), "should fail");
77     let ok = m.delete_by_addr(&addr);
78     assert!(!ok, "should fail");
79     let ok = m.delete_by_number(5555);
80     assert!(!ok, "should fail");
81 
82     Ok(())
83 }
84