xref: /webrtc/turn/src/client/binding/binding_test.rs (revision ffe74184)
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