Add a test that our little mini-firewall works as intended.
This commit is contained in:
@@ -4,6 +4,7 @@ use crate::messages::{
|
|||||||
ServerResponseStatus,
|
ServerResponseStatus,
|
||||||
};
|
};
|
||||||
use crate::network::generic::Networklike;
|
use crate::network::generic::Networklike;
|
||||||
|
use async_std::io;
|
||||||
use futures::io::{AsyncRead, AsyncWrite};
|
use futures::io::{AsyncRead, AsyncWrite};
|
||||||
use log::{trace, warn};
|
use log::{trace, warn};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
@@ -22,6 +23,8 @@ pub enum SOCKSv5Error {
|
|||||||
UnsupportedAuthMethodChosen(AuthenticationMethod),
|
UnsupportedAuthMethodChosen(AuthenticationMethod),
|
||||||
#[error("Server said no: {0}")]
|
#[error("Server said no: {0}")]
|
||||||
ServerFailure(#[from] ServerResponseStatus),
|
ServerFailure(#[from] ServerResponseStatus),
|
||||||
|
#[error("Connection error: {0}")]
|
||||||
|
ConnectionError(#[from] io::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SOCKSv5Client<S, N>
|
pub struct SOCKSv5Client<S, N>
|
||||||
|
|||||||
24
src/lib.rs
24
src/lib.rs
@@ -103,4 +103,28 @@ mod test {
|
|||||||
assert!(client.is_err());
|
assert!(client.is_err());
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn firewall_blocks() {
|
||||||
|
task::block_on(async {
|
||||||
|
let mut network_stack = TestingStack::default();
|
||||||
|
|
||||||
|
// generate the server
|
||||||
|
let mut security_parameters = SecurityParameters::unrestricted();
|
||||||
|
security_parameters.allow_connection = Some(|_, _| 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());
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user