diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-02-06 11:06:49 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-02-07 17:34:19 +0100 |
| commit | f94d31a75bcfc0228dee7835cb8c1a992cf29f1a (patch) | |
| tree | 130a2229167c3920ca632c0f22a4e38024e0a652 /test | |
| parent | 20d9c98f5ec44166b461730fec9ca292b622265f (diff) | |
| download | mullvadvpn-f94d31a75bcfc0228dee7835cb8c1a992cf29f1a.tar.xz mullvadvpn-f94d31a75bcfc0228dee7835cb8c1a992cf29f1a.zip | |
Add SOCKS5 server to test-manager
Diffstat (limited to 'test')
| -rw-r--r-- | test/Cargo.lock | 15 | ||||
| -rw-r--r-- | test/test-manager/Cargo.toml | 1 | ||||
| -rw-r--r-- | test/test-manager/src/main.rs | 31 | ||||
| -rw-r--r-- | test/test-manager/src/vm/network/mod.rs | 3 |
4 files changed, 50 insertions, 0 deletions
diff --git a/test/Cargo.lock b/test/Cargo.lock index f48fec100d..725d56952e 100644 --- a/test/Cargo.lock +++ b/test/Cargo.lock @@ -828,6 +828,20 @@ dependencies = [ ] [[package]] +name = "fast-socks5" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbcc731f3c17a5053e07e6a2290918da75cd8b9b1217b419721f715674ac520c" +dependencies = [ + "anyhow", + "async-trait", + "log", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] name = "fastrand" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3095,6 +3109,7 @@ dependencies = [ "dirs", "env_logger", "err-derive", + "fast-socks5", "futures", "inventory", "ipnetwork 0.20.0", diff --git a/test/test-manager/Cargo.toml b/test/test-manager/Cargo.toml index 53c1c355f1..f7a57fab1c 100644 --- a/test/test-manager/Cargo.toml +++ b/test/test-manager/Cargo.toml @@ -11,6 +11,7 @@ rust-version.workspace = true workspace = true [dependencies] +fast-socks5 = "0.9.5" anyhow = { version = "1", features = ["backtrace"] } futures = { workspace = true } regex = "1" diff --git a/test/test-manager/src/main.rs b/test/test-manager/src/main.rs index f5e7a70d9f..a06b2f0257 100644 --- a/test/test-manager/src/main.rs +++ b/test/test-manager/src/main.rs @@ -14,6 +14,8 @@ use std::path::PathBuf; use anyhow::Context; use anyhow::Result; use clap::Parser; +use futures::StreamExt; +use std::net::SocketAddr; use tests::config::DEFAULT_MULLVAD_HOST; /// Test manager for Mullvad VPN app @@ -248,6 +250,34 @@ async fn main() -> Result<()> { .await .context("Failed to run provisioning for VM")?; + let socks_server: fast_socks5::server::Socks5Server = + fast_socks5::server::Socks5Server::bind(SocketAddr::new( + crate::vm::network::NON_TUN_GATEWAY.into(), + crate::vm::network::SOCKS5_PORT, + )) + .await + .context("Failed to start SOCKS5 server")?; + let socks_server = tokio::spawn(async move { + let mut incoming = socks_server.incoming(); + + while let Some(new_client) = incoming.next().await { + match new_client { + Ok(socket) => { + let fut = socket.upgrade_to_socks5(); + tokio::spawn(async move { + match fut.await { + Ok(_socket) => log::info!("socks client disconnected"), + Err(error) => log::error!("socks client failed: {error}"), + } + }); + } + Err(error) => { + log::error!("failed to accept socks client: {error}"); + } + } + } + }); + let skip_wait = vm_config.provisioner != config::Provisioner::Noop; let result = run_tests::run( @@ -291,6 +321,7 @@ async fn main() -> Result<()> { if display { instance.wait().await; } + socks_server.abort(); result } Commands::FormatTestReports { reports } => { diff --git a/test/test-manager/src/vm/network/mod.rs b/test/test-manager/src/vm/network/mod.rs index e12a95c713..944e241013 100644 --- a/test/test-manager/src/vm/network/mod.rs +++ b/test/test-manager/src/vm/network/mod.rs @@ -15,3 +15,6 @@ pub use platform::{ CUSTOM_TUN_REMOTE_REAL_PORT, CUSTOM_TUN_REMOTE_TUN_ADDR, DUMMY_LAN_INTERFACE_IP, NON_TUN_GATEWAY, }; + +/// Port on NON_TUN_GATEWAY that hosts a SOCKS5 server +pub const SOCKS5_PORT: u16 = 54321; |
