Skip to content

Commit b1252be

Browse files
committed
Add SOCKS5 server to test-manager
1 parent f42dcb3 commit b1252be

File tree

4 files changed

+50
-0
lines changed

4 files changed

+50
-0
lines changed

test/Cargo.lock

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/test-manager/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ rust-version.workspace = true
1111
workspace = true
1212

1313
[dependencies]
14+
fast-socks5 = "0.9.5"
1415
anyhow = { version = "1", features = ["backtrace"] }
1516
futures = { workspace = true }
1617
regex = "1"

test/test-manager/src/main.rs

+31
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ use std::path::PathBuf;
1414
use anyhow::Context;
1515
use anyhow::Result;
1616
use clap::Parser;
17+
use futures::StreamExt;
18+
use std::net::SocketAddr;
1719
use tests::config::DEFAULT_MULLVAD_HOST;
1820

1921
/// Test manager for Mullvad VPN app
@@ -248,6 +250,34 @@ async fn main() -> Result<()> {
248250
.await
249251
.context("Failed to run provisioning for VM")?;
250252

253+
let socks_server: fast_socks5::server::Socks5Server =
254+
fast_socks5::server::Socks5Server::bind(SocketAddr::new(
255+
crate::vm::network::NON_TUN_GATEWAY.into(),
256+
crate::vm::network::SOCKS5_PORT,
257+
))
258+
.await
259+
.context("Failed to start SOCKS5 server")?;
260+
let socks_server = tokio::spawn(async move {
261+
let mut incoming = socks_server.incoming();
262+
263+
while let Some(new_client) = incoming.next().await {
264+
match new_client {
265+
Ok(socket) => {
266+
let fut = socket.upgrade_to_socks5();
267+
tokio::spawn(async move {
268+
match fut.await {
269+
Ok(socket) => log::info!("socks client disconnected"),
270+
Err(error) => log::error!("socks client failed: {error}"),
271+
}
272+
});
273+
}
274+
Err(error) => {
275+
log::error!("failed to accept socks client: {error}");
276+
}
277+
}
278+
}
279+
});
280+
251281
let skip_wait = vm_config.provisioner != config::Provisioner::Noop;
252282

253283
let result = run_tests::run(
@@ -291,6 +321,7 @@ async fn main() -> Result<()> {
291321
if display {
292322
instance.wait().await;
293323
}
324+
socks_server.abort();
294325
result
295326
}
296327
Commands::FormatTestReports { reports } => {

test/test-manager/src/vm/network/mod.rs

+3
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,6 @@ pub use platform::{
1515
CUSTOM_TUN_REMOTE_REAL_PORT, CUSTOM_TUN_REMOTE_TUN_ADDR, DUMMY_LAN_INTERFACE_IP,
1616
NON_TUN_GATEWAY,
1717
};
18+
19+
/// Port on NON_TUN_GATEWAY that hosts a SOCKS5 server
20+
pub const SOCKS5_PORT: u16 = 54321;

0 commit comments

Comments
 (0)