diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-01-03 14:07:24 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-01-12 13:24:37 +0100 |
| commit | c220b26c47af5db07a0ca4342f504e41ec725d87 (patch) | |
| tree | 629da855b26eb9bd6466104f613a5c0491090b6e /test/test-manager/src/tests | |
| parent | c25de4da4f09cd55b5209c985833beae0741ef21 (diff) | |
| download | mullvadvpn-c220b26c47af5db07a0ca4342f504e41ec725d87.tar.xz mullvadvpn-c220b26c47af5db07a0ca4342f504e41ec725d87.zip | |
Add e2e test for containers on Linux
Diffstat (limited to 'test/test-manager/src/tests')
| -rw-r--r-- | test/test-manager/src/tests/mod.rs | 1 | ||||
| -rw-r--r-- | test/test-manager/src/tests/software.rs | 67 |
2 files changed, 68 insertions, 0 deletions
diff --git a/test/test-manager/src/tests/mod.rs b/test/test-manager/src/tests/mod.rs index ee8b7038fe..08251eb27b 100644 --- a/test/test-manager/src/tests/mod.rs +++ b/test/test-manager/src/tests/mod.rs @@ -4,6 +4,7 @@ mod dns; mod helpers; mod install; mod settings; +mod software; mod test_metadata; mod tunnel; mod tunnel_state; diff --git a/test/test-manager/src/tests/software.rs b/test/test-manager/src/tests/software.rs new file mode 100644 index 0000000000..1c52f5032f --- /dev/null +++ b/test/test-manager/src/tests/software.rs @@ -0,0 +1,67 @@ +//! Tests of interoperability with other software + +use super::{helpers, Error, TestContext}; +use mullvad_management_interface::ManagementServiceClient; +use test_macro::test_function; +use test_rpc::{ExecResult, ServiceClient}; + +/// This test fails if there is no connectivity, or name resolution fails, when connected to a VPN. +#[test_function(target_os = "linux")] +pub async fn test_containers( + _: TestContext, + rpc: ServiceClient, + mut mullvad_client: ManagementServiceClient, +) -> Result<(), Error> { + let result = probe_container_connectivity(&rpc).await?; + assert!( + result.success(), + "containers should have connectivity when disconnected from the VPN" + ); + + helpers::connect_and_wait(&mut mullvad_client).await?; + + let result = probe_container_connectivity(&rpc).await?; + assert!( + result.success(), + "containers should have connectivity when connected to the VPN" + ); + + Ok(()) +} + +/// This function executes curl inside podman or docker in the guest/test runner. +async fn probe_container_connectivity(rpc: &ServiceClient) -> Result<ExecResult, Error> { + let has_podman = rpc.exec("bash", ["-c", "which podman"]).await?.success(); + + let result = if has_podman { + // podman run docker.io/curlimages/curl:latest https://am.i.mullvad.net/connected + rpc.exec( + "podman", + [ + "run", + "docker.io/curlimages/curl:latest", + "https://am.i.mullvad.net/connected", + ], + ) + .await? + } else { + // sudo docker run docker.io/curlimages/curl:latest https://am.i.mullvad.net/connected + rpc.exec( + "sudo", + [ + "docker", + "run", + "docker.io/curlimages/curl:latest", + "https://am.i.mullvad.net/connected", + ], + ) + .await? + }; + + if !result.success() { + let stdout = std::str::from_utf8(&result.stdout).unwrap_or("invalid utf8"); + let stderr = std::str::from_utf8(&result.stderr).unwrap_or("invalid utf8"); + log::error!("probe_container_connectivity failed:\n\nstdout:\n\n{stdout}\n\n{stderr}\n"); + } + Ok(result) +} |
