Browse Source

Add small integration tests for proto::Client.

wip
Titouan Rigoudy 4 years ago
parent
commit
6afced7d2e
1 changed files with 84 additions and 0 deletions
  1. +84
    -0
      tests/connect.rs

+ 84
- 0
tests/connect.rs View File

@ -0,0 +1,84 @@
use futures::stream::{self, StreamExt};
use tokio::io;
use tokio::net;
use tokio::sync::mpsc;
use solstice::proto::server::{
Client, ClientOptions, Credentials, ServerRequest, ServerResponse,
UserStatusRequest, Version,
};
// Enable capturing logs in tests.
fn init() {
let _ = env_logger::builder().is_test(true).try_init();
}
async fn connect() -> io::Result<net::TcpStream> {
net::TcpStream::connect("server.slsknet.org:2242").await
}
fn make_user_name(test_name: &str) -> String {
format!("st_{}", test_name)
}
fn client_options(user_name: String) -> ClientOptions {
let password = "abcdefgh".to_string();
let credentials = Credentials::new(user_name, password).unwrap();
ClientOptions {
credentials,
version: Version::default(),
}
}
#[tokio::test]
async fn integration_connect() {
init();
let stream = connect().await.unwrap();
let options = client_options(make_user_name("connect"));
let client = Client::login(stream, options).await.unwrap();
let mut inbound = client.run(stream::pending());
assert!(inbound.next().await.is_some());
}
#[tokio::test]
async fn integration_check_user_status() {
init();
let stream = connect().await.unwrap();
let user_name = make_user_name("check_user_status");
let options = client_options(user_name.clone());
let client = Client::login(stream, options).await.unwrap();
let (request_tx, mut request_rx) = mpsc::channel(1);
let outbound = Box::pin(async_stream::stream! {
while let Some(request) = request_rx.recv().await {
yield request;
}
});
let mut inbound = client.run(outbound);
request_tx
.send(ServerRequest::UserStatusRequest(UserStatusRequest {
user_name: user_name.clone(),
}))
.await
.unwrap();
while let Some(result) = inbound.next().await {
let response = result.unwrap();
if let ServerResponse::UserStatusResponse(response) = response {
assert_eq!(response.user_name, user_name);
return;
}
}
unreachable!();
}

Loading…
Cancel
Save