summaryrefslogtreecommitdiffhomepage
path: root/android/test
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-05-21 11:57:51 +0200
committerDavid Göransson <david.goransson@mullvad.net>2025-05-21 11:57:51 +0200
commitb708e86feb1235a6241cd12e1b8315cea19a12d5 (patch)
tree3946e8dc8792199eab45e6fee3d31775aa773fb8 /android/test
parentee8c0578c5d7f330b40272cdec1ee62af2c5fd20 (diff)
parentf2b6a3d2d04d33e106b794ae489d506651f41f91 (diff)
downloadmullvadvpn-b708e86feb1235a6241cd12e1b8315cea19a12d5.tar.xz
mullvadvpn-b708e86feb1235a6241cd12e1b8315cea19a12d5.zip
Merge branch 'rework-localproperties-and-e2eproperties-droid-1430'
Diffstat (limited to 'android/test')
-rw-r--r--android/test/e2e/README.md25
-rw-r--r--android/test/e2e/build.gradle.kts42
-rw-r--r--android/test/e2e/e2e.properties3
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt2
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt15
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HasDependencyOnLocalAPI.kt7
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HighlyRateLimited.kt8
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt4
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApi.kt2
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApiTest.kt5
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt2
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/Constants.kt47
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/AccountProvider.kt18
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt7
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/firewall/FirewallClient.kt5
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/PacketCapture.kt5
16 files changed, 94 insertions, 103 deletions
diff --git a/android/test/e2e/README.md b/android/test/e2e/README.md
index adbcc042cd..58f6206c87 100644
--- a/android/test/e2e/README.md
+++ b/android/test/e2e/README.md
@@ -4,17 +4,14 @@ The tests in this module are end-to-end tests that rely on the publicly accessib
## How to run the tests
### Locally
-Set account numbers in the below command and then execute the command in the `android` directory to run the tests on a local device:
-```
-./gradlew :test:e2e:connectedDebugAndroidTest \
- -Pvalid_test_account_number=XXXX \
- -Pinvalid_test_account_number=XXXX
-```
-For convenience, the numbers can also be set in `<REPO-ROOT>/android/local.properties` in the following way:
+Configure all the `mullvad.test.e2e.xxxx` properties located in `android/gradle.properties` by adding them into your `<GRADLE_USER_HOME>/gradle.properties`.
+
+You can also set these properties or override them when executing the command in the following way:
```
-valid_test_account_number=XXXX
-invalid_test_account_number=XXXX
+./gradlew :test:e2e:connectedDebugAndroidTest \
+ -Pmullvad.test.e2e.prod.accountNumber.valid=XXXX \
+ -Pmullvad.test.e2e.prod.accountNumber.invalid==XXXX
```
It's also possible to provide the numbers to the test runner during test execution. However note that this requires [the APKs to be installed manually](https://developer.android.com/training/testing/instrumented-tests/androidx-test-libraries/runner#architecture).
@@ -22,14 +19,12 @@ It's also possible to provide the numbers to the test runner during test executi
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
androidx.test.services.shellexecutor.ShellMain am instrument -w \
-e clearPackageData true \
- -e valid_test_account_number XXXX \
- -e invalid_test_account_number XXXX \
+ -e mullvad.test.e2e.prod.accountNumber.valid XXXX \
+ -e mullvad.test.e2e.prod.accountNumber.invalid XXXX \
-e targetInstrumentation net.mullvad.mullvadvpn.test.e2e/androidx.test.runner.AndroidJUnitRunner \
androidx.test.orchestrator/.AndroidTestOrchestrator'
```
-If you want to run tests that make use of APIs hosted at Mullvad HQ you need to set `ENABLE_ACCESS_TO_LOCAL_API_TESTS=true` in `e2e.properties` or pass it as a command line argument when launching tests.
-
### Firebase Test Lab
Firebase Test Lab can be used to run the tests on vast collection of physical and virtual devices.
@@ -43,7 +38,7 @@ gcloud firebase test android run \
--test ./android/test/e2e/build/outputs/apk/debug/e2e-debug.apk \
--device model=redfin,version=30,locale=en,orientation=portrait \
--use-orchestrator \
- --environment-variables clearPackageData=true,valid_test_account_number=XXXX,invalid_test_account_number=XXXX
+ --environment-variables clearPackageData=true,ORG_GRADLE_PROJECT_mullvad.test.e2e.prod.accountNumber.valid=XXXX,ORG_GRADLE_PROJECT_mullvad.test.e2e.prod.accountNumber.invalid=XXXX
```
If using gcloud via the docker image, the following can be executed in the `android` directory to run the tests (on a Pixel 5e):
@@ -54,7 +49,7 @@ docker run --rm --volumes-from gcloud-config -v ${PWD}:/android gcr.io/google.co
--test ./android/test/e2e/build/outputs/apk/debug/e2e-debug.apk \
--device model=redfin,version=30,locale=en,orientation=portrait \
--use-orchestrator \
- --environment-variables clearPackageData=true,valid_test_account_number=XXXX,invalid_test_account_number=XXXX
+ --environment-variables clearPackageData=true,ORG_GRADLE_PROJECT_mullvad.test.e2e.prod.accountNumber.valid=XXXX,ORG_GRADLE_PROJECT_mullvad.test.e2e.prod.accountNumber.invalid=XXXX
```
## Test artefacts
diff --git a/android/test/e2e/build.gradle.kts b/android/test/e2e/build.gradle.kts
index 31181aab52..debd5ff9b6 100644
--- a/android/test/e2e/build.gradle.kts
+++ b/android/test/e2e/build.gradle.kts
@@ -1,5 +1,3 @@
-import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
-import java.util.Properties
import org.gradle.internal.extensions.stdlib.capitalized
plugins {
@@ -23,42 +21,16 @@ android {
"de.mannodermaus.junit5.AndroidJUnit5Builder"
targetProjectPath = ":app"
- fun Properties.addRequiredPropertyAsBuildConfigField(name: String) {
- val value =
- System.getenv(name)
- ?: getProperty(name)
- ?: throw GradleException("Missing property: $name")
+ testInstrumentationRunnerArguments += buildMap {
+ put("clearPackageData", "true")
- buildConfigField(type = "String", name = name, value = "\"$value\"")
- }
-
- Properties().apply {
- load(project.file("e2e.properties").inputStream())
- addRequiredPropertyAsBuildConfigField("API_VERSION")
- addRequiredPropertyAsBuildConfigField("TRAFFIC_GENERATION_IP_ADDRESS")
- addRequiredPropertyAsBuildConfigField("TEST_ROUTER_API_HOST")
- }
-
- fun MutableMap<String, String>.addOptionalPropertyAsArgument(name: String) {
- val value =
- rootProject.properties.getOrDefault(name, null) as? String
- ?: gradleLocalProperties(rootProject.projectDir, providers).getProperty(name)
-
- if (value != null) {
- put(name, value)
- }
- }
-
- testInstrumentationRunnerArguments +=
- mutableMapOf<String, String>().apply {
- put("clearPackageData", "true")
- addOptionalPropertyAsArgument("enable_highly_rate_limited_tests")
- addOptionalPropertyAsArgument("valid_test_account_number")
- addOptionalPropertyAsArgument("invalid_test_account_number")
- project.findProperty("test.e2e.enableAccessToLocalApiTests")?.let {
- put("enable_access_to_local_api_tests", it.toString())
+ // Add all properties starting with "test.e2e" to the testInstrumentationRunnerArguments
+ properties.forEach {
+ if (it.key.startsWith("mullvad.test.e2e")) {
+ put(it.key, it.value.toString())
}
}
+ }
}
flavorDimensions += FlavorDimensions.BILLING
diff --git a/android/test/e2e/e2e.properties b/android/test/e2e/e2e.properties
deleted file mode 100644
index 1cfa0f6bd1..0000000000
--- a/android/test/e2e/e2e.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-API_VERSION=v1
-TRAFFIC_GENERATION_IP_ADDRESS=45.83.223.209
-TEST_ROUTER_API_HOST=192.168.105.1
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 4720fc5ce6..f23f74dd6a 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
@@ -20,6 +20,7 @@ import net.mullvad.mullvadvpn.test.e2e.api.relay.RelayApi
import net.mullvad.mullvadvpn.test.e2e.misc.AccountTestRule
import net.mullvad.mullvadvpn.test.e2e.misc.ClearFirewallRules
import net.mullvad.mullvadvpn.test.e2e.router.firewall.DropRule
+import net.mullvad.mullvadvpn.test.e2e.router.firewall.FirewallClient
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
@@ -34,6 +35,7 @@ class ConnectionTest : EndToEndTest() {
private val connCheckClient = ConnectionCheckApi()
private val relayClient = RelayApi()
+ private val firewallClient by lazy { FirewallClient() }
@Test
fun testConnect() {
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 3d5eb70cfa..9a2ec22fef 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,5 +1,6 @@
package net.mullvad.mullvadvpn.test.e2e
+import androidx.test.platform.app.InstrumentationRegistry
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runTest
@@ -17,6 +18,8 @@ import net.mullvad.mullvadvpn.test.common.page.enableShadowsocksStory
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.constant.getTrafficGeneratorHost
+import net.mullvad.mullvadvpn.test.e2e.constant.getTrafficGeneratorPort
import net.mullvad.mullvadvpn.test.e2e.misc.AccountTestRule
import net.mullvad.mullvadvpn.test.e2e.misc.NetworkTrafficChecker
import net.mullvad.mullvadvpn.test.e2e.misc.NoTrafficToHostRule
@@ -83,8 +86,8 @@ class LeakTest : EndToEndTest() {
on<ConnectPage> { waitForConnectedLabel() }
// Capture generated traffic to a specific host
- val targetIpAddress = BuildConfig.TRAFFIC_GENERATION_IP_ADDRESS
- val targetPort = 80
+ val targetIpAddress = InstrumentationRegistry.getArguments().getTrafficGeneratorHost()
+ val targetPort = InstrumentationRegistry.getArguments().getTrafficGeneratorPort()
val captureResult =
PacketCapture().capturePackets {
TrafficGenerator(targetIpAddress, targetPort).generateTraffic(10.milliseconds) {
@@ -131,8 +134,8 @@ class LeakTest : EndToEndTest() {
on<ConnectPage> { waitForConnectedLabel() }
// Capture generated traffic to a specific host
- val targetIpAddress = BuildConfig.TRAFFIC_GENERATION_IP_ADDRESS
- val targetPort = 80
+ val targetIpAddress = InstrumentationRegistry.getArguments().getTrafficGeneratorHost()
+ val targetPort = InstrumentationRegistry.getArguments().getTrafficGeneratorPort()
val captureResult: PacketCaptureResult =
PacketCapture().capturePackets {
TrafficGenerator(targetIpAddress, targetPort).generateTraffic(10.milliseconds) {
@@ -188,8 +191,8 @@ class LeakTest : EndToEndTest() {
on<ConnectPage> { waitForConnectedLabel() }
// Capture generated traffic to a specific host
- val targetIpAddress = BuildConfig.TRAFFIC_GENERATION_IP_ADDRESS
- val targetPort = 80
+ val targetIpAddress = InstrumentationRegistry.getArguments().getTrafficGeneratorHost()
+ val targetPort = InstrumentationRegistry.getArguments().getTrafficGeneratorPort()
val captureResult: PacketCaptureResult =
PacketCapture().capturePackets {
TrafficGenerator(targetIpAddress, targetPort).generateTraffic(10.milliseconds) {
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HasDependencyOnLocalAPI.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HasDependencyOnLocalAPI.kt
index 12987df9e0..94b0bfa3f6 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HasDependencyOnLocalAPI.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HasDependencyOnLocalAPI.kt
@@ -1,7 +1,7 @@
package net.mullvad.mullvadvpn.test.e2e.annotations
import androidx.test.platform.app.InstrumentationRegistry
-import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument
+import net.mullvad.mullvadvpn.test.e2e.constant.isRaasEnabled
import org.junit.jupiter.api.extension.ConditionEvaluationResult
import org.junit.jupiter.api.extension.ExecutionCondition
import org.junit.jupiter.api.extension.ExtendWith
@@ -19,10 +19,7 @@ annotation class HasDependencyOnLocalAPI {
context: ExtensionContext?
): ConditionEvaluationResult {
- val enable =
- InstrumentationRegistry.getArguments()
- .getRequiredArgument("enable_access_to_local_api_tests")
- .toBoolean()
+ val enable = InstrumentationRegistry.getArguments().isRaasEnabled()
return if (enable) {
ConditionEvaluationResult.enabled(
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HighlyRateLimited.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HighlyRateLimited.kt
index 12280fcaf1..09124ca5a5 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HighlyRateLimited.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/annotations/HighlyRateLimited.kt
@@ -1,8 +1,7 @@
package net.mullvad.mullvadvpn.test.e2e.annotations
import androidx.test.platform.app.InstrumentationRegistry
-import net.mullvad.mullvadvpn.test.e2e.constant.ENABLE_HIGHLY_RATE_LIMITED_TESTS
-import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument
+import net.mullvad.mullvadvpn.test.e2e.constant.isHighlyRateLimitedTestsEnabled
import org.junit.jupiter.api.extension.ConditionEvaluationResult
import org.junit.jupiter.api.extension.ExecutionCondition
import org.junit.jupiter.api.extension.ExtendWith
@@ -19,10 +18,7 @@ annotation class HighlyRateLimited {
override fun evaluateExecutionCondition(
context: ExtensionContext?
): ConditionEvaluationResult {
- val enable =
- InstrumentationRegistry.getArguments()
- .getRequiredArgument(ENABLE_HIGHLY_RATE_LIMITED_TESTS)
- .toBoolean()
+ val enable = InstrumentationRegistry.getArguments().isHighlyRateLimitedTestsEnabled()
return if (enable) {
ConditionEvaluationResult.enabled("Running test highly affected by rate limiting.")
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt
index d24a6d3c92..099808fcdb 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt
@@ -84,8 +84,8 @@ class MullvadApi {
companion object {
private const val BASE_URL = "api.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
- private const val AUTH_PATH = "auth/${BuildConfig.API_VERSION}/token"
- private const val DEVICES_PATH = "accounts/${BuildConfig.API_VERSION}/devices"
+ private const val AUTH_PATH = "auth/v1/token"
+ private const val DEVICES_PATH = "accounts/v1/devices"
}
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApi.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApi.kt
index 647bb49b20..e6465f0b23 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApi.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApi.kt
@@ -64,7 +64,7 @@ class PartnerApi(base64AuthCredentials: String) {
companion object {
private const val BASE_URL = "partner.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
- private const val ACCOUNT_PATH = "${BuildConfig.API_VERSION}/accounts"
+ private const val ACCOUNT_PATH = "v1/accounts"
}
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApiTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApiTest.kt
index d6f91bb749..e2d723da22 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApiTest.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/partner/PartnerApiTest.kt
@@ -2,7 +2,7 @@ package net.mullvad.mullvadvpn.test.e2e.api.partner
import androidx.test.platform.app.InstrumentationRegistry
import kotlinx.coroutines.test.runTest
-import net.mullvad.mullvadvpn.test.e2e.constant.PARTNER_AUTH
+import net.mullvad.mullvadvpn.test.e2e.constant.getPartnerAuth
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
@@ -10,8 +10,7 @@ import org.junit.jupiter.api.assertDoesNotThrow
@Disabled("Only used developing the PartnerApi")
class PartnerApiTest {
- private val partnerApi =
- PartnerApi(InstrumentationRegistry.getArguments().getString(PARTNER_AUTH, null))
+ private val partnerApi = PartnerApi(InstrumentationRegistry.getArguments().getPartnerAuth()!!)
@Test
fun testCreateAccount() = runTest {
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt
index 2b2017f210..767851bc1c 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt
@@ -50,6 +50,6 @@ class RelayApi {
companion object {
private const val BASE_URL = "api.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
- private const val RELAY_PATH = "app/${BuildConfig.API_VERSION}/relays"
+ private const val RELAY_PATH = "app/v1/relays"
}
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/Constants.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/Constants.kt
index 0c221f8ddf..8bcb5c2997 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/Constants.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/Constants.kt
@@ -1,9 +1,46 @@
package net.mullvad.mullvadvpn.test.e2e.constant
+import android.os.Bundle
+import androidx.test.platform.app.InstrumentationRegistry
+import net.mullvad.mullvadvpn.test.e2e.BuildConfig
+import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument
+
const val LOG_TAG = "mullvad-e2e"
-const val PARTNER_AUTH = "partner_auth"
-const val VALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY = "valid_test_account_number"
-const val INVALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY = "invalid_test_account_number"
-const val ENABLE_ACCESS_TO_LOCAL_API_TESTS = "enable_access_to_local_api_tests"
-const val ENABLE_HIGHLY_RATE_LIMITED_TESTS = "enable_highly_rate_limited_tests"
+fun Bundle.getPartnerAuth() =
+ InstrumentationRegistry.getArguments()
+ .getString("mullvad.test.e2e.${BuildConfig.FLAVOR_infrastructure}.partnerAuth")
+
+fun Bundle.getValidAccountNumber() =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument(
+ "mullvad.test.e2e.${BuildConfig.FLAVOR_infrastructure}.accountNumber.valid"
+ )
+
+fun Bundle.getInvalidAccountNumber() =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument(
+ "mullvad.test.e2e.${BuildConfig.FLAVOR_infrastructure}.accountNumber.invalid"
+ )
+
+fun Bundle.isRaasEnabled(): Boolean =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument("mullvad.test.e2e.config.raas.enable")
+ .toBoolean()
+
+fun Bundle.isHighlyRateLimitedTestsEnabled(): Boolean =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument("mullvad.test.e2e.config.runHighlyRateLimitedTests")
+ .toBoolean()
+
+fun Bundle.getRaasHost() =
+ InstrumentationRegistry.getArguments().getRequiredArgument("mullvad.test.e2e.config.raas.host")
+
+fun Bundle.getTrafficGeneratorHost(): String =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument("mullvad.test.e2e.config.raas.trafficGenerator.target.host")
+
+fun Bundle.getTrafficGeneratorPort(): Int =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument("mullvad.test.e2e.config.raas.trafficGenerator.target.port")
+ .toInt()
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/AccountProvider.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/AccountProvider.kt
index 61fc023ade..799f33be64 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/AccountProvider.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/AccountProvider.kt
@@ -4,15 +4,13 @@ import androidx.test.platform.app.InstrumentationRegistry
import net.mullvad.mullvadvpn.test.e2e.api.mullvad.MullvadApi
import net.mullvad.mullvadvpn.test.e2e.api.mullvad.removeAllDevices
import net.mullvad.mullvadvpn.test.e2e.api.partner.PartnerApi
-import net.mullvad.mullvadvpn.test.e2e.constant.INVALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY
-import net.mullvad.mullvadvpn.test.e2e.constant.PARTNER_AUTH
-import net.mullvad.mullvadvpn.test.e2e.constant.VALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY
-import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument
+import net.mullvad.mullvadvpn.test.e2e.constant.getInvalidAccountNumber
+import net.mullvad.mullvadvpn.test.e2e.constant.getPartnerAuth
+import net.mullvad.mullvadvpn.test.e2e.constant.getValidAccountNumber
object AccountProvider {
private val mullvadClient = MullvadApi()
- private val partnerAuth: String? =
- InstrumentationRegistry.getArguments().getString(PARTNER_AUTH, null)
+ private val partnerAuth: String? = InstrumentationRegistry.getArguments().getPartnerAuth()
private val partnerClient: PartnerApi by lazy { PartnerApi(partnerAuth!!) }
suspend fun getValidAccountNumber() =
@@ -23,14 +21,10 @@ object AccountProvider {
partnerClient.addTime(accountNumber = accountNumber, daysToAdd = 1)
accountNumber
} else {
- val validAccountNumber =
- InstrumentationRegistry.getArguments()
- .getRequiredArgument(VALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY)
+ val validAccountNumber = InstrumentationRegistry.getArguments().getValidAccountNumber()
mullvadClient.removeAllDevices(validAccountNumber)
validAccountNumber
}
- fun getInvalidAccountNumber() =
- InstrumentationRegistry.getArguments()
- .getRequiredArgument(INVALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY)
+ fun getInvalidAccountNumber() = InstrumentationRegistry.getArguments().getInvalidAccountNumber()
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt
index 3cf1f602b4..ae59231788 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt
@@ -5,8 +5,7 @@ import co.touchlab.kermit.Logger
import kotlinx.coroutines.runBlocking
import net.mullvad.mullvadvpn.test.e2e.api.mullvad.MullvadApi
import net.mullvad.mullvadvpn.test.e2e.api.mullvad.removeAllDevices
-import net.mullvad.mullvadvpn.test.e2e.constant.VALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY
-import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument
+import net.mullvad.mullvadvpn.test.e2e.constant.getValidAccountNumber
import org.junit.jupiter.api.extension.BeforeEachCallback
import org.junit.jupiter.api.extension.ExtensionContext
@@ -15,9 +14,7 @@ class CleanupAccountTestRule : BeforeEachCallback {
override fun beforeEach(context: ExtensionContext) {
Logger.d("Cleaning up account before test: ${context.requiredTestMethod.name}")
- val validTestAccountNumber =
- InstrumentationRegistry.getArguments()
- .getRequiredArgument(VALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY)
+ val validTestAccountNumber = InstrumentationRegistry.getArguments().getValidAccountNumber()
runBlocking { mullvadApi.removeAllDevices(validTestAccountNumber) }
}
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/firewall/FirewallClient.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/firewall/FirewallClient.kt
index 3d6264047b..3f6a212497 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/firewall/FirewallClient.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/firewall/FirewallClient.kt
@@ -1,5 +1,6 @@
package net.mullvad.mullvadvpn.test.e2e.router.firewall
+import androidx.test.platform.app.InstrumentationRegistry
import co.touchlab.kermit.Logger
import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
@@ -13,7 +14,7 @@ import io.ktor.http.URLProtocol
import io.ktor.http.contentType
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json
-import net.mullvad.mullvadvpn.test.e2e.BuildConfig
+import net.mullvad.mullvadvpn.test.e2e.constant.getRaasHost
class FirewallClient(private val httpClient: HttpClient = defaultHttpClient()) {
suspend fun createRule(rule: DropRule) {
@@ -40,7 +41,7 @@ private fun defaultHttpClient(): HttpClient =
defaultRequest {
url {
protocol = URLProtocol.HTTP
- host = BuildConfig.TEST_ROUTER_API_HOST
+ host = InstrumentationRegistry.getArguments().getRaasHost()
}
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/PacketCapture.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/PacketCapture.kt
index e192eacc4a..055d1620d0 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/PacketCapture.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/PacketCapture.kt
@@ -1,5 +1,6 @@
package net.mullvad.mullvadvpn.test.e2e.router.packetCapture
+import androidx.test.platform.app.InstrumentationRegistry
import co.touchlab.kermit.Logger
import io.ktor.client.HttpClient
import io.ktor.client.call.body
@@ -20,7 +21,7 @@ import java.util.UUID
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
-import net.mullvad.mullvadvpn.test.e2e.BuildConfig
+import net.mullvad.mullvadvpn.test.e2e.constant.getRaasHost
import net.mullvad.mullvadvpn.test.e2e.misc.Networking
import net.mullvad.mullvadvpn.test.e2e.serializer.PacketCaptureSessionSerializer
import org.junit.jupiter.api.fail
@@ -60,7 +61,7 @@ class PacketCapture {
private fun defaultHttpClient(): HttpClient =
HttpClient(CIO) {
- defaultRequest { url("http://${BuildConfig.TEST_ROUTER_API_HOST}") }
+ defaultRequest { url("http://${InstrumentationRegistry.getArguments().getRaasHost()}") }
engine { requestTimeout = REQUEST_TIMEOUT_MS }
install(ContentNegotiation) {