using proxy to allow the encryption tests to wait for keys to be uploaded, re-enabling the 2nd device user tests

This commit is contained in:
Adam Brown 2022-09-27 21:13:21 +01:00
parent ef41f13a7b
commit 69e7dfd90a
2 changed files with 39 additions and 14 deletions

View File

@ -123,18 +123,20 @@ class SmokeTest {
alice.expectTextMessage(SharedState.sharedRoom, message2) alice.expectTextMessage(SharedState.sharedRoom, message2)
// Needs investigation // Needs investigation
// val aliceSecondDevice = testMatrix(SharedState.alice, isTemp = true, withLogging = true).also { it.newlogin() } val aliceSecondDevice = testMatrix(SharedState.alice, isTemp = true, withLogging = true).also { it.newlogin() }
// aliceSecondDevice.client.syncService().startSyncing().collectAsync { aliceSecondDevice.client.syncService().startSyncing().collectAsync {
// val message3 = "from alice to bob and alice's second device".from(SharedState.alice.roomMember) aliceSecondDevice.client.proxyDeviceService().waitForOneTimeKeysToBeUploaded()
// alice.sendTextMessage(SharedState.sharedRoom, message3.content, isEncrypted)
// aliceSecondDevice.expectTextMessage(SharedState.sharedRoom, message3) val message3 = "from alice to bob and alice's second device".from(SharedState.alice.roomMember)
// bob.expectTextMessage(SharedState.sharedRoom, message3) alice.sendTextMessage(SharedState.sharedRoom, message3.content, isEncrypted)
// aliceSecondDevice.expectTextMessage(SharedState.sharedRoom, message3)
// val message4 = "from alice's second device to bob and alice's first device".from(SharedState.alice.roomMember) bob.expectTextMessage(SharedState.sharedRoom, message3)
// aliceSecondDevice.sendTextMessage(SharedState.sharedRoom, message4.content, isEncrypted)
// alice.expectTextMessage(SharedState.sharedRoom, message4) val message4 = "from alice's second device to bob and alice's first device".from(SharedState.alice.roomMember)
// bob.expectTextMessage(SharedState.sharedRoom, message4) aliceSecondDevice.sendTextMessage(SharedState.sharedRoom, message4.content, isEncrypted)
// } alice.expectTextMessage(SharedState.sharedRoom, message4)
bob.expectTextMessage(SharedState.sharedRoom, message4)
}
} }
} }

View File

@ -14,6 +14,7 @@ import app.dapk.st.matrix.crypto.RoomMembersProvider
import app.dapk.st.matrix.crypto.Verification import app.dapk.st.matrix.crypto.Verification
import app.dapk.st.matrix.crypto.cryptoService import app.dapk.st.matrix.crypto.cryptoService
import app.dapk.st.matrix.crypto.installCryptoService import app.dapk.st.matrix.crypto.installCryptoService
import app.dapk.st.matrix.device.DeviceService
import app.dapk.st.matrix.device.deviceService import app.dapk.st.matrix.device.deviceService
import app.dapk.st.matrix.device.installEncryptionService import app.dapk.st.matrix.device.installEncryptionService
import app.dapk.st.matrix.http.ktor.KtorMatrixHttpClientFactory import app.dapk.st.matrix.http.ktor.KtorMatrixHttpClientFactory
@ -39,6 +40,7 @@ import test.impl.PrintingErrorTracking
import java.io.File import java.io.File
import java.time.Clock import java.time.Clock
import javax.imageio.ImageIO import javax.imageio.ImageIO
import kotlin.coroutines.resume
object TestUsers { object TestUsers {
@ -93,7 +95,9 @@ class TestMatrix(
).also { ).also {
it.install { it.install {
installAuthService(storeModule.credentialsStore()) installAuthService(storeModule.credentialsStore())
installEncryptionService(storeModule.knownDevicesStore()) installEncryptionService(storeModule.knownDevicesStore()).proxy {
ProxyDeviceService(it)
}
val olmAccountStore = OlmPersistenceWrapper(storeModule.olmStore(), base64) val olmAccountStore = OlmPersistenceWrapper(storeModule.olmStore(), base64)
val olm = OlmWrapper( val olm = OlmWrapper(
@ -356,3 +360,22 @@ class JavaImageContentReader : ImageContentReader {
override fun inputStream(uri: String) = File(uri).inputStream() override fun inputStream(uri: String) = File(uri).inputStream()
} }
class ProxyDeviceService(private val deviceService: DeviceService) : DeviceService by deviceService {
private var oneTimeKeysContinuation: (() -> Unit)? = null
override suspend fun uploadOneTimeKeys(oneTimeKeys: DeviceService.OneTimeKeys) {
deviceService.uploadOneTimeKeys(oneTimeKeys)
oneTimeKeysContinuation?.invoke()?.also { oneTimeKeysContinuation = null }
}
suspend fun waitForOneTimeKeysToBeUploaded() {
suspendCancellableCoroutine { continuation ->
oneTimeKeysContinuation = { continuation.resume(Unit) }
}
}
}
fun MatrixClient.proxyDeviceService() = this.deviceService() as ProxyDeviceService