Add TLS invalid cases checks
This commit is contained in:
		
							
								
								
									
										0
									
								
								src/test/expired_certificate.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/test/expired_certificate.rs
									
									
									
									
									
										Normal file
									
								
							@@ -13,6 +13,9 @@ enum PortsAllocation {
 | 
			
		||||
    ValidWithTokenAuthAndServerTLS,
 | 
			
		||||
    WithTokenAuthAndInvalidServerTLSBadCA,
 | 
			
		||||
    WithTokenAuthAndInvalidServerTLSExpiredAndBadCN,
 | 
			
		||||
    TlsAuthExpiredClientCertificate,
 | 
			
		||||
    TlsAuthRevokedClientCertificate,
 | 
			
		||||
    TlsAuthInvalidClientCertificate,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn get_port_number(alloc: PortsAllocation, index: u16) -> u16 {
 | 
			
		||||
@@ -33,6 +36,10 @@ mod server_invalid_tls_config_invalid_key;
 | 
			
		||||
mod server_invalid_tls_config_invalid_paths;
 | 
			
		||||
mod server_invalid_tls_config_missing_key;
 | 
			
		||||
mod server_invalid_token_file;
 | 
			
		||||
mod server_missing_auth;
 | 
			
		||||
mod tls_auth_expired_certificate;
 | 
			
		||||
mod tls_auth_invalid_certificate;
 | 
			
		||||
mod tls_auth_revoked_certificate;
 | 
			
		||||
mod valid_token_with_custom_increment;
 | 
			
		||||
mod valid_with_multiple_token_auth;
 | 
			
		||||
mod valid_with_tls_auth;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								src/test/server_missing_auth.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/test/server_missing_auth.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
use crate::tcp_relay_server::server_config::ServerConfig;
 | 
			
		||||
use crate::test::pki::Pki;
 | 
			
		||||
use crate::test::{get_port_number, PortsAllocation};
 | 
			
		||||
 | 
			
		||||
fn port(index: u16) -> u16 {
 | 
			
		||||
    get_port_number(PortsAllocation::TestsWithoutPortOpened, index)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::test]
 | 
			
		||||
async fn with_tls_server() {
 | 
			
		||||
    let _ = env_logger::builder().is_test(true).try_init();
 | 
			
		||||
 | 
			
		||||
    let pki = Pki::load();
 | 
			
		||||
 | 
			
		||||
    crate::tcp_relay_server::run_app(ServerConfig {
 | 
			
		||||
        tokens: vec![],
 | 
			
		||||
        tokens_file: None,
 | 
			
		||||
        ports: vec![port(1)],
 | 
			
		||||
        upstream_server: "127.0.0.1".to_string(),
 | 
			
		||||
        listen_address: format!("127.0.0.1:{}", port(0)),
 | 
			
		||||
        increment_ports: 1,
 | 
			
		||||
        tls_cert: Some(pki.root_ca_crl.file_path()),
 | 
			
		||||
        tls_key: Some(pki.localhost_key.file_path()),
 | 
			
		||||
        tls_client_auth_root_cert: None,
 | 
			
		||||
        tls_revocation_list: None,
 | 
			
		||||
    })
 | 
			
		||||
    .await
 | 
			
		||||
    .unwrap_err();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::test]
 | 
			
		||||
async fn without_tls_server() {
 | 
			
		||||
    let _ = env_logger::builder().is_test(true).try_init();
 | 
			
		||||
 | 
			
		||||
    crate::tcp_relay_server::run_app(ServerConfig {
 | 
			
		||||
        tokens: vec![],
 | 
			
		||||
        tokens_file: None,
 | 
			
		||||
        ports: vec![port(1)],
 | 
			
		||||
        upstream_server: "127.0.0.1".to_string(),
 | 
			
		||||
        listen_address: format!("127.0.0.1:{}", port(0)),
 | 
			
		||||
        increment_ports: 1,
 | 
			
		||||
        tls_cert: None,
 | 
			
		||||
        tls_key: None,
 | 
			
		||||
        tls_client_auth_root_cert: None,
 | 
			
		||||
        tls_revocation_list: None,
 | 
			
		||||
    })
 | 
			
		||||
    .await
 | 
			
		||||
    .unwrap_err();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::test]
 | 
			
		||||
async fn tls_auth_without_tls_config() {
 | 
			
		||||
    let _ = env_logger::builder().is_test(true).try_init();
 | 
			
		||||
 | 
			
		||||
    let pki = Pki::load();
 | 
			
		||||
 | 
			
		||||
    crate::tcp_relay_server::run_app(ServerConfig {
 | 
			
		||||
        tokens: vec![],
 | 
			
		||||
        tokens_file: None,
 | 
			
		||||
        ports: vec![port(1)],
 | 
			
		||||
        upstream_server: "127.0.0.1".to_string(),
 | 
			
		||||
        listen_address: format!("127.0.0.1:{}", port(0)),
 | 
			
		||||
        increment_ports: 1,
 | 
			
		||||
        tls_cert: None,
 | 
			
		||||
        tls_key: None,
 | 
			
		||||
        tls_client_auth_root_cert: Some(pki.root_ca_crt.file_path()),
 | 
			
		||||
        tls_revocation_list: None,
 | 
			
		||||
    })
 | 
			
		||||
    .await
 | 
			
		||||
    .unwrap_err();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								src/test/tls_auth_expired_certificate.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/test/tls_auth_expired_certificate.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
use tokio::task;
 | 
			
		||||
 | 
			
		||||
use crate::tcp_relay_client::client_config::ClientConfig;
 | 
			
		||||
use crate::tcp_relay_server::server_config::ServerConfig;
 | 
			
		||||
use crate::test::dummy_tcp_sockets::{wait_for_port, DummyTCPServer};
 | 
			
		||||
use crate::test::pki::Pki;
 | 
			
		||||
use crate::test::{get_port_number, PortsAllocation, LOCALHOST_IP};
 | 
			
		||||
 | 
			
		||||
fn port(index: u16) -> u16 {
 | 
			
		||||
    get_port_number(PortsAllocation::TlsAuthExpiredClientCertificate, index)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::test]
 | 
			
		||||
async fn test() {
 | 
			
		||||
    let _ = env_logger::builder().is_test(true).try_init();
 | 
			
		||||
 | 
			
		||||
    // Start internal service
 | 
			
		||||
    let local_server = DummyTCPServer::start(port(1)).await;
 | 
			
		||||
    tokio::spawn(async move {
 | 
			
		||||
        local_server.loop_conn_square_operations().await;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    let pki = Pki::load();
 | 
			
		||||
 | 
			
		||||
    let local_set = task::LocalSet::new();
 | 
			
		||||
    local_set
 | 
			
		||||
        .run_until(async move {
 | 
			
		||||
            wait_for_port(port(1)).await;
 | 
			
		||||
 | 
			
		||||
            // Start server relay
 | 
			
		||||
            task::spawn_local(crate::tcp_relay_server::run_app(ServerConfig {
 | 
			
		||||
                tokens: vec![],
 | 
			
		||||
                tokens_file: None,
 | 
			
		||||
                ports: vec![port(1)],
 | 
			
		||||
                upstream_server: "127.0.0.1".to_string(),
 | 
			
		||||
                listen_address: format!("127.0.0.1:{}", port(0)),
 | 
			
		||||
                increment_ports: 1,
 | 
			
		||||
                tls_cert: Some(pki.localhost_crt.file_path()),
 | 
			
		||||
                tls_key: Some(pki.localhost_key.file_path()),
 | 
			
		||||
                tls_client_auth_root_cert: Some(pki.root_ca_crt.file_path()),
 | 
			
		||||
                tls_revocation_list: Some(pki.root_ca_crl.file_path()),
 | 
			
		||||
            }));
 | 
			
		||||
            wait_for_port(port(0)).await;
 | 
			
		||||
 | 
			
		||||
            // Start client relay
 | 
			
		||||
            crate::tcp_relay_client::run_app(ClientConfig {
 | 
			
		||||
                relay_url: format!("https://localhost:{}", port(0)),
 | 
			
		||||
                listen_address: LOCALHOST_IP.to_string(),
 | 
			
		||||
                root_certificate: Some(pki.root_ca_crt.file_path()),
 | 
			
		||||
                tls_cert: Some(pki.expired_client_crt.file_path()),
 | 
			
		||||
                tls_key: Some(pki.valid_client_key.file_path()),
 | 
			
		||||
                ..Default::default()
 | 
			
		||||
            })
 | 
			
		||||
            .await
 | 
			
		||||
            .unwrap_err();
 | 
			
		||||
        })
 | 
			
		||||
        .await;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								src/test/tls_auth_invalid_certificate.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/test/tls_auth_invalid_certificate.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
use tokio::task;
 | 
			
		||||
 | 
			
		||||
use crate::tcp_relay_client::client_config::ClientConfig;
 | 
			
		||||
use crate::tcp_relay_server::server_config::ServerConfig;
 | 
			
		||||
use crate::test::dummy_tcp_sockets::{wait_for_port, DummyTCPServer};
 | 
			
		||||
use crate::test::pki::Pki;
 | 
			
		||||
use crate::test::{get_port_number, PortsAllocation, LOCALHOST_IP};
 | 
			
		||||
 | 
			
		||||
fn port(index: u16) -> u16 {
 | 
			
		||||
    get_port_number(PortsAllocation::TlsAuthInvalidClientCertificate, index)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::test]
 | 
			
		||||
async fn test() {
 | 
			
		||||
    let _ = env_logger::builder().is_test(true).try_init();
 | 
			
		||||
 | 
			
		||||
    // Start internal service
 | 
			
		||||
    let local_server = DummyTCPServer::start(port(1)).await;
 | 
			
		||||
    tokio::spawn(async move {
 | 
			
		||||
        local_server.loop_conn_square_operations().await;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    let pki = Pki::load();
 | 
			
		||||
 | 
			
		||||
    let local_set = task::LocalSet::new();
 | 
			
		||||
    local_set
 | 
			
		||||
        .run_until(async move {
 | 
			
		||||
            wait_for_port(port(1)).await;
 | 
			
		||||
 | 
			
		||||
            // Start server relay
 | 
			
		||||
            task::spawn_local(crate::tcp_relay_server::run_app(ServerConfig {
 | 
			
		||||
                tokens: vec![],
 | 
			
		||||
                tokens_file: None,
 | 
			
		||||
                ports: vec![port(1)],
 | 
			
		||||
                upstream_server: "127.0.0.1".to_string(),
 | 
			
		||||
                listen_address: format!("127.0.0.1:{}", port(0)),
 | 
			
		||||
                increment_ports: 1,
 | 
			
		||||
                tls_cert: Some(pki.localhost_crt.file_path()),
 | 
			
		||||
                tls_key: Some(pki.localhost_key.file_path()),
 | 
			
		||||
                tls_client_auth_root_cert: Some(pki.other_ca_crt.file_path()),
 | 
			
		||||
                tls_revocation_list: Some(pki.other_ca_crl.file_path()),
 | 
			
		||||
            }));
 | 
			
		||||
            wait_for_port(port(0)).await;
 | 
			
		||||
 | 
			
		||||
            // Start client relay
 | 
			
		||||
            crate::tcp_relay_client::run_app(ClientConfig {
 | 
			
		||||
                relay_url: format!("https://localhost:{}", port(0)),
 | 
			
		||||
                listen_address: LOCALHOST_IP.to_string(),
 | 
			
		||||
                root_certificate: Some(pki.root_ca_crt.file_path()),
 | 
			
		||||
                tls_cert: Some(pki.revoked_client_crt.file_path()),
 | 
			
		||||
                tls_key: Some(pki.revoked_client_key.file_path()),
 | 
			
		||||
                ..Default::default()
 | 
			
		||||
            })
 | 
			
		||||
            .await
 | 
			
		||||
            .unwrap_err();
 | 
			
		||||
        })
 | 
			
		||||
        .await;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								src/test/tls_auth_revoked_certificate.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/test/tls_auth_revoked_certificate.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
use tokio::task;
 | 
			
		||||
 | 
			
		||||
use crate::tcp_relay_client::client_config::ClientConfig;
 | 
			
		||||
use crate::tcp_relay_server::server_config::ServerConfig;
 | 
			
		||||
use crate::test::dummy_tcp_sockets::{wait_for_port, DummyTCPServer};
 | 
			
		||||
use crate::test::pki::Pki;
 | 
			
		||||
use crate::test::{get_port_number, PortsAllocation, LOCALHOST_IP};
 | 
			
		||||
 | 
			
		||||
fn port(index: u16) -> u16 {
 | 
			
		||||
    get_port_number(PortsAllocation::TlsAuthRevokedClientCertificate, index)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::test]
 | 
			
		||||
async fn test() {
 | 
			
		||||
    let _ = env_logger::builder().is_test(true).try_init();
 | 
			
		||||
 | 
			
		||||
    // Start internal service
 | 
			
		||||
    let local_server = DummyTCPServer::start(port(1)).await;
 | 
			
		||||
    tokio::spawn(async move {
 | 
			
		||||
        local_server.loop_conn_square_operations().await;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    let pki = Pki::load();
 | 
			
		||||
 | 
			
		||||
    let local_set = task::LocalSet::new();
 | 
			
		||||
    local_set
 | 
			
		||||
        .run_until(async move {
 | 
			
		||||
            wait_for_port(port(1)).await;
 | 
			
		||||
 | 
			
		||||
            // Start server relay
 | 
			
		||||
            task::spawn_local(crate::tcp_relay_server::run_app(ServerConfig {
 | 
			
		||||
                tokens: vec![],
 | 
			
		||||
                tokens_file: None,
 | 
			
		||||
                ports: vec![port(1)],
 | 
			
		||||
                upstream_server: "127.0.0.1".to_string(),
 | 
			
		||||
                listen_address: format!("127.0.0.1:{}", port(0)),
 | 
			
		||||
                increment_ports: 1,
 | 
			
		||||
                tls_cert: Some(pki.localhost_crt.file_path()),
 | 
			
		||||
                tls_key: Some(pki.localhost_key.file_path()),
 | 
			
		||||
                tls_client_auth_root_cert: Some(pki.root_ca_crt.file_path()),
 | 
			
		||||
                tls_revocation_list: Some(pki.root_ca_crl.file_path()),
 | 
			
		||||
            }));
 | 
			
		||||
            wait_for_port(port(0)).await;
 | 
			
		||||
 | 
			
		||||
            // Start client relay
 | 
			
		||||
            crate::tcp_relay_client::run_app(ClientConfig {
 | 
			
		||||
                relay_url: format!("https://localhost:{}", port(0)),
 | 
			
		||||
                listen_address: LOCALHOST_IP.to_string(),
 | 
			
		||||
                root_certificate: Some(pki.root_ca_crt.file_path()),
 | 
			
		||||
                tls_cert: Some(pki.revoked_client_crt.file_path()),
 | 
			
		||||
                tls_key: Some(pki.revoked_client_key.file_path()),
 | 
			
		||||
                ..Default::default()
 | 
			
		||||
            })
 | 
			
		||||
            .await
 | 
			
		||||
            .unwrap_err();
 | 
			
		||||
        })
 | 
			
		||||
        .await;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user