diff options
| author | Albin <albin@mullvad.net> | 2023-02-02 10:09:13 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-02-02 10:54:28 +0100 |
| commit | f2f77e29107fd992631f02b51aff0a1249b8287d (patch) | |
| tree | 83254cf90032dcd2e08abb85dde36cb41c6b140c | |
| parent | 423d3e7ae0f6a54a6ea4506df4ea9ad2df9b6eab (diff) | |
| download | mullvadvpn-f2f77e29107fd992631f02b51aff0a1249b8287d.tar.xz mullvadvpn-f2f77e29107fd992631f02b51aff0a1249b8287d.zip | |
Fix mockapi time format
Ensures mockapi timestamps are set to utc with offset zero and
are strictly formatted according to both iso8601 and rfc3339.
| -rw-r--r-- | android/test/mockapi/build.gradle.kts | 1 | ||||
| -rw-r--r-- | android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt | 12 | ||||
| -rw-r--r-- | android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt | 17 | ||||
| -rw-r--r-- | android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt | 13 | ||||
| -rw-r--r-- | android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt (renamed from android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/JsonUtils.kt) | 15 |
5 files changed, 33 insertions, 25 deletions
diff --git a/android/test/mockapi/build.gradle.kts b/android/test/mockapi/build.gradle.kts index cbdd8c0295..5ac80e2ea5 100644 --- a/android/test/mockapi/build.gradle.kts +++ b/android/test/mockapi/build.gradle.kts @@ -54,6 +54,7 @@ dependencies { implementation(Dependencies.AndroidX.testRunner) implementation(Dependencies.AndroidX.testRules) implementation(Dependencies.AndroidX.testUiAutomator) + implementation(Dependencies.jodaTime) implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.mockkWebserver) diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt index 51d0ac7ee6..ef118d35e2 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt @@ -2,10 +2,9 @@ package net.mullvad.mullvadvpn.test.mockapi import androidx.test.runner.AndroidJUnit4 import androidx.test.uiautomator.By -import java.time.OffsetDateTime -import java.time.temporal.ChronoUnit import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel31AndAbove import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero import org.junit.Test import org.junit.runner.RunWith @@ -17,8 +16,7 @@ class LoginMockApiTest : MockApiTest() { val validAccountToken = "1234123412341234" apiDispatcher.apply { expectedAccountToken = null - accountExpiry = - OffsetDateTime.now().plusDays(1).truncatedTo(ChronoUnit.SECONDS) + accountExpiry = currentUtcTimeWithOffsetZero().plusDays(1) } app.launch(endpoint) @@ -37,8 +35,7 @@ class LoginMockApiTest : MockApiTest() { val validAccountToken = "1234123412341234" apiDispatcher.apply { expectedAccountToken = validAccountToken - accountExpiry = - OffsetDateTime.now().plusDays(1).truncatedTo(ChronoUnit.SECONDS) + accountExpiry = currentUtcTimeWithOffsetZero().plusDays(1) } // Act @@ -57,8 +54,7 @@ class LoginMockApiTest : MockApiTest() { val validAccountToken = "1234123412341234" apiDispatcher.apply { expectedAccountToken = validAccountToken - accountExpiry = - OffsetDateTime.now().minusDays(1).truncatedTo(ChronoUnit.SECONDS) + accountExpiry = currentUtcTimeWithOffsetZero().minusDays(1) } // Act 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 b41ad34fa6..16eb543d49 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 @@ -1,24 +1,24 @@ package net.mullvad.mullvadvpn.test.mockapi import android.util.Log -import java.time.OffsetDateTime -import java.time.temporal.ChronoUnit import net.mullvad.mullvadvpn.test.mockapi.constant.ACCOUNT_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.AUTH_TOKEN_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.DEVICES_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ACCESS_TOKEN import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID +import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero import okhttp3.mockwebserver.Dispatcher import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.RecordedRequest import okio.Buffer +import org.joda.time.DateTime import org.json.JSONArray class MockApiDispatcher : Dispatcher() { var expectedAccountToken: String? = null - var accountExpiry: OffsetDateTime? = null + var accountExpiry: DateTime? = null private var cachedPubKeyFromAppUnderTest: String? = null @@ -49,7 +49,7 @@ class MockApiDispatcher : Dispatcher() { .setBody( accessTokenJsonResponse( accessToken = DUMMY_ACCESS_TOKEN, - expiry = OffsetDateTime.now().plusDays(1).truncatedTo(ChronoUnit.SECONDS) + expiry = currentUtcTimeWithOffsetZero().plusDays(1) ).toString() ) } else { @@ -81,8 +81,7 @@ class MockApiDispatcher : Dispatcher() { id = DUMMY_ID, name = DUMMY_DEVICE_NAME, publicKey = cachedKey, - creationDate = OffsetDateTime.now().minusDays(1) - .truncatedTo(ChronoUnit.SECONDS) + creationDate = currentUtcTimeWithOffsetZero().minusDays(1) ).toString() ) } ?: MockResponse().setResponseCode(400) @@ -102,8 +101,7 @@ class MockApiDispatcher : Dispatcher() { id = DUMMY_ID, name = DUMMY_DEVICE_NAME, publicKey = newKey, - creationDate = OffsetDateTime.now().minusDays(1) - .truncatedTo(ChronoUnit.SECONDS) + creationDate = currentUtcTimeWithOffsetZero().minusDays(1) ).toString() ) } ?: MockResponse().setResponseCode(400) @@ -120,8 +118,7 @@ class MockApiDispatcher : Dispatcher() { id = DUMMY_ID, name = DUMMY_DEVICE_NAME, publicKey = cachedKey, - creationDate = OffsetDateTime.now().minusDays(1) - .truncatedTo(ChronoUnit.SECONDS) + creationDate = currentUtcTimeWithOffsetZero().minusDays(1) ) ).toString() ) diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt new file mode 100644 index 0000000000..81042f70d2 --- /dev/null +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt @@ -0,0 +1,13 @@ +package net.mullvad.mullvadvpn.test.mockapi.util + +import org.joda.time.DateTime +import org.joda.time.DateTimeZone +import org.joda.time.format.DateTimeFormat + +private const val STRICT_ISO8601_AND_RFC3339_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZZ" + +fun currentUtcTimeWithOffsetZero() = DateTime.now(DateTimeZone.forOffsetHours(0)) + +fun DateTime.formatStrictlyAccordingToIso8601AndRfc3339(): String { + return toString(DateTimeFormat.forPattern(STRICT_ISO8601_AND_RFC3339_PATTERN)) +} diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/JsonUtils.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt index d6ee2bc6cb..145cbafbd2 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/JsonUtils.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt @@ -1,15 +1,16 @@ package net.mullvad.mullvadvpn.test.mockapi -import java.time.OffsetDateTime +import net.mullvad.mullvadvpn.test.mockapi.util.formatStrictlyAccordingToIso8601AndRfc3339 +import org.joda.time.DateTime import org.json.JSONArray import org.json.JSONObject fun accountInfoJson( id: String, - expiry: OffsetDateTime + expiry: DateTime ) = JSONObject().apply { put("id", id) - put("expiry", expiry.toString()) + put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339()) put("max_ports", 5) put("can_add_ports", true) put("max_devices", 5) @@ -20,13 +21,13 @@ fun deviceJson( id: String, name: String, publicKey: String, - creationDate: OffsetDateTime + creationDate: DateTime ) = JSONObject().apply { put("id", id) put("name", name) put("pubkey", publicKey) put("hijack_dns", true) - put("created", creationDate.toString()) + put("created", creationDate.formatStrictlyAccordingToIso8601AndRfc3339()) put("ipv4_address", "127.0.0.1/32") put("ipv6_address", "fc00::1/128") put("ports", JSONArray()) @@ -34,8 +35,8 @@ fun deviceJson( fun accessTokenJsonResponse( accessToken: String, - expiry: OffsetDateTime + expiry: DateTime ) = JSONObject().apply { put("access_token", accessToken) - put("expiry", expiry.toString()) + put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339()) } |
