summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-02-06 11:06:49 +0100
committerDavid Lönnhager <david.l@mullvad.net>2024-02-07 17:34:19 +0100
commitf94d31a75bcfc0228dee7835cb8c1a992cf29f1a (patch)
tree130a2229167c3920ca632c0f22a4e38024e0a652 /test
parent20d9c98f5ec44166b461730fec9ca292b622265f (diff)
downloadmullvadvpn-f94d31a75bcfc0228dee7835cb8c1a992cf29f1a.tar.xz
mullvadvpn-f94d31a75bcfc0228dee7835cb8c1a992cf29f1a.zip
Add SOCKS5 server to test-manager
Diffstat (limited to 'test')
-rw-r--r--test/Cargo.lock15
-rw-r--r--test/test-manager/Cargo.toml1
-rw-r--r--test/test-manager/src/main.rs31
-rw-r--r--test/test-manager/src/vm/network/mod.rs3
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;