summaryrefslogtreecommitdiffhomepage
path: root/android/test
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-03-22 09:07:53 +0100
committerAlbin <albin@mullvad.net>2023-03-22 10:39:58 +0100
commit68c356e5afa2165cadef86d43966e51d9203102c (patch)
tree0a172dacad334066be40ea1239691ed963139dac /android/test
parente5d106c9260e0f282c75d105da7b0247535cdfdd (diff)
downloadmullvadvpn-68c356e5afa2165cadef86d43966e51d9203102c.tar.xz
mullvadvpn-68c356e5afa2165cadef86d43966e51d9203102c.zip
Apply project-wide `kotlinLangStyle` formatting
Diffstat (limited to 'android/test')
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt15
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt28
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt33
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt8
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt28
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt4
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/interactor/SystemSettingsInteractor.kt19
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt5
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/ConnCheckState.kt5
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt122
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt77
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt37
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt58
13 files changed, 186 insertions, 253 deletions
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
index 59905d72e2..19cc5a8b93 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
@@ -22,10 +22,7 @@ fun UiDevice.findObjectWithTimeout(
timeout: Long = DEFAULT_INTERACTION_TIMEOUT
): UiObject2 {
- wait(
- Until.hasObject(selector),
- timeout
- )
+ wait(Until.hasObject(selector), timeout)
return try {
findObject(selector)
@@ -50,10 +47,7 @@ fun UiDevice.clickAllowOnNotificationPermissionPromptIfApiLevel31AndAbove(
val selector = By.text("Allow")
- wait(
- Until.hasObject(selector),
- timeout
- )
+ wait(Until.hasObject(selector), timeout)
try {
findObjectWithTimeout(selector).click()
@@ -69,10 +63,7 @@ fun UiObject2.findObjectWithTimeout(
timeout: Long = DEFAULT_INTERACTION_TIMEOUT
): UiObject2 {
- wait(
- Until.hasObject(selector),
- timeout
- )
+ wait(Until.hasObject(selector), timeout)
return try {
findObject(selector)
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt
index d3b2abe7ae..d5a2e5176b 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt
@@ -20,10 +20,7 @@ import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaime
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel31AndAbove
import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
-class AppInteractor(
- private val device: UiDevice,
- private val targetContext: Context
-) {
+class AppInteractor(private val device: UiDevice, private val targetContext: Context) {
fun launch(customApiEndpointConfiguration: CustomApiEndpointConfiguration? = null) {
device.pressHome()
// Wait for launcher
@@ -41,10 +38,7 @@ class AppInteractor(
}
}
targetContext.startActivity(intent)
- device.wait(
- Until.hasObject(By.pkg(MULLVAD_PACKAGE).depth(0)),
- APP_LAUNCH_TIMEOUT
- )
+ device.wait(Until.hasObject(By.pkg(MULLVAD_PACKAGE).depth(0)), APP_LAUNCH_TIMEOUT)
}
fun launchAndEnsureLoggedIn(accountToken: String) {
@@ -56,8 +50,10 @@ class AppInteractor(
}
fun attemptLogin(accountToken: String) {
- val loginObject = device.findObjectWithTimeout(By.clazz("android.widget.EditText"))
- .apply { text = accountToken }
+ val loginObject =
+ device.findObjectWithTimeout(By.clazz("android.widget.EditText")).apply {
+ text = accountToken
+ }
loginObject.parent.findObject(By.clazz(ImageButton::class.java)).click()
}
@@ -67,10 +63,10 @@ class AppInteractor(
fun extractIpAddress(): String {
device.findObjectWithTimeout(By.res(TUNNEL_INFO_ID)).click()
- return device.findObjectWithTimeout(
- By.res(TUNNEL_OUT_ADDRESS_ID),
- CONNECTION_TIMEOUT
- ).text.extractIpAddress()
+ return device
+ .findObjectWithTimeout(By.res(TUNNEL_OUT_ADDRESS_ID), CONNECTION_TIMEOUT)
+ .text
+ .extractIpAddress()
}
fun clickSettingsCog() {
@@ -85,9 +81,7 @@ class AppInteractor(
device.findObjectWithTimeout(By.text(text)).click()
}
- fun waitForLoginPrompt(
- timeout: Long = LOGIN_PROMPT_TIMEOUT
- ) {
+ fun waitForLoginPrompt(timeout: Long = LOGIN_PROMPT_TIMEOUT) {
device.findObjectWithTimeout(By.text("Login"), timeout)
}
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt
index 138d09cc28..c7b8992292 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt
@@ -60,10 +60,7 @@ class CaptureScreenshotOnFailedTestRule(private val testTag: String) : TestWatch
) {
contentValues.apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, filename)
- put(
- MediaStore.Images.Media.RELATIVE_PATH,
- "$DIRECTORY_PICTURES/$baseDir"
- )
+ put(MediaStore.Images.Media.RELATIVE_PATH, "$DIRECTORY_PICTURES/$baseDir")
}
val uri =
@@ -89,14 +86,17 @@ class CaptureScreenshotOnFailedTestRule(private val testTag: String) : TestWatch
baseDir: String,
filename: String
) {
- val screenshotBaseDirectory = Paths.get(
- Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES).path,
- baseDir,
- ).toFile().apply {
- if (exists().not()) {
- mkdirs()
- }
- }
+ val screenshotBaseDirectory =
+ Paths.get(
+ Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES).path,
+ baseDir,
+ )
+ .toFile()
+ .apply {
+ if (exists().not()) {
+ mkdirs()
+ }
+ }
FileOutputStream(File(screenshotBaseDirectory, filename)).use { outputStream ->
try {
this.compress(Bitmap.CompressFormat.JPEG, 50, outputStream)
@@ -107,8 +107,9 @@ class CaptureScreenshotOnFailedTestRule(private val testTag: String) : TestWatch
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
}
- private fun createBaseScreenshotContentValues() = ContentValues().apply {
- put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
- put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis())
- }
+ private fun createBaseScreenshotContentValues() =
+ ContentValues().apply {
+ put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
+ put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis())
+ }
}
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 8f72fef0be..488162b08c 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
@@ -12,13 +12,9 @@ import org.junit.Test
class ConnectionTest : EndToEndTest() {
- @Rule
- @JvmField
- val cleanupAccountTestRule = CleanupAccountTestRule()
+ @Rule @JvmField val cleanupAccountTestRule = CleanupAccountTestRule()
- @Rule
- @JvmField
- val forgetAllVpnAppsInSettingsTestRule = ForgetAllVpnAppsInSettingsTestRule()
+ @Rule @JvmField val forgetAllVpnAppsInSettingsTestRule = ForgetAllVpnAppsInSettingsTestRule()
@Test
fun testConnectAndVerifyWithConnectionCheck() {
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 f8f5bb8f6c..3514405dd9 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
@@ -19,16 +19,15 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
abstract class EndToEndTest {
- @Rule
- @JvmField
- val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG)
+ @Rule @JvmField val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG)
@Rule
@JvmField
- val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE
- )
+ val permissionRule: GrantPermissionRule =
+ GrantPermissionRule.grant(
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ )
lateinit var device: UiDevice
lateinit var targetContext: Context
@@ -41,14 +40,13 @@ abstract class EndToEndTest {
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
targetContext = InstrumentationRegistry.getInstrumentation().targetContext
- validTestAccountToken = InstrumentationRegistry.getArguments()
- .getRequiredArgument(VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY)
- invalidTestAccountToken = InstrumentationRegistry.getArguments()
- .getRequiredArgument(INVALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY)
+ validTestAccountToken =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument(VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY)
+ invalidTestAccountToken =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument(INVALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY)
- app = AppInteractor(
- device,
- targetContext
- )
+ app = AppInteractor(device, targetContext)
}
}
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 9cec30d872..646af7a18e 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
@@ -15,9 +15,7 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class LoginTest : EndToEndTest() {
- @Rule
- @JvmField
- val cleanupAccountTestRule = CleanupAccountTestRule()
+ @Rule @JvmField val cleanupAccountTestRule = CleanupAccountTestRule()
@Test
fun testLoginWithInvalidCredentials() {
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 9e5f0aa665..bcf4adcc9e 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
@@ -7,18 +7,15 @@ import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import net.mullvad.mullvadvpn.test.common.extension.findObjectByCaseInsensitiveText
-class SystemSettingsInteractor(
- private val uiDevice: UiDevice,
- private val context: Context
-) {
+class SystemSettingsInteractor(private val uiDevice: UiDevice, private val context: Context) {
fun openVpnSettings() {
- val intent = Intent("com.intent.MAIN").apply {
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- }
- intent.component = ComponentName.unflattenFromString(
- "com.android.settings/.Settings\$VpnSettingsActivity"
- )
+ val intent =
+ Intent("com.intent.MAIN").apply {
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ intent.component =
+ ComponentName.unflattenFromString("com.android.settings/.Settings\$VpnSettingsActivity")
context.startActivity(intent)
Thread.sleep(1000)
}
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 2b69436f6d..2e19cb42fe 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
@@ -13,8 +13,9 @@ class CleanupAccountTestRule : TestWatcher() {
override fun starting(description: Description) {
Log.d(LOG_TAG, "Cleaning up account before test: ${description.methodName}")
val targetContext = InstrumentationRegistry.getInstrumentation().targetContext
- val validTestAccountToken = InstrumentationRegistry.getArguments()
- .getRequiredArgument(VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY)
+ val validTestAccountToken =
+ InstrumentationRegistry.getArguments()
+ .getRequiredArgument(VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY)
MullvadAccountInteractor(SimpleMullvadHttpClient(targetContext), validTestAccountToken)
.cleanupAccount()
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/ConnCheckState.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/ConnCheckState.kt
index 744e80124e..75004270a4 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/ConnCheckState.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/ConnCheckState.kt
@@ -1,6 +1,3 @@
package net.mullvad.mullvadvpn.test.e2e.misc
-data class ConnCheckState(
- val isConnected: Boolean,
- val ipAddress: String
-)
+data class ConnCheckState(val isConnected: Boolean, val ipAddress: String)
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt
index bc56737b04..b97fb28f45 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt
@@ -23,17 +23,13 @@ class SimpleMullvadHttpClient(context: Context) {
Log.v(LOG_TAG, "Remove all devices")
val token = login(accountToken)
val devices = getDeviceList(token)
- devices.forEach {
- removeDevice(token, it)
- }
+ devices.forEach { removeDevice(token, it) }
Log.v(LOG_TAG, "All devices removed")
}
fun login(accountToken: String): String {
Log.v(LOG_TAG, "Attempt login with account token: $accountToken")
- val json = JSONObject().apply {
- put("account_number", accountToken)
- }
+ val json = JSONObject().apply { put("account_number", accountToken) }
return sendSimpleSynchronousRequest(Request.Method.POST, AUTH_URL, json)!!.let { response ->
response.getString("access_token").also { accessToken ->
Log.v(LOG_TAG, "Successfully logged in and received access token: $accessToken")
@@ -44,21 +40,20 @@ class SimpleMullvadHttpClient(context: Context) {
fun getDeviceList(accessToken: String): List<String> {
Log.v(LOG_TAG, "Get devices")
- val response = sendSimpleSynchronousRequestArray(
- Request.Method.GET,
- DEVICE_LIST_URL,
- token = accessToken
- )
+ val response =
+ sendSimpleSynchronousRequestArray(
+ Request.Method.GET,
+ DEVICE_LIST_URL,
+ token = accessToken
+ )
- return response!!.iterator<JSONObject>().asSequence().toList()
+ return response!!
+ .iterator<JSONObject>()
+ .asSequence()
+ .toList()
.also {
- it
- .map { jsonObject ->
- jsonObject.getString("name")
- }
- .also { deviceNames ->
- Log.v(LOG_TAG, "Devices received: $deviceNames")
- }
+ it.map { jsonObject -> jsonObject.getString("name") }
+ .also { deviceNames -> Log.v(LOG_TAG, "Devices received: $deviceNames") }
}
.map { it.getString("id") }
.toList()
@@ -74,13 +69,8 @@ class SimpleMullvadHttpClient(context: Context) {
}
fun runConnectionCheck(): ConnCheckState? {
- return sendSimpleSynchronousRequestString(
- Request.Method.GET,
- CONN_CHECK_URL
- )
- ?.let { respose ->
- JSONObject(respose)
- }
+ return sendSimpleSynchronousRequestString(Request.Method.GET, CONN_CHECK_URL)
+ ?.let { respose -> JSONObject(respose) }
?.let { json ->
ConnCheckState(
isConnected = json.getBoolean("mullvad_exit_ip"),
@@ -96,24 +86,19 @@ class SimpleMullvadHttpClient(context: Context) {
token: String? = null
): JSONObject? {
val future = RequestFuture.newFuture<JSONObject>()
- val request = object : JsonObjectRequest(
- method,
- url,
- body,
- future,
- future
- ) {
- override fun getHeaders(): MutableMap<String, String> {
- val headers = HashMap<String, String>()
- if (body != null) {
- headers.put("Content-Type", "application/json")
- }
- if (token != null) {
- headers.put("Authorization", "Bearer $token")
+ val request =
+ object : JsonObjectRequest(method, url, body, future, future) {
+ override fun getHeaders(): MutableMap<String, String> {
+ val headers = HashMap<String, String>()
+ if (body != null) {
+ headers.put("Content-Type", "application/json")
+ }
+ if (token != null) {
+ headers.put("Authorization", "Bearer $token")
+ }
+ return headers
}
- return headers
}
- }
queue.add(request)
return try {
future.get().also { response ->
@@ -132,28 +117,22 @@ class SimpleMullvadHttpClient(context: Context) {
token: String? = null
): String? {
val future = RequestFuture.newFuture<String>()
- val request = object : StringRequest(
- method,
- url,
- future,
- future
- ) {
- override fun getHeaders(): MutableMap<String, String> {
- val headers = HashMap<String, String>()
- if (body != null) {
- headers.put("Content-Type", "application/json")
- }
- if (token != null) {
- headers.put("Authorization", "Bearer $token")
+ val request =
+ object : StringRequest(method, url, future, future) {
+ override fun getHeaders(): MutableMap<String, String> {
+ val headers = HashMap<String, String>()
+ if (body != null) {
+ headers.put("Content-Type", "application/json")
+ }
+ if (token != null) {
+ headers.put("Authorization", "Bearer $token")
+ }
+ return headers
}
- return headers
}
- }
queue.add(request)
return try {
- future.get().also { response ->
- Log.v(LOG_TAG, "String request response: $response")
- }
+ future.get().also { response -> Log.v(LOG_TAG, "String request response: $response") }
} catch (e: Exception) {
Log.v(LOG_TAG, "String request error: ${e.message}")
throw TestEventException(REQUEST_ERROR_MESSAGE)
@@ -167,22 +146,17 @@ class SimpleMullvadHttpClient(context: Context) {
token: String? = null
): JSONArray? {
val future = RequestFuture.newFuture<JSONArray>()
- val request = object : JsonArrayRequest(
- method,
- url,
- null,
- future,
- future
- ) {
- override fun getHeaders(): MutableMap<String, String> {
- val headers = HashMap<String, String>()
- headers.put("Content-Type", "application/json")
- if (token != null) {
- headers.put("Authorization", "Bearer $token")
+ val request =
+ object : JsonArrayRequest(method, url, null, future, future) {
+ override fun getHeaders(): MutableMap<String, String> {
+ val headers = HashMap<String, String>()
+ headers.put("Content-Type", "application/json")
+ if (token != null) {
+ headers.put("Authorization", "Bearer $token")
+ }
+ return headers
}
- return headers
}
- }
queue.add(request)
return try {
future.get().also { response ->
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt
index e3708a47f1..06f7164034 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt
@@ -29,8 +29,10 @@ class MockApiDispatcher : Dispatcher() {
AUTH_TOKEN_URL_PATH -> handleLoginRequest(request.body)
DEVICES_URL_PATH -> {
when (request.method) {
- "get", "GET" -> handleDeviceListRequest()
- "post", "POST" -> handleDeviceCreationRequest(request.body)
+ "get",
+ "GET" -> handleDeviceListRequest()
+ "post",
+ "POST" -> handleDeviceCreationRequest(request.body)
else -> MockResponse().setResponseCode(404)
}
}
@@ -51,9 +53,10 @@ class MockApiDispatcher : Dispatcher() {
.addJsonHeader()
.setBody(
accessTokenJsonResponse(
- accessToken = DUMMY_ACCESS_TOKEN,
- expiry = currentUtcTimeWithOffsetZero().plusDays(1)
- ).toString()
+ accessToken = DUMMY_ACCESS_TOKEN,
+ expiry = currentUtcTimeWithOffsetZero().plusDays(1)
+ )
+ .toString()
)
} else {
Log.e(
@@ -69,13 +72,9 @@ class MockApiDispatcher : Dispatcher() {
MockResponse()
.setResponseCode(200)
.addJsonHeader()
- .setBody(
- accountInfoJson(
- id = DUMMY_ID,
- expiry = expiry
- ).toString()
- )
- } ?: MockResponse().setResponseCode(400)
+ .setBody(accountInfoJson(id = DUMMY_ID, expiry = expiry).toString())
+ }
+ ?: MockResponse().setResponseCode(400)
}
private fun handleDeviceInfoRequest(): MockResponse {
@@ -85,33 +84,36 @@ class MockApiDispatcher : Dispatcher() {
.addJsonHeader()
.setBody(
deviceJson(
- id = DUMMY_ID,
- name = DUMMY_DEVICE_NAME,
- publicKey = cachedKey,
- creationDate = currentUtcTimeWithOffsetZero().minusDays(1)
- ).toString()
+ id = DUMMY_ID,
+ name = DUMMY_DEVICE_NAME,
+ publicKey = cachedKey,
+ creationDate = currentUtcTimeWithOffsetZero().minusDays(1)
+ )
+ .toString()
)
- } ?: MockResponse().setResponseCode(400)
+ }
+ ?: MockResponse().setResponseCode(400)
}
private fun handleDeviceCreationRequest(body: Buffer): MockResponse {
- return body.getPubKey()
- .also { newKey ->
- cachedPubKeyFromAppUnderTest = newKey
- }
+ return body
+ .getPubKey()
+ .also { newKey -> cachedPubKeyFromAppUnderTest = newKey }
?.let { newKey ->
MockResponse()
.setResponseCode(201)
.addJsonHeader()
.setBody(
deviceJson(
- id = DUMMY_ID,
- name = DUMMY_DEVICE_NAME,
- publicKey = newKey,
- creationDate = currentUtcTimeWithOffsetZero().minusDays(1)
- ).toString()
+ id = DUMMY_ID,
+ name = DUMMY_DEVICE_NAME,
+ publicKey = newKey,
+ creationDate = currentUtcTimeWithOffsetZero().minusDays(1)
+ )
+ .toString()
)
- } ?: MockResponse().setResponseCode(400)
+ }
+ ?: MockResponse().setResponseCode(400)
}
private fun handleDeviceListRequest(): MockResponse {
@@ -120,15 +122,18 @@ class MockApiDispatcher : Dispatcher() {
.setResponseCode(200)
.addJsonHeader()
.setBody(
- JSONArray().put(
- deviceJson(
- id = DUMMY_ID,
- name = DUMMY_DEVICE_NAME,
- publicKey = cachedKey,
- creationDate = currentUtcTimeWithOffsetZero().minusDays(1)
+ JSONArray()
+ .put(
+ deviceJson(
+ id = DUMMY_ID,
+ name = DUMMY_DEVICE_NAME,
+ publicKey = cachedKey,
+ creationDate = currentUtcTimeWithOffsetZero().minusDays(1)
+ )
)
- ).toString()
+ .toString()
)
- } ?: MockResponse().setResponseCode(400)
+ }
+ ?: MockResponse().setResponseCode(400)
}
}
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt
index ba5ba01810..bb5c20eebb 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt
@@ -24,21 +24,15 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
abstract class MockApiTest {
- @Rule
- @JvmField
- val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG)
+ @Rule @JvmField val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG)
@Rule
@JvmField
- val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(
- WRITE_EXTERNAL_STORAGE,
- READ_EXTERNAL_STORAGE
- )
+ val permissionRule: GrantPermissionRule =
+ GrantPermissionRule.grant(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE)
protected val apiDispatcher = MockApiDispatcher()
- private val mockWebServer = MockWebServer().apply {
- dispatcher = apiDispatcher
- }
+ private val mockWebServer = MockWebServer().apply { dispatcher = apiDispatcher }
lateinit var device: UiDevice
lateinit var targetContext: Context
@@ -50,10 +44,7 @@ abstract class MockApiTest {
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
targetContext = InstrumentationRegistry.getInstrumentation().targetContext
- app = AppInteractor(
- device,
- targetContext
- )
+ app = AppInteractor(device, targetContext)
mockWebServer.start()
Log.d(LOG_TAG, "Mocked web server started using port: ${mockWebServer.port}")
@@ -66,16 +57,14 @@ abstract class MockApiTest {
}
private fun createEndpoint(port: Int): CustomApiEndpointConfiguration {
- val mockApiSocket = InetSocketAddress(
- InetAddress.getLocalHost(),
- port
- )
- val api = ApiEndpoint(
- address = mockApiSocket,
- disableAddressCache = true,
- disableTls = true,
- forceDirectConnection = true
- )
+ val mockApiSocket = InetSocketAddress(InetAddress.getLocalHost(), port)
+ val api =
+ ApiEndpoint(
+ address = mockApiSocket,
+ disableAddressCache = true,
+ disableTls = true,
+ forceDirectConnection = true
+ )
return CustomApiEndpointConfiguration(api)
}
}
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt
index 145cbafbd2..b76c4d4278 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt
@@ -5,38 +5,30 @@ import org.joda.time.DateTime
import org.json.JSONArray
import org.json.JSONObject
-fun accountInfoJson(
- id: String,
- expiry: DateTime
-) = JSONObject().apply {
- put("id", id)
- put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339())
- put("max_ports", 5)
- put("can_add_ports", true)
- put("max_devices", 5)
- put("can_add_devices", true)
-}
+fun accountInfoJson(id: String, expiry: DateTime) =
+ JSONObject().apply {
+ put("id", id)
+ put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339())
+ put("max_ports", 5)
+ put("can_add_ports", true)
+ put("max_devices", 5)
+ put("can_add_devices", true)
+ }
-fun deviceJson(
- id: String,
- name: String,
- publicKey: String,
- creationDate: DateTime
-) = JSONObject().apply {
- put("id", id)
- put("name", name)
- put("pubkey", publicKey)
- put("hijack_dns", true)
- put("created", creationDate.formatStrictlyAccordingToIso8601AndRfc3339())
- put("ipv4_address", "127.0.0.1/32")
- put("ipv6_address", "fc00::1/128")
- put("ports", JSONArray())
-}
+fun deviceJson(id: String, name: String, publicKey: String, creationDate: DateTime) =
+ JSONObject().apply {
+ put("id", id)
+ put("name", name)
+ put("pubkey", publicKey)
+ put("hijack_dns", true)
+ put("created", creationDate.formatStrictlyAccordingToIso8601AndRfc3339())
+ put("ipv4_address", "127.0.0.1/32")
+ put("ipv6_address", "fc00::1/128")
+ put("ports", JSONArray())
+ }
-fun accessTokenJsonResponse(
- accessToken: String,
- expiry: DateTime
-) = JSONObject().apply {
- put("access_token", accessToken)
- put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339())
-}
+fun accessTokenJsonResponse(accessToken: String, expiry: DateTime) =
+ JSONObject().apply {
+ put("access_token", accessToken)
+ put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339())
+ }