83 lines
2.3 KiB
Rust
83 lines
2.3 KiB
Rust
use std::time::{Duration, SystemTime};
|
|
use tokio::time::timeout;
|
|
|
|
use client_api::ws::{ConnectState, WSClient, WSClientConfig};
|
|
use client_api_test::generate_unique_registered_user_client;
|
|
|
|
#[tokio::test]
|
|
async fn realtime_connect_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let ws_client = WSClient::new(WSClientConfig::default(), c.clone(), c.clone());
|
|
let mut state = ws_client.subscribe_connect_state();
|
|
tokio::spawn(async move { ws_client.connect().await });
|
|
let connect_future = async {
|
|
loop {
|
|
match state.recv().await {
|
|
Ok(ConnectState::Connected) => {
|
|
break;
|
|
},
|
|
Ok(_) => {},
|
|
Err(err) => panic!("Receiver Error: {:?}", err),
|
|
}
|
|
}
|
|
};
|
|
|
|
// Apply the timeout
|
|
match timeout(Duration::from_secs(10), connect_future).await {
|
|
Ok(_) => {},
|
|
Err(_) => panic!("Connection timeout."),
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn realtime_connect_after_token_exp_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
|
|
// Set the token to be expired
|
|
c.token().write().as_mut().unwrap().expires_at = SystemTime::now()
|
|
.duration_since(SystemTime::UNIX_EPOCH)
|
|
.unwrap()
|
|
.as_secs() as i64;
|
|
|
|
let ws_client = WSClient::new(WSClientConfig::default(), c.clone(), c.clone());
|
|
let mut state = ws_client.subscribe_connect_state();
|
|
tokio::spawn(async move { ws_client.connect().await });
|
|
let connect_future = async {
|
|
loop {
|
|
match state.recv().await {
|
|
Ok(ConnectState::Connected) => {
|
|
break;
|
|
},
|
|
Ok(_) => {},
|
|
Err(err) => panic!("Receiver Error: {:?}", err),
|
|
}
|
|
}
|
|
};
|
|
|
|
// Apply the timeout
|
|
match timeout(Duration::from_secs(10), connect_future).await {
|
|
Ok(_) => {},
|
|
Err(_) => panic!("Connection timeout."),
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn realtime_disconnect_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let ws_client = WSClient::new(WSClientConfig::default(), c.clone(), c.clone());
|
|
ws_client.connect().await.unwrap();
|
|
|
|
let mut state = ws_client.subscribe_connect_state();
|
|
loop {
|
|
tokio::select! {
|
|
_ = ws_client.disconnect() => {},
|
|
value = state.recv() => {
|
|
let new_state = value.unwrap();
|
|
if new_state == ConnectState::Lost {
|
|
break;
|
|
}
|
|
},
|
|
}
|
|
}
|
|
}
|