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