diff options
Diffstat (limited to 'android/test/e2e/src')
5 files changed, 118 insertions, 26 deletions
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt index 1ba78818a2..0ed78f6db3 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt @@ -9,7 +9,6 @@ import net.mullvad.mullvadvpn.test.common.page.ConnectPage import net.mullvad.mullvadvpn.test.common.page.SelectLocationPage import net.mullvad.mullvadvpn.test.common.page.SettingsPage import net.mullvad.mullvadvpn.test.common.page.SystemVpnConfigurationAlert -import net.mullvad.mullvadvpn.test.common.page.TopBar import net.mullvad.mullvadvpn.test.common.page.VpnSettingsPage import net.mullvad.mullvadvpn.test.common.page.on import net.mullvad.mullvadvpn.test.common.rule.ForgetAllVpnAppsInSettingsTestRule @@ -72,7 +71,7 @@ class ConnectionTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { @ClearFirewallRules fun testWireGuardObfuscationAutomatic() = runBlocking { app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber) - enableLocalNetworkSharing() + app.enableLocalNetworkSharing() on<ConnectPage> { clickSelectLocation() } @@ -109,7 +108,7 @@ class ConnectionTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { @ClearFirewallRules fun testWireGuardObfuscationOff() = runBlocking { app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber) - enableLocalNetworkSharing() + app.enableLocalNetworkSharing() on<ConnectPage> { clickSelectLocation() } @@ -134,13 +133,13 @@ class ConnectionTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { firewallClient.createRule(firewallRule) // Enable UDP-over-TCP - on<TopBar> { clickSettings() } + on<ConnectPage> { clickSettings() } on<SettingsPage> { clickVpnSettings() } on<VpnSettingsPage> { - scrollUntilWireguardObfuscationOffCell() - clickWireguardObfuscationOffCell() + scrollUntilWireGuardObfuscationOffCell() + clickWireGuardObfuscationOffCell() } device.pressBack() @@ -162,7 +161,7 @@ class ConnectionTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { fun testUDPOverTCP() = runBlocking<Unit> { app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber) - enableLocalNetworkSharing() + app.enableLocalNetworkSharing() on<ConnectPage> { clickSelectLocation() } @@ -187,12 +186,12 @@ class ConnectionTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { firewallClient.createRule(firewallRule) // Enable UDP-over-TCP - on<TopBar> { clickSettings() } + on<ConnectPage> { clickSettings() } on<SettingsPage> { clickVpnSettings() } on<VpnSettingsPage> { - scrollUntilWireguardObfuscationUdpOverTcpCell() + scrollUntilWireGuardObfuscationUdpOverTcpCell() clickWireguardObfuscationUdpOverTcpCell() } @@ -206,17 +205,6 @@ class ConnectionTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { } } - private fun enableLocalNetworkSharing() { - on<TopBar> { clickSettings() } - - on<SettingsPage> { clickVpnSettings() } - - on<VpnSettingsPage> { clickLocalNetworkSharingSwitch() } - - device.pressBack() - device.pressBack() - } - companion object { const val VERY_FORGIVING_WIREGUARD_OFF_CONNECTION_TIMEOUT = 60000L const val UNSUCCESSFUL_CONNECTION_TIMEOUT = 60000L diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt index dfa050f9bc..f74355ae2a 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt @@ -57,5 +57,9 @@ abstract class EndToEndTest(private val infra: String) { const val DEFAULT_COUNTRY = "Sweden" const val DEFAULT_CITY = "Gothenburg" const val DEFAULT_RELAY = "se-got-wg-001" + + const val DAITA_COMPATIBLE_COUNTRY = "Relay Software Country" + const val DAITA_COMPATIBLE_CITY = "Relay Software city" + const val DAITA_COMPATIBLE_RELAY = "se-got-wg-002" } } diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt index 51b6d84708..46f1271257 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt @@ -5,10 +5,10 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import net.mullvad.mullvadvpn.test.common.misc.Attachment import net.mullvad.mullvadvpn.test.common.page.ConnectPage +import net.mullvad.mullvadvpn.test.common.page.DaitaSettingsPage import net.mullvad.mullvadvpn.test.common.page.SelectLocationPage import net.mullvad.mullvadvpn.test.common.page.SettingsPage import net.mullvad.mullvadvpn.test.common.page.SystemVpnConfigurationAlert -import net.mullvad.mullvadvpn.test.common.page.TopBar import net.mullvad.mullvadvpn.test.common.page.VpnSettingsPage import net.mullvad.mullvadvpn.test.common.page.WireGuardCustomPortDialog import net.mullvad.mullvadvpn.test.common.page.on @@ -36,7 +36,7 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { fun setupVPNSettings() { app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber) - on<TopBar> { clickSettings() } + on<ConnectPage> { clickSettings() } on<SettingsPage> { clickVpnSettings() } @@ -159,4 +159,104 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { val leakRules = listOf(NoTrafficToHostRule(targetIpAddress)) LeakCheck.assertLeaks(capturedStreams, leakRules) } + + @Test + @HasDependencyOnLocalAPI + fun testLeakWhenVpnSettingsChange() = + runBlocking<Unit> { + app.launch() + // Obfuscation and Post-Quantum are by default set to automatic. Explicitly set to off. + disableObfuscation() + disablePostQuantum() + + on<ConnectPage> { clickSelectLocation() } + + on<SelectLocationPage> { + clickLocationExpandButton(DAITA_COMPATIBLE_COUNTRY) + clickLocationExpandButton(DAITA_COMPATIBLE_CITY) + clickLocationCell(DAITA_COMPATIBLE_RELAY) + } + + on<SystemVpnConfigurationAlert> { clickOk() } + + on<ConnectPage> { waitForConnectedLabel() } + + // Capture generated traffic to a specific host + val targetIpAddress = BuildConfig.TRAFFIC_GENERATION_IP_ADDRESS + val targetPort = 80 + val captureResult: PacketCaptureResult = + PacketCapture().capturePackets { + TrafficGenerator(targetIpAddress, targetPort).generateTraffic(10.milliseconds) { + delay( + 1000.milliseconds + ) // Give it some time for generating traffic in tunnel before changing + // settings + + enableDAITA() + enableShadowsocks() + + on<ConnectPage> { waitForConnectedLabel() } + + delay( + 1000.milliseconds + ) // Give it some time for generating traffic in tunnel after enabling + // settings + } + } + + val capturedStreams = captureResult.streams + val capturedPcap = captureResult.pcap + val timestamp = System.currentTimeMillis() + Attachment.saveAttachment( + "capture-testLeakWhenVpnSettingsChange-$timestamp.pcap", + capturedPcap, + ) + + val leakRules = listOf(NoTrafficToHostRule(targetIpAddress)) + LeakCheck.assertLeaks(capturedStreams, leakRules) + } + + private fun disableObfuscation() { + on<ConnectPage> { clickSettings() } + on<SettingsPage> { clickVpnSettings() } + on<VpnSettingsPage> { + scrollUntilWireGuardObfuscationUdpOverTcpCell() + clickWireGuardObfuscationOffCell() + } + + device.pressBack() + device.pressBack() + } + + private fun disablePostQuantum() { + on<ConnectPage> { clickSettings() } + on<SettingsPage> { clickVpnSettings() } + on<VpnSettingsPage> { + scrollUntilPostQuantumOffCell() + clickPostQuantumOffCell() + } + + device.pressBack() + device.pressBack() + } + + private fun enableShadowsocks() { + on<ConnectPage> { clickSettings() } + on<SettingsPage> { clickVpnSettings() } + on<VpnSettingsPage> { + scrollUntilWireGuardObfuscationShadowsocksCell() + clickWireGuardObfuscationShadowsocksCell() + } + + device.pressBack() + device.pressBack() + } + + private fun enableDAITA() { + on<ConnectPage> { clickSettings() } + on<SettingsPage> { clickDaita() } + on<DaitaSettingsPage> { clickEnableSwitch() } + device.pressBack() + device.pressBack() + } } diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt index af03c462c6..f99cfc5161 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt @@ -1,8 +1,8 @@ package net.mullvad.mullvadvpn.test.e2e import net.mullvad.mullvadvpn.test.common.page.AccountPage +import net.mullvad.mullvadvpn.test.common.page.ConnectPage import net.mullvad.mullvadvpn.test.common.page.LoginPage -import net.mullvad.mullvadvpn.test.common.page.TopBar import net.mullvad.mullvadvpn.test.common.page.on import net.mullvad.mullvadvpn.test.e2e.misc.AccountTestRule import org.junit.jupiter.api.Test @@ -17,7 +17,7 @@ class LogoutTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { // Given app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber) - on<TopBar> { clickAccount() } + on<ConnectPage> { clickAccount() } on<AccountPage> { clickLogOut() } diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt index 402939db7a..8d8467392c 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt @@ -1,9 +1,9 @@ package net.mullvad.mullvadvpn.test.e2e import net.mullvad.mullvadvpn.test.common.annotation.SkipForFlavors +import net.mullvad.mullvadvpn.test.common.page.LoginPage import net.mullvad.mullvadvpn.test.common.page.MullvadWebsite import net.mullvad.mullvadvpn.test.common.page.SettingsPage -import net.mullvad.mullvadvpn.test.common.page.TopBar import net.mullvad.mullvadvpn.test.common.page.on import org.junit.jupiter.api.Test @@ -13,7 +13,7 @@ class WebLinkTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) { fun testOpenFaqFromApp() { app.launchAndEnsureOnLoginPage() - on<TopBar> { clickSettings() } + on<LoginPage> { clickSettings() } on<SettingsPage> { clickFaqAndGuides() } |
