Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion benchmark/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import flavor.ProductFlavors
plugins {
id("com.android.test")
alias(libs.plugins.androidx.baselineprofile)
alias(libs.plugins.kotlin.serialization)
}

android {
Expand Down Expand Up @@ -81,7 +82,7 @@ dependencies {
implementation(libs.androidx.test.uiAutomator)
implementation(libs.androidx.benchmark.macro.junit4)
implementation(libs.datafaker)
implementation(libs.gson)
implementation(libs.ktx.serialization)
implementation(libs.junit4)
implementation(libs.zxing.android.embedded)
implementation(libs.zxing.core)
Expand Down
2 changes: 0 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ hamcrest = "3.0"
rules = "1.7.0"
zxing = "3.5.2"
zxingAndroid = "4.3.0"
gson = "2.13.2"
allureKotlin = "2.4.0"
androidx-test-services = "1.6.0"

Expand Down Expand Up @@ -305,7 +304,6 @@ androidx-test-work = { module = "androidx.work:work-testing", version.ref = "and
androidx-benchmark-macro-junit4 = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "benchmark-macro-junit4" }
zxing-core = { module = "com.google.zxing:core", version.ref = "zxing" }
zxing-android-embedded = { module = "com.journeyapps:zxing-android-embedded", version.ref = "zxingAndroid" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }

# Test
androidx-espresso-accessibility = { module = "androidx.test.espresso:espresso-accessibility", version.ref = "androidx-espresso" }
Expand Down
3 changes: 2 additions & 1 deletion tests/testsCore/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
plugins {
id(libs.plugins.wire.android.test.library.get().pluginId)
alias(libs.plugins.kotlin.serialization)
id(libs.plugins.wire.compose.compiler.get().pluginId)
}

Expand Down Expand Up @@ -36,7 +37,7 @@ dependencies {
implementation(libs.datafaker)
androidTestImplementation(libs.zxing.core)
androidTestImplementation(libs.zxing.android.embedded)
androidTestImplementation(libs.gson)
androidTestImplementation(libs.ktx.serialization)
androidTestImplementation(libs.allure.kotlin.android)
androidTestUtil(libs.androidx.test.orchestrator)
androidTestUtil(libs.androidx.test.services)
Expand Down
3 changes: 2 additions & 1 deletion tests/testsSupport/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import java.util.Properties
// Apply your test library plugin
plugins {
id(libs.plugins.wire.android.test.library.get().pluginId)
alias(libs.plugins.kotlin.serialization)
id(libs.plugins.wire.compose.compiler.get().pluginId)
}

Expand Down Expand Up @@ -83,7 +84,7 @@ dependencies {
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(libs.androidx.test.uiAutomator)
implementation(libs.datafaker)
androidTestImplementation(libs.gson)
implementation(libs.ktx.serialization)
}

// Register a custom Gradle task 'fetchSecrets' to fetch secrets from 1Password CLI and generate secrets.json
Expand Down
38 changes: 22 additions & 16 deletions tests/testsSupport/src/main/call/CallingService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ import call.models.CallFlow
import call.models.CallRequest
import call.models.Instance
import call.models.InstanceRequest
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.wire.android.testSupport.BuildConfig
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import network.HttpRequestException
import java.io.IOException
import java.net.HttpCookie
Expand All @@ -37,7 +39,13 @@ class CallingService(
val applicationJson = "application/json"
val contentTypeString = "Content-Type"

private val gson = Gson()
@OptIn(ExperimentalSerializationApi::class)
private val json = Json {
coerceInputValues = true
encodeDefaults = true
explicitNulls = false
ignoreUnknownKeys = true
}
private val cookies = ConcurrentHashMap<String, HttpCookie>()
private var basicAuthUser: String? = null
private var basicAuthPassword: String? = null
Expand Down Expand Up @@ -100,8 +108,8 @@ class CallingService(
conn.setRequestProperty(contentTypeString, applicationJson)
conn.setRequestProperty("Accept", applicationJson)

val response = httpPost(conn, gson.toJson(request), intArrayOf(HttpURLConnection.HTTP_OK))
val instance = gson.fromJson(response, Instance::class.java)
val response = httpPost(conn, json.encodeToString(request), intArrayOf(HttpURLConnection.HTTP_OK))
val instance = json.decodeFromString<Instance>(response)

conn.getHeaderField("Set-Cookie")?.let { cookieHeader ->
HttpCookie.parse(cookieHeader)
Expand All @@ -120,7 +128,7 @@ class CallingService(
return try {
val response = httpPut(conn, "", intArrayOf(HttpURLConnection.HTTP_OK))
cookies.remove(instance.id)
gson.fromJson(response, Instance::class.java)
json.decodeFromString<Instance>(response)
} catch (ex: Exception) {
throw HttpRequestException("destroyInstance failed: ${ex.message}", 500)
}
Expand All @@ -131,7 +139,7 @@ class CallingService(
val conn = buildRequestForInstance(instance.id, target)
return try {
val response = httpGet(conn, intArrayOf(HttpURLConnection.HTTP_OK))
gson.fromJson(response, Instance::class.java)
json.decodeFromString<Instance>(response)
} catch (ex: Exception) {
throw HttpRequestException("getInstance failed: ${ex.message}", 500)
}
Expand All @@ -142,8 +150,7 @@ class CallingService(
val conn = buildRequestForInstance(instance.id, target)
return try {
val response = httpGet(conn, intArrayOf(HttpURLConnection.HTTP_OK))
val type = object : TypeToken<List<CallFlow>>() {}.type
gson.fromJson(response, type)
json.decodeFromString<List<CallFlow>>(response)
} catch (ex: Exception) {
throw HttpRequestException("getFlows failed: ${ex.message}", 500)
}
Expand Down Expand Up @@ -190,8 +197,7 @@ class CallingService(
val conn = buildRequestForCertainInstance(serverId, target)
try {
val response = httpGet(conn, intArrayOf(HttpURLConnection.HTTP_OK))
val type = object : TypeToken<List<Instance>>() {}.type
val serverInstances: List<Instance> = gson.fromJson(response, type)
val serverInstances = json.decodeFromString<List<Instance>>(response)
serverInstances.forEach {
if (!cookies.containsKey(it.id)) {
cookies[it.id!!] = HttpCookie("SERVERID", serverId)
Expand Down Expand Up @@ -273,22 +279,22 @@ class CallingService(

// region CALL HELPERS

private fun performCall(instance: Instance, path: String, request: Any): Call {
private fun performCall(instance: Instance, path: String, request: CallRequest): Call {
val conn = buildRequestForInstance(instance.id, "/api/v1/instance/${instance.id}$path")
val response = httpPost(conn, gson.toJson(request), intArrayOf(HttpURLConnection.HTTP_OK))
return gson.fromJson(response, Call::class.java)
val response = httpPost(conn, json.encodeToString(request), intArrayOf(HttpURLConnection.HTTP_OK))
return json.decodeFromString<Call>(response)
}

private fun performCallPut(instance: Instance, path: String): Call {
val conn = buildRequestForInstance(instance.id, "/api/v1/instance/${instance.id}$path")
val response = httpPut(conn, "", intArrayOf(HttpURLConnection.HTTP_OK))
return gson.fromJson(response, Call::class.java)
return json.decodeFromString<Call>(response)
}

private fun performCallGet(instance: Instance, path: String): Call {
val conn = buildRequestForInstance(instance.id, "/api/v1/instance/${instance.id}$path")
val response = httpGet(conn, intArrayOf(HttpURLConnection.HTTP_OK))
return gson.fromJson(response, Call::class.java)
return json.decodeFromString<Call>(response)
}

// endregion
Expand Down
2 changes: 2 additions & 0 deletions tests/testsSupport/src/main/call/models/BackendDTO.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
package call.models

import backendUtils.BackendClient
import kotlinx.serialization.Serializable

@Serializable
data class BackendDTO(
var name: String,
val webappUrl: String,
Expand Down
3 changes: 3 additions & 0 deletions tests/testsSupport/src/main/call/models/Call.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
*/
package call.models

import kotlinx.serialization.Serializable

@Serializable
data class Call(
var id: String? = null,
var status: CallStatus? = null,
Expand Down
14 changes: 8 additions & 6 deletions tests/testsSupport/src/main/call/models/CallFlow.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,24 @@
*/
package call.models

import com.google.gson.annotations.SerializedName
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CallFlow(
@SerializedName("audioPacketsReceived")
@SerialName("audioPacketsReceived")
val audioPacketsReceived: Long,

@SerializedName("audioPacketsSent")
@SerialName("audioPacketsSent")
val audioPacketsSent: Long,

@SerializedName("videoPacketsReceived")
@SerialName("videoPacketsReceived")
val videoPacketsReceived: Long,

@SerializedName("videoPacketsSent")
@SerialName("videoPacketsSent")
val videoPacketsSent: Long,

@SerializedName("remoteUserId")
@SerialName("remoteUserId")
val remoteUserId: String
) {

Expand Down
8 changes: 5 additions & 3 deletions tests/testsSupport/src/main/call/models/CallRequest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
*/
package call.models

import com.google.gson.annotations.SerializedName
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CallRequest(
@SerializedName("conversationId")
@SerialName("conversationId")
val conversationId: String = "",

@SerializedName("timeout")
@SerialName("timeout")
val timeout: Long = DEFAULT_CALL_TIMEOUT
) {
companion object {
Expand Down
3 changes: 3 additions & 0 deletions tests/testsSupport/src/main/call/models/CallStatus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
*/
package call.models

import kotlinx.serialization.Serializable

@Serializable
enum class CallStatus {
NON_EXISTENT,
WAITING,
Expand Down
3 changes: 3 additions & 0 deletions tests/testsSupport/src/main/call/models/Instance.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
*/
package call.models

import kotlinx.serialization.Serializable

@Serializable
data class Instance(
val id: String?,
val instanceStatus: InstanceStatus?,
Expand Down
3 changes: 3 additions & 0 deletions tests/testsSupport/src/main/call/models/InstanceRequest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
*/
package call.models

import kotlinx.serialization.Serializable

@Serializable
data class InstanceRequest(
val email: String,
val password: String,
Expand Down
3 changes: 3 additions & 0 deletions tests/testsSupport/src/main/call/models/InstanceStatus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@

package call.models

import kotlinx.serialization.Serializable

@Serializable
enum class InstanceStatus {
NON_EXISTENT,
STARTING,
Expand Down
3 changes: 3 additions & 0 deletions tests/testsSupport/src/main/call/models/Metrics.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
)
package call.models

import kotlinx.serialization.Serializable

@Serializable
data class Metrics(
val success: Boolean,
val estabTimeMs: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
*/
package call.models

import kotlinx.serialization.Serializable

@Serializable
data class VersionedInstanceType(
val name: String,
val version: String
Expand Down
Loading