xref: /webrtc/turn/src/auth/auth_test.rs (revision 9ea7b2ac)
1 use super::*;
2 
3 #[test]
test_lt_cred() -> Result<()>4 fn test_lt_cred() -> Result<()> {
5     let username = "1599491771";
6     let shared_secret = "foobar";
7 
8     let expected_password = "Tpz/nKkyvX/vMSLKvL4sbtBt8Vs=";
9     let actual_password = long_term_credentials(username, shared_secret);
10     assert_eq!(
11         expected_password, actual_password,
12         "Expected {expected_password}, got {actual_password}"
13     );
14 
15     Ok(())
16 }
17 
18 #[test]
test_generate_auth_key() -> Result<()>19 fn test_generate_auth_key() -> Result<()> {
20     let username = "60";
21     let password = "HWbnm25GwSj6jiHTEDMTO5D7aBw=";
22     let realm = "webrtc.rs";
23 
24     let expected_key = vec![
25         56, 22, 47, 139, 198, 127, 13, 188, 171, 80, 23, 29, 195, 148, 216, 224,
26     ];
27     let actual_key = generate_auth_key(username, realm, password);
28     assert_eq!(
29         expected_key, actual_key,
30         "Expected {expected_key:?}, got {actual_key:?}"
31     );
32 
33     Ok(())
34 }
35 
36 #[cfg(target_family = "unix")]
37 #[tokio::test]
test_new_long_term_auth_handler() -> Result<()>38 async fn test_new_long_term_auth_handler() -> Result<()> {
39     use crate::client::*;
40     use crate::relay::relay_static::*;
41     use crate::server::{config::*, *};
42 
43     use std::net::IpAddr;
44     use std::str::FromStr;
45     use std::sync::Arc;
46     use tokio::net::UdpSocket;
47     use util::vnet::net::*;
48 
49     //env_logger::init();
50 
51     const SHARED_SECRET: &str = "HELLO_WORLD";
52 
53     // here, it should use static port, like "0.0.0.0:3478",
54     // but, due to different test environment, let's fake it by using "0.0.0.0:0"
55     // to auto assign a "static" port
56     let conn = Arc::new(UdpSocket::bind("0.0.0.0:0").await?);
57     let server_port = conn.local_addr()?.port();
58 
59     let server = Server::new(ServerConfig {
60         conn_configs: vec![ConnConfig {
61             conn,
62             relay_addr_generator: Box::new(RelayAddressGeneratorStatic {
63                 relay_address: IpAddr::from_str("127.0.0.1")?,
64                 address: "0.0.0.0".to_owned(),
65                 net: Arc::new(Net::new(None)),
66             }),
67         }],
68         realm: "webrtc.rs".to_owned(),
69         auth_handler: Arc::new(LongTermAuthHandler::new(SHARED_SECRET.to_string())),
70         channel_bind_timeout: Duration::from_secs(0),
71         alloc_close_notify: None,
72     })
73     .await?;
74 
75     let (username, password) =
76         generate_long_term_credentials(SHARED_SECRET, Duration::from_secs(60))?;
77 
78     let conn = Arc::new(UdpSocket::bind("0.0.0.0:0").await?);
79 
80     let client = Client::new(ClientConfig {
81         stun_serv_addr: format!("0.0.0.0:{server_port}"),
82         turn_serv_addr: format!("0.0.0.0:{server_port}"),
83         username,
84         password,
85         realm: "webrtc.rs".to_owned(),
86         software: String::new(),
87         rto_in_ms: 0,
88         conn,
89         vnet: None,
90     })
91     .await?;
92 
93     client.listen().await?;
94 
95     let _allocation = client.allocate().await?;
96 
97     client.close().await?;
98     server.close().await?;
99 
100     Ok(())
101 }
102