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