Further testing, especially of username/password checks.

This commit is contained in:
2021-10-09 18:55:24 -07:00
parent fbd98a5f9b
commit e319dda2a8
2 changed files with 71 additions and 6 deletions

View File

@@ -53,8 +53,8 @@ impl LoginInfo {
}
pub struct UsernamePassword {
username: String,
password: String,
pub username: String,
pub password: String,
}
impl<S, N> SOCKSv5Client<S, N>

View File

@@ -7,7 +7,7 @@ pub mod server;
#[cfg(test)]
mod test {
use crate::client::{LoginInfo, SOCKSv5Client};
use crate::client::{LoginInfo, SOCKSv5Client, UsernamePassword};
use crate::network::generic::Networklike;
use crate::network::testing::TestingStack;
use crate::server::{SOCKSv5Server, SecurityParameters};
@@ -32,10 +32,75 @@ mod test {
};
let client = SOCKSv5Client::new(network_stack, stream, &login_info).await;
if let Err(e) = &client {
println!("client result: {:?}", e);
}
assert!(client.is_ok());
})
}
#[test]
fn disallow_unrestricted() {
task::block_on(async {
let mut network_stack = TestingStack::default();
// generate the server
let mut security_parameters = SecurityParameters::unrestricted();
security_parameters.allow_unauthenticated = false;
let default_port = network_stack.listen("localhost", 9999).await.unwrap();
let server =
SOCKSv5Server::new(network_stack.clone(), security_parameters, default_port);
let _server_task = task::spawn(async move { server.run().await });
let stream = network_stack.connect("localhost", 9999).await.unwrap();
let login_info = LoginInfo {
username_password: None,
};
let client = SOCKSv5Client::new(network_stack, stream, &login_info).await;
assert!(client.is_err());
})
}
#[test]
fn password_checks() {
task::block_on(async {
let mut network_stack = TestingStack::default();
// generate the server
let security_parameters = SecurityParameters {
allow_unauthenticated: false,
allow_connection: None,
connect_tls: None,
check_password: Some(|username, password| {
username == "awick" && password == "password"
}),
};
let default_port = network_stack.listen("localhost", 9999).await.unwrap();
let server =
SOCKSv5Server::new(network_stack.clone(), security_parameters, default_port);
let _server_task = task::spawn(async move { server.run().await });
// try the positive side
let stream = network_stack.connect("localhost", 9999).await.unwrap();
let login_info = LoginInfo {
username_password: Some(UsernamePassword {
username: "awick".to_string(),
password: "password".to_string(),
}),
};
let client = SOCKSv5Client::new(network_stack.clone(), stream, &login_info).await;
assert!(client.is_ok());
// try the negative side
let stream = network_stack.connect("localhost", 9999).await.unwrap();
let login_info = LoginInfo {
username_password: Some(UsernamePassword {
username: "adamw".to_string(),
password: "password".to_string(),
}),
};
let client = SOCKSv5Client::new(network_stack, stream, &login_info).await;
assert!(client.is_err());
})
}
}