1 use super::*; 2 use crate::error::Result; 3 4 use std::net::{Ipv4Addr, SocketAddrV4}; 5 6 #[test] 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] 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] 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