From 5caa1131c8da2a2da0570ff7ffa4fba970e99b0a Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 4 Oct 2026 16:10:41 +0200 Subject: [PATCH] Test Android member radio flags and update preservation --- .../tests/test_member_radio.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tools/chatgui-android/tests/test_member_radio.kt diff --git a/tools/chatgui-android/tests/test_member_radio.kt b/tools/chatgui-android/tests/test_member_radio.kt new file mode 100644 index 00000000..94c8b5af --- /dev/null +++ b/tools/chatgui-android/tests/test_member_radio.kt @@ -0,0 +1,37 @@ +import com.utun.chat.data.ChatMember +import com.utun.chat.data.parseMemberWire +import com.utun.chat.data.toChatMember +import java.nio.ByteBuffer +import java.nio.ByteOrder + +/* Проверяет реальные классы из app/build/tmp/kotlin-classes/debug после assembleDebug. */ +fun main() { + val offset = 7 + val data = ByteArray(offset + 79) + ByteBuffer.wrap(data, offset, 79).order(ByteOrder.LITTLE_ENDIAN).apply { + putLong(42L); put(1); put(1); put(0x12); putShort(250); put(1); put(1) + put("Member".toByteArray()) + } + val wire = requireNotNull(parseMemberWire(data, offset)) + check(wire.nodeId == 42L && wire.isSelf && wire.name == "Member") + val previous = ChatMember(42L, "old", isVerified = true, nodeType = 4, directUp = true, + indirectUp = true, directPresence = true, indirectPresence = true, bgpPresence = true, + bgpRtt = 321, bgpNodes = 5, connecting = true) + val enabled = wire.toChatMember(previous) + check(enabled.radioActive && enabled.isAdmin && enabled.isStorage && enabled.online) + check(enabled.isVerified && enabled.nodeType == 4 && enabled.directUp && enabled.indirectUp) + check(enabled.directPresence && enabled.indirectPresence && enabled.bgpPresence) + check(enabled.bgpRtt == 321 && enabled.bgpNodes == 5 && enabled.connecting) + check(enabled.rtt == 250 && enabled.name == "Member") + + data[offset + 10] = 2 // Повторное обновление выключает рацию, сохраняя остальные сведения. + val disabled = requireNotNull(parseMemberWire(data, offset)).toChatMember(enabled) + check(!disabled.radioActive && disabled.isVerified && disabled.directUp && disabled.connecting) + data[offset + 10] = 8 + check(requireNotNull(parseMemberWire(data, offset)).toChatMember(disabled).isDeleted) + check(parseMemberWire(data, -1) == null) + check(parseMemberWire(data, Int.MAX_VALUE) == null) + check(parseMemberWire(data, offset + 1) == null) + check(parseMemberWire(ByteArray(78)) == null) + println("PASS: radio on/off; wire offsets; updates preserve verified/type/transports; deleted flag; truncated records") +}