download: Serialise proxy environment tests
In order to ensure that we do not stomp on each other when running
tests in the download crate to verify proxy behaviour, introduce a
Mutex to guard against this.
@@ -4,13 +4,19 @@ use std::env::{remove_var, set_var};
use std::error::Error;
use std::net::TcpListener;
use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::Mutex;
use std::thread;
use std::time::Duration;
use env_proxy::for_url;
+use lazy_static::lazy_static;
use reqwest::{blocking::Client, Proxy};
use url::Url;
+lazy_static! {
+ static ref SERIALISE_TESTS: Mutex<()> = Mutex::new(());
+}
+
fn scrub_env() {
remove_var("http_proxy");
remove_var("https_proxy");
@@ -26,6 +32,9 @@ fn scrub_env() {
// Tests for correctly retrieving the proxy (host, port) tuple from $https_proxy
#[test]
fn read_basic_proxy_params() {
+ let _guard = SERIALISE_TESTS
+ .lock()
+ .expect("Unable to lock the test guard");
scrub_env();
set_var("https_proxy", "http://proxy.example.com:8080");
let u = Url::parse("https://www.example.org").ok().unwrap();
@@ -39,6 +48,9 @@ fn read_basic_proxy_params() {
#[test]
fn socks_proxy_request() {
static CALL_COUNT: AtomicUsize = AtomicUsize::new(0);
+ let _guard = SERIALISE_TESTS
+ .lock()
+ .expect("Unable to lock the test guard");
scrub_env();
set_var("all_proxy", "socks5://127.0.0.1:1080");
