David Liu

SignalClientTest

@@ -124,10 +124,12 @@ constructor( @@ -124,10 +124,12 @@ constructor(
124 } 124 }
125 coroutineScope.launch { 125 coroutineScope.launch {
126 delay(startDelay) 126 delay(startDelay)
127 - if (iceState != IceState.DISCONNECTED && sessionUrl != null && sessionToken != null) { 127 + val url = sessionUrl
  128 + val token = sessionToken
  129 + if (iceState != IceState.DISCONNECTED && url != null && token != null) {
128 val opts = ConnectOptions() 130 val opts = ConnectOptions()
129 opts.reconnect = true 131 opts.reconnect = true
130 - client.join(sessionUrl!!, sessionToken!!, opts) 132 + client.join(url, token, opts)
131 } 133 }
132 } 134 }
133 } 135 }
  1 +package io.livekit.android.room
  2 +
  3 +class RTCEngineTest {
  4 +}
  1 +package io.livekit.android.room
  2 +
  3 +import com.google.protobuf.util.JsonFormat
  4 +import kotlinx.serialization.json.Json
  5 +import livekit.LivekitRtc
  6 +import okhttp3.*
  7 +import okio.ByteString.Companion.toByteString
  8 +import org.junit.Before
  9 +import org.junit.Test
  10 +import org.mockito.Mockito
  11 +import org.mockito.kotlin.verify
  12 +
  13 +class SignalClientTest {
  14 +
  15 + lateinit var wsFactory: MockWebsocketFactory
  16 + lateinit var client: SignalClient
  17 + lateinit var listener: SignalClient.Listener
  18 +
  19 + class MockWebsocketFactory : WebSocket.Factory {
  20 + lateinit var ws: WebSocket
  21 + lateinit var request: Request
  22 + override fun newWebSocket(request: Request, listener: WebSocketListener): WebSocket {
  23 + ws = Mockito.mock(WebSocket::class.java)
  24 + this.request = request
  25 + return ws
  26 + }
  27 + }
  28 +
  29 + @Before
  30 + fun setup() {
  31 + wsFactory = MockWebsocketFactory()
  32 + client = SignalClient(
  33 + wsFactory,
  34 + JsonFormat.parser(),
  35 + JsonFormat.printer(),
  36 + Json,
  37 + useJson = false
  38 + )
  39 + listener = Mockito.mock(SignalClient.Listener::class.java)
  40 + client.listener = listener
  41 + }
  42 +
  43 + fun join() {
  44 + client.join("http://www.example.com", "", null)
  45 + }
  46 +
  47 + @Test
  48 + fun joinAndResponse() {
  49 + join()
  50 + client.onOpen(
  51 + wsFactory.ws,
  52 + Response.Builder()
  53 + .request(wsFactory.request)
  54 + .code(200)
  55 + .protocol(Protocol.HTTP_2)
  56 + .message("")
  57 + .build()
  58 + )
  59 +
  60 + val response = with(LivekitRtc.SignalResponse.newBuilder()) {
  61 + join = with(joinBuilder) {
  62 + room = with(roomBuilder) {
  63 + name = "roomname"
  64 + sid = "sid"
  65 + build()
  66 + }
  67 + build()
  68 + }
  69 + build()
  70 + }
  71 + val byteArray = response.toByteArray()
  72 + val byteString = byteArray.toByteString(0, byteArray.size)
  73 +
  74 + client.onMessage(wsFactory.ws, byteString)
  75 +
  76 + verify(listener).onJoin(response.join)
  77 + }
  78 +}