mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
test(network): Add Kotest property-based tests for StreamFrameCodec
This commit is contained in:
parent
7ab0f378ed
commit
2c8fd6a8f3
2 changed files with 40 additions and 1 deletions
|
|
@ -67,6 +67,10 @@ kotlin {
|
|||
implementation(libs.okhttp3.logging.interceptor)
|
||||
}
|
||||
|
||||
commonTest.dependencies { implementation(libs.kotlinx.coroutines.test) }
|
||||
commonTest.dependencies {
|
||||
implementation(libs.kotlinx.coroutines.test)
|
||||
implementation(libs.kotest.assertions)
|
||||
implementation(libs.kotest.property)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,14 @@
|
|||
*/
|
||||
package org.meshtastic.core.network.transport
|
||||
|
||||
import io.kotest.matchers.nulls.shouldNotBeNull
|
||||
import io.kotest.matchers.shouldBe
|
||||
import io.kotest.property.Arb
|
||||
import io.kotest.property.arbitrary.byte
|
||||
import io.kotest.property.arbitrary.byteArray
|
||||
import io.kotest.property.arbitrary.int
|
||||
import io.kotest.property.checkAll
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertTrue
|
||||
|
|
@ -56,6 +64,33 @@ class StreamFrameCodecTest {
|
|||
assertEquals(listOf(0x55.toByte()), receivedPackets[0].toList())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `frameAndSend and processInputByte are inverse`() = runTest {
|
||||
checkAll(Arb.byteArray(Arb.int(0, 512), Arb.byte())) { payload ->
|
||||
var received: ByteArray? = null
|
||||
val codec = StreamFrameCodec(onPacketReceived = { received = it })
|
||||
|
||||
val bytes = mutableListOf<ByteArray>()
|
||||
codec.frameAndSend(payload, sendBytes = { bytes.add(it) })
|
||||
|
||||
bytes.forEach { arr ->
|
||||
arr.forEach { codec.processInputByte(it) }
|
||||
}
|
||||
|
||||
received.shouldNotBeNull()
|
||||
received.shouldBe(payload)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `processInputByte is robust against random noise`() = runTest {
|
||||
checkAll(Arb.byteArray(Arb.int(0, 1000), Arb.byte())) { noise ->
|
||||
val codec = StreamFrameCodec(onPacketReceived = { /* ignore */ })
|
||||
noise.forEach { codec.processInputByte(it) }
|
||||
// Should not crash
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `processInputByte handles multiple packets sequentially`() {
|
||||
val packet1 = byteArrayOf(0x94.toByte(), 0xc3.toByte(), 0x00, 0x01, 0x11)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue