Browse Source

Add test for failed login.

wip
Titouan Rigoudy 4 years ago
parent
commit
087fc96290
1 changed files with 50 additions and 2 deletions
  1. +50
    -2
      proto/src/server/client.rs

+ 50
- 2
proto/src/server/client.rs View File

@ -133,7 +133,7 @@ mod tests {
};
use crate::UserStatus;
use super::{Client, LoginInfo};
use super::{Client, ClientLoginError, LoginInfo};
// Enable capturing logs in tests.
fn init() {
@ -147,14 +147,62 @@ mod tests {
Credentials::new(user_name, password).expect("building credentials")
}
fn is_login_request(request: &ServerRequest) -> bool {
match request {
&ServerRequest::LoginRequest(_) => true,
_ => false,
}
}
// TODO: Tests for all login error conditions:
//
// - login failed
// - unexpected response
// - read error
// - write error
// - stream closed
#[tokio::test]
async fn login_failed() {
init();
let listener = TcpListener::bind("localhost:0").await.expect("binding");
let address = listener.local_addr().expect("getting local address");
let server_task = tokio::spawn(async move {
let (mut stream, _) = listener.accept().await.expect("accepting");
let (read_half, write_half) = stream.split();
let mut reader = FrameReader::new(read_half);
let mut writer = FrameWriter::new(write_half);
let frame = reader.read().await.expect("reading login request");
let request = frame.expect("unwrapping login request");
assert!(is_login_request(&request));
writer
.write(&ServerResponse::LoginResponse(LoginResponse::LoginFail {
reason: "go away".to_string(),
}))
.await
.expect("writing login response");
});
let stream = TcpStream::connect(address).await.expect("connecting");
let err = Client::new(stream)
.login(credentials())
.await
.expect_err("logging in");
match err {
ClientLoginError::LoginFailed(reason, _worker) => {
assert_eq!(reason, "go away")
}
_ => panic!("wrong error: {:?}", err),
}
server_task.await.expect("joining server");
}
#[tokio::test]
async fn login_success() {
init();


Loading…
Cancel
Save