mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-06-28 10:05:45 +01:00
Allow SendDeliveryReceiptJob to run during benchmarking tests.
This commit is contained in:
committed by
Alex Hart
parent
47947b85c7
commit
58b5ebf39d
@@ -11,12 +11,12 @@ import android.content.Intent
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.signal.benchmark.network.BenchmarkWebSocketConnection
|
||||
import org.signal.benchmark.setup.Generator
|
||||
import org.signal.benchmark.setup.Harness
|
||||
import org.signal.core.util.ThreadUtil
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.whispersystems.signalservice.internal.push.Envelope
|
||||
import org.whispersystems.signalservice.internal.websocket.BenchmarkWebSocketConnection
|
||||
import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessage
|
||||
import kotlin.random.Random
|
||||
|
||||
@@ -46,8 +46,8 @@ class BenchmarkCommandReceiver : BroadcastReceiver() {
|
||||
"individual-send" -> handlePrepareIndividualSend()
|
||||
"group-send" -> handlePrepareGroupSend()
|
||||
"release-messages" -> {
|
||||
BenchmarkWebSocketConnection.instance.startWholeBatchTrace = true
|
||||
BenchmarkWebSocketConnection.instance.releaseMessages()
|
||||
BenchmarkWebSocketConnection.authInstance.startWholeBatchTrace = true
|
||||
BenchmarkWebSocketConnection.authInstance.releaseMessages()
|
||||
}
|
||||
else -> Log.w(TAG, "Unknown command: $command")
|
||||
}
|
||||
@@ -61,7 +61,7 @@ class BenchmarkCommandReceiver : BroadcastReceiver() {
|
||||
|
||||
runBlocking {
|
||||
launch(Dispatchers.IO) {
|
||||
BenchmarkWebSocketConnection.instance.run {
|
||||
BenchmarkWebSocketConnection.authInstance.run {
|
||||
Log.i(TAG, "Sending initial message form Bob to establish session.")
|
||||
addPendingMessages(listOf(encryptedEnvelope.toWebSocketPayload()))
|
||||
releaseMessages()
|
||||
@@ -78,8 +78,8 @@ class BenchmarkCommandReceiver : BroadcastReceiver() {
|
||||
|
||||
val messages = envelopes.map { e -> e.toWebSocketPayload() }
|
||||
|
||||
BenchmarkWebSocketConnection.instance.addPendingMessages(messages)
|
||||
BenchmarkWebSocketConnection.instance.addQueueEmptyMessage()
|
||||
BenchmarkWebSocketConnection.authInstance.addPendingMessages(messages)
|
||||
BenchmarkWebSocketConnection.authInstance.addQueueEmptyMessage()
|
||||
}
|
||||
|
||||
private fun handlePrepareGroupSend() {
|
||||
@@ -90,7 +90,7 @@ class BenchmarkCommandReceiver : BroadcastReceiver() {
|
||||
|
||||
runBlocking {
|
||||
launch(Dispatchers.IO) {
|
||||
BenchmarkWebSocketConnection.instance.run {
|
||||
BenchmarkWebSocketConnection.authInstance.run {
|
||||
Log.i(TAG, "Sending initial group messages from client to establish sessions.")
|
||||
addPendingMessages(encryptedEnvelopes.map { it.toWebSocketPayload() })
|
||||
releaseMessages()
|
||||
@@ -108,9 +108,9 @@ class BenchmarkCommandReceiver : BroadcastReceiver() {
|
||||
|
||||
val messages = envelopes.map { e -> e.toWebSocketPayload() }
|
||||
|
||||
BenchmarkWebSocketConnection.instance.addPendingMessages(messages)
|
||||
BenchmarkWebSocketConnection.authInstance.addPendingMessages(messages)
|
||||
}
|
||||
BenchmarkWebSocketConnection.instance.addQueueEmptyMessage()
|
||||
BenchmarkWebSocketConnection.authInstance.addQueueEmptyMessage()
|
||||
}
|
||||
|
||||
private fun Envelope.toWebSocketPayload(): WebSocketRequestMessage {
|
||||
|
||||
+28
-14
@@ -3,18 +3,15 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.benchmark.network
|
||||
package org.whispersystems.signalservice.internal.websocket
|
||||
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
||||
import okio.IOException
|
||||
import org.thoughtcrime.securesms.util.JsonUtils
|
||||
import org.thoughtcrime.securesms.util.SignalTrace
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState
|
||||
import org.whispersystems.signalservice.internal.websocket.WebSocketConnection
|
||||
import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessage
|
||||
import org.whispersystems.signalservice.internal.websocket.WebSocketResponseMessage
|
||||
import org.whispersystems.signalservice.internal.websocket.WebsocketResponse
|
||||
import org.whispersystems.signalservice.internal.push.SendMessageResponse
|
||||
import java.net.SocketException
|
||||
import java.util.LinkedList
|
||||
import java.util.Optional
|
||||
@@ -32,13 +29,22 @@ import java.util.concurrent.TimeoutException
|
||||
class BenchmarkWebSocketConnection : WebSocketConnection {
|
||||
|
||||
companion object {
|
||||
lateinit var instance: BenchmarkWebSocketConnection
|
||||
lateinit var authInstance: BenchmarkWebSocketConnection
|
||||
private set
|
||||
|
||||
@Synchronized
|
||||
fun create(): WebSocketConnection {
|
||||
instance = BenchmarkWebSocketConnection()
|
||||
return instance
|
||||
fun createAuthInstance(): WebSocketConnection {
|
||||
authInstance = BenchmarkWebSocketConnection()
|
||||
return authInstance
|
||||
}
|
||||
|
||||
lateinit var unauthInstance: BenchmarkWebSocketConnection
|
||||
private set
|
||||
|
||||
@Synchronized
|
||||
fun createUnauthInstance(): WebSocketConnection {
|
||||
unauthInstance = BenchmarkWebSocketConnection()
|
||||
return unauthInstance
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,12 +124,16 @@ class BenchmarkWebSocketConnection : WebSocketConnection {
|
||||
request: WebSocketRequestMessage,
|
||||
timeoutSeconds: Long
|
||||
): Single<WebsocketResponse> {
|
||||
return Single.error(IOException("fake timeout"))
|
||||
if (request.verb != null && request.path != null) {
|
||||
if (request.verb == "PUT" && request.path!!.startsWith("/v1/messages/")) {
|
||||
return Single.just(WebsocketResponse(200, SendMessageResponse().toJson(), emptyList<String>(), true))
|
||||
}
|
||||
}
|
||||
|
||||
return Single.error(okio.IOException("fake timeout"))
|
||||
}
|
||||
|
||||
override fun sendKeepAlive() {
|
||||
error("Not yet implemented")
|
||||
}
|
||||
override fun sendKeepAlive() = Unit
|
||||
|
||||
fun addQueueEmptyMessage() {
|
||||
addPendingMessages(
|
||||
@@ -136,3 +146,7 @@ class BenchmarkWebSocketConnection : WebSocketConnection {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun Any.toJson(): String {
|
||||
return JsonUtils.toJson(this)
|
||||
}
|
||||
Reference in New Issue
Block a user