summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-02-02 10:09:13 +0100
committerAlbin <albin@mullvad.net>2023-02-02 10:54:28 +0100
commitf2f77e29107fd992631f02b51aff0a1249b8287d (patch)
tree83254cf90032dcd2e08abb85dde36cb41c6b140c
parent423d3e7ae0f6a54a6ea4506df4ea9ad2df9b6eab (diff)
downloadmullvadvpn-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.kts1
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt12
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt17
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt13
-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())
}