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