diff options
| author | Albin <albin@mullvad.net> | 2022-11-23 19:57:01 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-01-10 15:32:29 +0100 |
| commit | 6e09d1941569d5138b961bb7d2d56526663ef1c8 (patch) | |
| tree | 3eea5fa1a5bb9018bdc031562aaa001319a8ea44 /android/test | |
| parent | 0b55897e8a53bcc126d1954f99639d482a3b623e (diff) | |
| download | mullvadvpn-6e09d1941569d5138b961bb7d2d56526663ef1c8.tar.xz mullvadvpn-6e09d1941569d5138b961bb7d2d56526663ef1c8.zip | |
Move common test logic to :test:common
Diffstat (limited to 'android/test')
15 files changed, 45 insertions, 47 deletions
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/ResourceConstants.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/constant/AppConstants.kt index 7b27a581ad..05b47ef99b 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/ResourceConstants.kt +++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/constant/AppConstants.kt @@ -1,5 +1,6 @@ -package net.mullvad.mullvadvpn.test.e2e.constant +package net.mullvad.mullvadvpn.test.common.constant +const val MULLVAD_PACKAGE = "net.mullvad.mullvadvpn" const val SETTINGS_COG_ID = "net.mullvad.mullvadvpn:id/settings" const val TUNNEL_INFO_ID = "net.mullvad.mullvadvpn:id/tunnel_info" const val TUNNEL_OUT_ADDRESS_ID = "net.mullvad.mullvadvpn:id/out_address" diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/TimeoutConstants.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/constant/TimeoutConstants.kt index 6599a26bcd..e96eaad744 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/TimeoutConstants.kt +++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/constant/TimeoutConstants.kt @@ -1,4 +1,4 @@ -package net.mullvad.mullvadvpn.test.e2e.constant +package net.mullvad.mullvadvpn.test.common.constant const val APP_LAUNCH_TIMEOUT = 5000L const val CONNECTION_TIMEOUT = 30000L diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/extension/UiAutomatorExtensions.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt index 5d96f4cc45..e6b63f5d36 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/extension/UiAutomatorExtensions.kt +++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt @@ -1,4 +1,4 @@ -package net.mullvad.mullvadvpn.test.e2e.extension +package net.mullvad.mullvadvpn.test.common.extension import androidx.test.uiautomator.By import androidx.test.uiautomator.BySelector @@ -6,7 +6,7 @@ import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until import java.util.regex.Pattern -import net.mullvad.mullvadvpn.test.e2e.constant.DEFAULT_INTERACTION_TIMEOUT +import net.mullvad.mullvadvpn.test.common.constant.DEFAULT_INTERACTION_TIMEOUT fun UiDevice.findObjectByCaseInsensitiveText(text: String): UiObject2 { return findObjectWithTimeout(By.text(Pattern.compile(text, Pattern.CASE_INSENSITIVE))) diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/AppInteractor.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt index a6739b91e5..e225997534 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/AppInteractor.kt +++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt @@ -1,4 +1,4 @@ -package net.mullvad.mullvadvpn.test.e2e.interactor +package net.mullvad.mullvadvpn.test.common.interactor import android.content.Context import android.content.Intent @@ -6,20 +6,18 @@ import android.widget.ImageButton import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.Until -import net.mullvad.mullvadvpn.test.e2e.constant.APP_LAUNCH_TIMEOUT -import net.mullvad.mullvadvpn.test.e2e.constant.CONNECTION_TIMEOUT -import net.mullvad.mullvadvpn.test.e2e.constant.LOGIN_TIMEOUT -import net.mullvad.mullvadvpn.test.e2e.constant.MULLVAD_PACKAGE -import net.mullvad.mullvadvpn.test.e2e.constant.SETTINGS_COG_ID -import net.mullvad.mullvadvpn.test.e2e.constant.TUNNEL_INFO_ID -import net.mullvad.mullvadvpn.test.e2e.constant.TUNNEL_OUT_ADDRESS_ID -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.common.constant.APP_LAUNCH_TIMEOUT +import net.mullvad.mullvadvpn.test.common.constant.CONNECTION_TIMEOUT +import net.mullvad.mullvadvpn.test.common.constant.LOGIN_TIMEOUT +import net.mullvad.mullvadvpn.test.common.constant.MULLVAD_PACKAGE +import net.mullvad.mullvadvpn.test.common.constant.SETTINGS_COG_ID +import net.mullvad.mullvadvpn.test.common.constant.TUNNEL_INFO_ID +import net.mullvad.mullvadvpn.test.common.constant.TUNNEL_OUT_ADDRESS_ID +import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout class AppInteractor( private val device: UiDevice, - private val targetContext: Context, - private val validTestAccountToken: String, - private val invalidTestAccountToken: String + private val targetContext: Context ) { fun launch() { device.pressHome() @@ -40,13 +38,13 @@ class AppInteractor( ) } - fun launchAndEnsureLoggedIn(accountToken: String = validTestAccountToken) { + fun launchAndEnsureLoggedIn(accountToken: String) { launch() attemptLogin(accountToken) ensureLoggedIn() } - fun attemptLogin(accountToken: String = validTestAccountToken) { + fun attemptLogin(accountToken: String) { device.findObjectWithTimeout(By.text("Login")) val loginObject = device.findObjectWithTimeout(By.clazz("android.widget.EditText")) .apply { text = accountToken } diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CaptureScreenshotOnFailedTestRule.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt index 5be65f7ec8..7f70d98ca7 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CaptureScreenshotOnFailedTestRule.kt +++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt @@ -1,18 +1,17 @@ -package net.mullvad.mullvadvpn.test.e2e.misc +package net.mullvad.mullvadvpn.test.common.rule import android.util.Log import androidx.test.runner.screenshot.BasicScreenCaptureProcessor import androidx.test.runner.screenshot.ScreenCaptureProcessor import androidx.test.runner.screenshot.Screenshot -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter -import net.mullvad.mullvadvpn.test.e2e.constant.LOG_TAG import org.junit.rules.TestWatcher import org.junit.runner.Description +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter -class CaptureScreenshotOnFailedTestRule : TestWatcher() { +class CaptureScreenshotOnFailedTestRule(private val logTag: String) : TestWatcher() { override fun failed(e: Throwable?, description: Description?) { - Log.d(LOG_TAG, "Capturing screenshot of failed test: " + description?.methodName) + Log.d(logTag, "Capturing screenshot of failed test: " + description?.methodName) val timestamp = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()).replace(":", "") val screenshotName = "$timestamp-${description?.methodName}" captureScreenshot(screenshotName) @@ -25,7 +24,7 @@ class CaptureScreenshotOnFailedTestRule : TestWatcher() { processorSet.add(BasicScreenCaptureProcessor()) screenCapture.process(processorSet) } catch (ex: Exception) { - Log.d(LOG_TAG, "Error capturing screenshot: " + ex.message) + Log.d(logTag, "Error capturing screenshot: " + ex.message) } } } diff --git a/android/test/e2e/build.gradle.kts b/android/test/e2e/build.gradle.kts index 8c9082c6ef..8aaf83742c 100644 --- a/android/test/e2e/build.gradle.kts +++ b/android/test/e2e/build.gradle.kts @@ -105,6 +105,7 @@ configure<org.owasp.dependencycheck.gradle.extension.DependencyCheckExtension> { } dependencies { + implementation(project(Projects.testCommon)) implementation(Dependencies.AndroidX.testCore) // Fixes: https://github.com/android/android-test/issues/1589 implementation(Dependencies.AndroidX.testMonitor) 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 feabbc5335..0da55954fb 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 @@ -2,7 +2,7 @@ package net.mullvad.mullvadvpn.test.e2e import androidx.test.uiautomator.By import junit.framework.Assert.assertEquals -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout import net.mullvad.mullvadvpn.test.e2e.interactor.WebViewInteractor import net.mullvad.mullvadvpn.test.e2e.misc.CleanupAccountTestRule import org.junit.Rule @@ -17,7 +17,7 @@ class ConnectionTest : EndToEndTest() { @Test fun testConnectAndVerifyWithConnectionCheck() { // Given - app.launchAndEnsureLoggedIn() + app.launchAndEnsureLoggedIn(validTestAccountToken) // When device.findObjectWithTimeout(By.text("Secure my connection")).click() 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 8adf065663..35ba3fbe46 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 @@ -4,12 +4,13 @@ import android.content.Context import androidx.test.platform.app.InstrumentationRegistry import androidx.test.runner.AndroidJUnit4 import androidx.test.uiautomator.UiDevice +import net.mullvad.mullvadvpn.test.common.interactor.AppInteractor +import net.mullvad.mullvadvpn.test.common.rule.CaptureScreenshotOnFailedTestRule import net.mullvad.mullvadvpn.test.e2e.constant.INVALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY +import net.mullvad.mullvadvpn.test.e2e.constant.LOG_TAG import net.mullvad.mullvadvpn.test.e2e.constant.VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument -import net.mullvad.mullvadvpn.test.e2e.interactor.AppInteractor import net.mullvad.mullvadvpn.test.e2e.interactor.WebViewInteractor -import net.mullvad.mullvadvpn.test.e2e.misc.CaptureScreenshotOnFailedTestRule import org.junit.Before import org.junit.Rule import org.junit.runner.RunWith @@ -19,7 +20,7 @@ abstract class EndToEndTest { @Rule @JvmField - val rule = CaptureScreenshotOnFailedTestRule() + val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG) lateinit var device: UiDevice lateinit var targetContext: Context @@ -40,9 +41,7 @@ abstract class EndToEndTest { app = AppInteractor( device, - targetContext, - validTestAccountToken, - invalidTestAccountToken + targetContext ) web = WebViewInteractor( diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt index d16795e5dd..e8fe5b3c7e 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt @@ -3,8 +3,8 @@ package net.mullvad.mullvadvpn.test.e2e import androidx.test.runner.AndroidJUnit4 import androidx.test.uiautomator.By import junit.framework.Assert.assertNotNull -import net.mullvad.mullvadvpn.test.e2e.constant.LOGIN_FAILURE_TIMEOUT -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.common.constant.LOGIN_FAILURE_TIMEOUT +import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout import net.mullvad.mullvadvpn.test.e2e.misc.CleanupAccountTestRule import org.junit.Rule import org.junit.Test @@ -45,7 +45,7 @@ class LoginTest : EndToEndTest() { @Test fun testLogout() { // Given - app.launchAndEnsureLoggedIn() + app.launchAndEnsureLoggedIn(validTestAccountToken) // When app.clickSettingsCog() 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 a6a04bf094..8ab05520de 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,7 +1,7 @@ package net.mullvad.mullvadvpn.test.e2e import androidx.test.uiautomator.By -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout import org.junit.Test class WebLinkTest : EndToEndTest() { diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/ConnCheckConstants.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/ConnCheckConstants.kt new file mode 100644 index 0000000000..825b6a20c7 --- /dev/null +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/ConnCheckConstants.kt @@ -0,0 +1,5 @@ +package net.mullvad.mullvadvpn.test.e2e.constant + +const val CONN_CHECK_URL = "https://mullvad.net/en/check/" +const val CONN_CHECK_IS_CONNECTED = "Using Mullvad VPN" +const val CONN_CHECK_IS_NOT_CONNECTED = "Not using Mullvad VPN" 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 23f29fca3c..98fd52a333 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,6 +1,5 @@ package net.mullvad.mullvadvpn.test.e2e.constant const val LOG_TAG = "mullvad-e2e" -const val CONN_CHECK_URL = "https://mullvad.net/en/check/" const val VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY = "valid_test_account_token" const val INVALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY = "invalid_test_account_token" diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/PackageConstants.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/PackageConstants.kt deleted file mode 100644 index 5476c37687..0000000000 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/constant/PackageConstants.kt +++ /dev/null @@ -1,3 +0,0 @@ -package net.mullvad.mullvadvpn.test.e2e.constant - -const val MULLVAD_PACKAGE = "net.mullvad.mullvadvpn" diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/SystemSettingsInteractor.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/SystemSettingsInteractor.kt index bbe941d488..9e5f0aa665 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/SystemSettingsInteractor.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/SystemSettingsInteractor.kt @@ -5,7 +5,7 @@ import android.content.Context import android.content.Intent import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectByCaseInsensitiveText +import net.mullvad.mullvadvpn.test.common.extension.findObjectByCaseInsensitiveText class SystemSettingsInteractor( private val uiDevice: UiDevice, diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/WebViewInteractor.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/WebViewInteractor.kt index fd809b13dd..f244aed5e7 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/WebViewInteractor.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/WebViewInteractor.kt @@ -7,11 +7,10 @@ import android.webkit.WebView import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice import net.mullvad.mullvadvpn.TestActivity -import net.mullvad.mullvadvpn.test.e2e.constant.CONNECTION_CHECK_IS_CONNECTED +import net.mullvad.mullvadvpn.test.common.extension.findObjectByCaseInsensitiveText +import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.e2e.constant.CONN_CHECK_IS_CONNECTED import net.mullvad.mullvadvpn.test.e2e.constant.CONN_CHECK_URL -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectByCaseInsensitiveText -import net.mullvad.mullvadvpn.test.e2e.extension.findObjectWithTimeout - class WebViewInteractor( private val context: Context, private val device: UiDevice @@ -37,7 +36,7 @@ class WebViewInteractor( val wireGuardIpv4ConnectionRow = webView.findObjects(By.clazz(View::class.java)) .first { it.text?.endsWith("(WireGuard)") == true } val wireGuardIpv4Address = wireGuardIpv4ConnectionRow.text.split(" ")[0].trim() - return ConnCheckState(stateText.text == CONNECTION_CHECK_IS_CONNECTED, wireGuardIpv4Address) + return ConnCheckState(stateText.text == CONN_CHECK_IS_CONNECTED, wireGuardIpv4Address) } data class ConnCheckState( |
