summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-02-06 14:22:59 +0100
committerDavid Lönnhager <david.l@mullvad.net>2024-02-07 17:34:19 +0100
commit0bfaddec42d4a2db516d99bc572b27e394427aa8 (patch)
tree44d1359f75d6dcf2be62f44ed54ddd89cab94d25
parentf94d31a75bcfc0228dee7835cb8c1a992cf29f1a (diff)
downloadmullvadvpn-0bfaddec42d4a2db516d99bc572b27e394427aa8.tar.xz
mullvadvpn-0bfaddec42d4a2db516d99bc572b27e394427aa8.zip
Move testing SOCKS server to own crate
-rw-r--r--test/Cargo.lock13
-rw-r--r--test/Cargo.toml1
-rw-r--r--test/socks-server/Cargo.toml18
-rw-r--r--test/socks-server/src/lib.rs38
-rw-r--r--test/test-manager/Cargo.toml2
-rw-r--r--test/test-manager/src/main.rs36
6 files changed, 77 insertions, 31 deletions
diff --git a/test/Cargo.lock b/test/Cargo.lock
index 725d56952e..64d3552540 100644
--- a/test/Cargo.lock
+++ b/test/Cargo.lock
@@ -2890,6 +2890,17 @@ dependencies = [
]
[[package]]
+name = "socks-server"
+version = "0.0.0"
+dependencies = [
+ "err-derive",
+ "fast-socks5",
+ "futures",
+ "log",
+ "tokio",
+]
+
+[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3109,7 +3120,6 @@ dependencies = [
"dirs",
"env_logger",
"err-derive",
- "fast-socks5",
"futures",
"inventory",
"ipnetwork 0.20.0",
@@ -3126,6 +3136,7 @@ dependencies = [
"regex",
"serde",
"serde_json",
+ "socks-server",
"ssh2",
"talpid-types",
"tarpc",
diff --git a/test/Cargo.toml b/test/Cargo.toml
index a6653530b5..27c0f94469 100644
--- a/test/Cargo.toml
+++ b/test/Cargo.toml
@@ -11,6 +11,7 @@ members = [
"test-manager",
"test-runner",
"test-rpc",
+ "socks-server",
]
[workspace.lints.rust]
diff --git a/test/socks-server/Cargo.toml b/test/socks-server/Cargo.toml
new file mode 100644
index 0000000000..ba6d1ba4f8
--- /dev/null
+++ b/test/socks-server/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "socks-server"
+description = "Contains a simple SOCKS5 server"
+authors.workspace = true
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+
+[lints]
+workspace = true
+
+[dependencies]
+fast-socks5 = "0.9.5"
+err-derive = { workspace = true }
+tokio = { workspace = true }
+log = { workspace = true }
+futures = { workspace = true }
diff --git a/test/socks-server/src/lib.rs b/test/socks-server/src/lib.rs
new file mode 100644
index 0000000000..19638efe39
--- /dev/null
+++ b/test/socks-server/src/lib.rs
@@ -0,0 +1,38 @@
+use futures::StreamExt;
+use std::io;
+use std::net::SocketAddr;
+
+#[derive(err_derive::Error, Debug)]
+pub enum Error {
+ #[error(display = "Failed to start SOCKS5 server")]
+ StartSocksServer(#[error(source)] io::Error),
+}
+
+pub async fn spawn(bind_addr: SocketAddr) -> Result<tokio::task::JoinHandle<()>, Error> {
+ let socks_server: fast_socks5::server::Socks5Server =
+ fast_socks5::server::Socks5Server::bind(bind_addr)
+ .await
+ .map_err(Error::StartSocksServer)?;
+
+ let handle = 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}");
+ }
+ }
+ }
+ });
+ Ok(handle)
+}
diff --git a/test/test-manager/Cargo.toml b/test/test-manager/Cargo.toml
index f7a57fab1c..72230a2edd 100644
--- a/test/test-manager/Cargo.toml
+++ b/test/test-manager/Cargo.toml
@@ -11,7 +11,6 @@ rust-version.workspace = true
workspace = true
[dependencies]
-fast-socks5 = "0.9.5"
anyhow = { version = "1", features = ["backtrace"] }
futures = { workspace = true }
regex = "1"
@@ -43,6 +42,7 @@ pcap = { version = "0.10.1", features = ["capture-stream"] }
pnet_packet = "0.31.0"
test-rpc = { path = "../test-rpc" }
+socks-server = { path = "../socks-server" }
env_logger = { workspace = true }
diff --git a/test/test-manager/src/main.rs b/test/test-manager/src/main.rs
index a06b2f0257..d09dab0f53 100644
--- a/test/test-manager/src/main.rs
+++ b/test/test-manager/src/main.rs
@@ -14,7 +14,6 @@ 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;
@@ -250,33 +249,12 @@ 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}");
- }
- }
- }
- });
+ // For convenience, spawn a SOCKS5 server that is reachable for tests that need it
+ let socks = socks_server::spawn(SocketAddr::new(
+ crate::vm::network::NON_TUN_GATEWAY.into(),
+ crate::vm::network::SOCKS5_PORT,
+ ))
+ .await?;
let skip_wait = vm_config.provisioner != config::Provisioner::Noop;
@@ -321,7 +299,7 @@ async fn main() -> Result<()> {
if display {
instance.wait().await;
}
- socks_server.abort();
+ socks.abort();
result
}
Commands::FormatTestReports { reports } => {