summaryrefslogtreecommitdiffhomepage
path: root/android/test/e2e/src
diff options
context:
space:
mode:
authorNiklas Berglund <niklas.berglund@gmail.com>2024-12-11 16:32:21 +0100
committerDavid Göransson <david.goransson@mullvad.net>2024-12-13 15:39:24 +0100
commitd34461affd206b7bf0ee76919f478f362056de5f (patch)
tree594220c0b1bc6db479a19f7ffa06d3d7c85a2f46 /android/test/e2e/src
parent37e90ed5ca9a3a094db531166404454cfcd81b33 (diff)
downloadmullvadvpn-d34461affd206b7bf0ee76919f478f362056de5f.tar.xz
mullvadvpn-d34461affd206b7bf0ee76919f478f362056de5f.zip
Migrate remaining e2e tests to POP
Diffstat (limited to 'android/test/e2e/src')
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt112
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt16
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt27
3 files changed, 83 insertions, 72 deletions
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 47f2c72068..51b6d84708 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
@@ -1,16 +1,17 @@
package net.mullvad.mullvadvpn.test.e2e
-import androidx.test.uiautomator.By
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
-import net.mullvad.mullvadvpn.compose.test.EXPAND_BUTTON_TEST_TAG
-import net.mullvad.mullvadvpn.compose.test.SELECT_LOCATION_BUTTON_TEST_TAG
-import net.mullvad.mullvadvpn.compose.test.SWITCH_TEST_TAG
-import net.mullvad.mullvadvpn.compose.test.TOP_BAR_SETTINGS_BUTTON
-import net.mullvad.mullvadvpn.test.common.constant.VERY_LONG_TIMEOUT
-import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
import net.mullvad.mullvadvpn.test.common.misc.Attachment
+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.WireGuardCustomPortDialog
+import net.mullvad.mullvadvpn.test.common.page.on
import net.mullvad.mullvadvpn.test.common.rule.ForgetAllVpnAppsInSettingsTestRule
import net.mullvad.mullvadvpn.test.e2e.annotations.HasDependencyOnLocalAPI
import net.mullvad.mullvadvpn.test.e2e.misc.AccountTestRule
@@ -34,18 +35,22 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
@BeforeEach
fun setupVPNSettings() {
app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber)
- device.findObjectWithTimeout(By.res(TOP_BAR_SETTINGS_BUTTON)).click()
- device.findObjectWithTimeout(By.text("VPN settings")).click()
- val localNetworkSharingCell =
- device.findObjectWithTimeout(By.text("Local network sharing")).parent
- val localNetworkSharingSwitch =
- localNetworkSharingCell.findObjectWithTimeout(By.res(SWITCH_TEST_TAG))
+ on<TopBar> { clickSettings() }
- localNetworkSharingSwitch.click()
+ on<SettingsPage> { clickVpnSettings() }
- // Only use port 51820 to make packet capture more deterministic
- device.findObjectWithTimeout(By.text("51820")).click()
+ on<VpnSettingsPage> {
+ clickLocalNetworkSharingSwitch()
+ clickWireguardCustomPort()
+ }
+
+ on<WireGuardCustomPortDialog> {
+ enterCustomPort("51820")
+ clickSetPort()
+ }
+
+ on<VpnSettingsPage> {}
device.pressBack()
device.pressBack()
@@ -56,18 +61,26 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
fun testNegativeLeak() =
runBlocking<Unit> {
app.launch()
- device.findObjectWithTimeout(By.text("DISCONNECTED"))
- val targetIpAddress = BuildConfig.TRAFFIC_GENERATION_IP_ADDRESS
- val targetPort = 80
+ on<ConnectPage> {
+ waitForDisconnectedLabel()
+
+ clickSelectLocation()
+ }
- device.findObjectWithTimeout(By.res(SELECT_LOCATION_BUTTON_TEST_TAG)).click()
- clickLocationExpandButton(DEFAULT_COUNTRY)
- clickLocationExpandButton(DEFAULT_CITY)
- device.findObjectWithTimeout(By.text(DEFAULT_RELAY)).click()
- device.findObjectWithTimeout(By.text("OK")).click()
- device.findObjectWithTimeout(By.text("CONNECTED"), VERY_LONG_TIMEOUT)
+ on<SelectLocationPage> {
+ clickLocationExpandButton(DEFAULT_COUNTRY)
+ clickLocationExpandButton(DEFAULT_CITY)
+ clickLocationCell(DEFAULT_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 =
PacketCapture().capturePackets {
TrafficGenerator(targetIpAddress, targetPort).generateTraffic(10.milliseconds) {
@@ -76,11 +89,10 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
}
}
- device.findObjectWithTimeout(By.text("Disconnect")).click()
+ on<ConnectPage> { clickDisconnect() }
val capturedStreams = captureResult.streams
val capturedPcap = captureResult.pcap
-
val timestamp = System.currentTimeMillis()
Attachment.saveAttachment("capture-testNegativeLeak-$timestamp.pcap", capturedPcap)
@@ -93,37 +105,51 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
fun testShouldHaveNegativeLeak() =
runBlocking<Unit> {
app.launch()
- device.findObjectWithTimeout(By.text("DISCONNECTED"))
- val targetIpAddress = BuildConfig.TRAFFIC_GENERATION_IP_ADDRESS
- val targetPort = 80
+ on<ConnectPage> {
+ waitForDisconnectedLabel()
+
+ clickSelectLocation()
+ }
+
+ on<SelectLocationPage> {
+ clickLocationExpandButton(DEFAULT_COUNTRY)
+ clickLocationExpandButton(DEFAULT_CITY)
+ clickLocationCell(DEFAULT_RELAY)
+ }
- device.findObjectWithTimeout(By.res(SELECT_LOCATION_BUTTON_TEST_TAG)).click()
- delay(1000.milliseconds)
- clickLocationExpandButton(DEFAULT_COUNTRY)
- clickLocationExpandButton(DEFAULT_CITY)
- device.findObjectWithTimeout(By.text(DEFAULT_RELAY)).click()
- device.findObjectWithTimeout(By.text("OK")).click()
- device.findObjectWithTimeout(By.text("CONNECTED"), VERY_LONG_TIMEOUT)
+ 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(
3000.milliseconds
) // Give it some time for generating traffic in tunnel
- device.findObjectWithTimeout(By.text("Disconnect")).click()
+
+ on<ConnectPage> { clickDisconnect() }
+
delay(
2000.milliseconds
) // Give it some time to leak traffic outside of tunnel
- device.findObjectWithTimeout(By.text("Connect")).click()
+
+ on<ConnectPage> {
+ clickConnect()
+ waitForConnectedLabel()
+ }
+
delay(
3000.milliseconds
) // Give it some time for generating traffic in tunnel
}
}
- device.findObjectWithTimeout(By.text("Disconnect")).click()
+ on<ConnectPage> { clickDisconnect() }
val capturedStreams = captureResult.streams
val capturedPcap = captureResult.pcap
@@ -133,10 +159,4 @@ class LeakTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
val leakRules = listOf(NoTrafficToHostRule(targetIpAddress))
LeakCheck.assertLeaks(capturedStreams, leakRules)
}
-
- private fun clickLocationExpandButton(locationName: String) {
- val locationCell = device.findObjectWithTimeout(By.text(locationName)).parent.parent
- val expandButton = locationCell.findObjectWithTimeout(By.res(EXPAND_BUTTON_TEST_TAG))
- expandButton.click()
- }
}
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 7a8c8818f4..af03c462c6 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,9 +1,10 @@
package net.mullvad.mullvadvpn.test.e2e
-import androidx.test.uiautomator.By
-import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
+import net.mullvad.mullvadvpn.test.common.page.AccountPage
+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.Assertions.assertNotNull
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
@@ -16,11 +17,10 @@ class LogoutTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
// Given
app.launchAndEnsureLoggedIn(accountTestRule.validAccountNumber)
- // When
- app.clickAccountCog()
- app.clickActionButtonByText("Log out")
+ on<TopBar> { clickAccount() }
- // Then
- assertNotNull(device.findObjectWithTimeout(By.text("Login")))
+ on<AccountPage> { clickLogOut() }
+
+ on<LoginPage>()
}
}
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 1b774d1134..402939db7a 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,31 +1,22 @@
package net.mullvad.mullvadvpn.test.e2e
-import androidx.test.uiautomator.By
import net.mullvad.mullvadvpn.test.common.annotation.SkipForFlavors
-import net.mullvad.mullvadvpn.test.common.constant.VERY_LONG_TIMEOUT
-import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
-import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
-import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
+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
class WebLinkTest : EndToEndTest(BuildConfig.FLAVOR_infrastructure) {
@Test
@SkipForFlavors(currentFlavor = BuildConfig.FLAVOR_billing, "play")
fun testOpenFaqFromApp() {
- // Given
- app.launch()
+ app.launchAndEnsureOnLoginPage()
- // When
- device.clickAgreeOnPrivacyDisclaimer()
- device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove()
- device.findObjectWithTimeout(By.text("Login"))
- app.clickSettingsCog()
- app.clickListItemByText("FAQs & Guides")
+ on<TopBar> { clickSettings() }
- // Then
- device.findObjectWithTimeout(
- selector = By.text("Mullvad help center"),
- timeout = VERY_LONG_TIMEOUT,
- )
+ on<SettingsPage> { clickFaqAndGuides() }
+
+ on<MullvadWebsite>()
}
}