xref: /webrtc/turn/src/server/request/request_test.rs (revision 9ea7b2ac)
1ffe74184SMartin Algesten use super::*;
2ffe74184SMartin Algesten use crate::relay::relay_none::*;
3ffe74184SMartin Algesten 
4c4e6ecf8Slogist322 use std::{net::IpAddr, str::FromStr};
5c4e6ecf8Slogist322 use tokio::{
6c4e6ecf8Slogist322     net::UdpSocket,
7c4e6ecf8Slogist322     time::{Duration, Instant},
8c4e6ecf8Slogist322 };
9ffe74184SMartin Algesten use util::vnet::net::*;
10ffe74184SMartin Algesten 
11ffe74184SMartin Algesten const STATIC_KEY: &str = "ABC";
12ffe74184SMartin Algesten 
13ffe74184SMartin Algesten #[tokio::test]
test_allocation_lifetime_parsing() -> Result<()>14ffe74184SMartin Algesten async fn test_allocation_lifetime_parsing() -> Result<()> {
15ffe74184SMartin Algesten     let lifetime = Lifetime(Duration::from_secs(5));
16ffe74184SMartin Algesten 
17ffe74184SMartin Algesten     let mut m = Message::new();
18ffe74184SMartin Algesten     let lifetime_duration = allocation_lifetime(&m);
19ffe74184SMartin Algesten 
20ffe74184SMartin Algesten     assert_eq!(
21ffe74184SMartin Algesten         lifetime_duration, DEFAULT_LIFETIME,
22ffe74184SMartin Algesten         "Allocation lifetime should be default time duration"
23ffe74184SMartin Algesten     );
24ffe74184SMartin Algesten 
25ffe74184SMartin Algesten     lifetime.add_to(&mut m)?;
26ffe74184SMartin Algesten 
27ffe74184SMartin Algesten     let lifetime_duration = allocation_lifetime(&m);
28ffe74184SMartin Algesten     assert_eq!(
29ffe74184SMartin Algesten         lifetime_duration, lifetime.0,
305d8fe953SJoão Oliveira         "Expect lifetime_duration is {lifetime}, but {lifetime_duration:?}"
31ffe74184SMartin Algesten     );
32ffe74184SMartin Algesten 
33ffe74184SMartin Algesten     Ok(())
34ffe74184SMartin Algesten }
35ffe74184SMartin Algesten 
36ffe74184SMartin Algesten #[tokio::test]
test_allocation_lifetime_overflow() -> Result<()>37ffe74184SMartin Algesten async fn test_allocation_lifetime_overflow() -> Result<()> {
38ffe74184SMartin Algesten     let lifetime = Lifetime(MAXIMUM_ALLOCATION_LIFETIME * 2);
39ffe74184SMartin Algesten 
40ffe74184SMartin Algesten     let mut m2 = Message::new();
41ffe74184SMartin Algesten     lifetime.add_to(&mut m2)?;
42ffe74184SMartin Algesten 
43ffe74184SMartin Algesten     let lifetime_duration = allocation_lifetime(&m2);
44ffe74184SMartin Algesten     assert_eq!(
45ffe74184SMartin Algesten         lifetime_duration, DEFAULT_LIFETIME,
465d8fe953SJoão Oliveira         "Expect lifetime_duration is {DEFAULT_LIFETIME:?}, but {lifetime_duration:?}"
47ffe74184SMartin Algesten     );
48ffe74184SMartin Algesten 
49ffe74184SMartin Algesten     Ok(())
50ffe74184SMartin Algesten }
51ffe74184SMartin Algesten 
52ffe74184SMartin Algesten struct TestAuthHandler;
53ffe74184SMartin Algesten impl AuthHandler for TestAuthHandler {
auth_handle(&self, _username: &str, _realm: &str, _src_addr: SocketAddr) -> Result<Vec<u8>>54ffe74184SMartin Algesten     fn auth_handle(&self, _username: &str, _realm: &str, _src_addr: SocketAddr) -> Result<Vec<u8>> {
55ffe74184SMartin Algesten         Ok(STATIC_KEY.as_bytes().to_vec())
56ffe74184SMartin Algesten     }
57ffe74184SMartin Algesten }
58ffe74184SMartin Algesten 
59ffe74184SMartin Algesten #[tokio::test]
test_allocation_lifetime_deletion_zero_lifetime() -> Result<()>60ffe74184SMartin Algesten async fn test_allocation_lifetime_deletion_zero_lifetime() -> Result<()> {
61ffe74184SMartin Algesten     //env_logger::init();
62ffe74184SMartin Algesten 
63ffe74184SMartin Algesten     let l = Arc::new(UdpSocket::bind("0.0.0.0:0").await?);
64ffe74184SMartin Algesten 
65ffe74184SMartin Algesten     let allocation_manager = Arc::new(Manager::new(ManagerConfig {
66ffe74184SMartin Algesten         relay_addr_generator: Box::new(RelayAddressGeneratorNone {
67ffe74184SMartin Algesten             address: "0.0.0.0".to_owned(),
68ffe74184SMartin Algesten             net: Arc::new(Net::new(None)),
69ffe74184SMartin Algesten         }),
70*9ea7b2acSclia         alloc_close_notify: None,
71ffe74184SMartin Algesten     }));
72ffe74184SMartin Algesten 
73ffe74184SMartin Algesten     let socket = SocketAddr::new(IpAddr::from_str("127.0.0.1")?, 5000);
74ffe74184SMartin Algesten 
75ffe74184SMartin Algesten     let mut r = Request::new(l, socket, allocation_manager, Arc::new(TestAuthHandler {}));
76ffe74184SMartin Algesten 
77ffe74184SMartin Algesten     {
78ffe74184SMartin Algesten         let mut nonces = r.nonces.lock().await;
79ffe74184SMartin Algesten         nonces.insert(STATIC_KEY.to_owned(), Instant::now());
80ffe74184SMartin Algesten     }
81ffe74184SMartin Algesten 
82ffe74184SMartin Algesten     let five_tuple = FiveTuple {
83ffe74184SMartin Algesten         src_addr: r.src_addr,
845b79f08aSalexlapa         dst_addr: r.conn.local_addr()?,
85ffe74184SMartin Algesten         protocol: PROTO_UDP,
86ffe74184SMartin Algesten     };
87ffe74184SMartin Algesten 
88ffe74184SMartin Algesten     r.allocation_manager
89ffe74184SMartin Algesten         .create_allocation(
90630c46feSHugo Tunius             five_tuple,
91ffe74184SMartin Algesten             Arc::clone(&r.conn),
92ffe74184SMartin Algesten             0,
93ffe74184SMartin Algesten             Duration::from_secs(3600),
94c4e6ecf8Slogist322             TextAttribute::new(ATTR_USERNAME, "user".into()),
95ffe74184SMartin Algesten         )
96ffe74184SMartin Algesten         .await?;
97ffe74184SMartin Algesten     assert!(r
98ffe74184SMartin Algesten         .allocation_manager
99ffe74184SMartin Algesten         .get_allocation(&five_tuple)
100ffe74184SMartin Algesten         .await
101ffe74184SMartin Algesten         .is_some());
102ffe74184SMartin Algesten 
103ffe74184SMartin Algesten     let mut m = Message::new();
104ffe74184SMartin Algesten     Lifetime::default().add_to(&mut m)?;
105ffe74184SMartin Algesten     MessageIntegrity(STATIC_KEY.as_bytes().to_vec()).add_to(&mut m)?;
106ffe74184SMartin Algesten     Nonce::new(ATTR_NONCE, STATIC_KEY.to_owned()).add_to(&mut m)?;
107ffe74184SMartin Algesten     Realm::new(ATTR_REALM, STATIC_KEY.to_owned()).add_to(&mut m)?;
108ffe74184SMartin Algesten     Username::new(ATTR_USERNAME, STATIC_KEY.to_owned()).add_to(&mut m)?;
109ffe74184SMartin Algesten 
110ffe74184SMartin Algesten     r.handle_refresh_request(&m).await?;
111ffe74184SMartin Algesten     assert!(r
112ffe74184SMartin Algesten         .allocation_manager
113ffe74184SMartin Algesten         .get_allocation(&five_tuple)
114ffe74184SMartin Algesten         .await
115ffe74184SMartin Algesten         .is_none());
116ffe74184SMartin Algesten 
117ffe74184SMartin Algesten     Ok(())
118ffe74184SMartin Algesten }
119