ChirpSyncTransportTest.kt

3.2 KB · raw

1package com.peachpasswords.sync23import kotlinx.coroutines.runBlocking4import org.junit.Assert.assertFalse5import org.junit.Assert.assertNull6import org.junit.Assert.assertTrue7import org.junit.Before8import org.junit.Test910class ChirpSyncTransportTest {11    private val peerPubkey = "ab".repeat(32)1213    @Before14    fun setUp() {15        resetSubnetProbeCooldown()16    }1718    @Test19    fun `subnetProbeOnCooldown returns false before any probe has happened`() {20        assertFalse(subnetProbeOnCooldown(peerPubkey))21    }2223    @Test24    fun `subnetProbeOnCooldown returns true within the cooldown window after a probe`() = runBlocking {25        val now = 1_000_000L26        probeSubnetForPeer(27            subnet = "10.0.0",28            port = SyncReconnectListener.SYNC_PORT,29            ourLongTermPrivateKey = ByteArray(32),30            ourLongTermPublicKey = ByteArray(32),31            expectedRemotePubkeyHex = peerPubkey,32            batch = 254,33            timeoutMs = 1,34            now = now,35        )36        assertTrue(subnetProbeOnCooldown(peerPubkey, now + 1))37        assertTrue(subnetProbeOnCooldown(peerPubkey, now + SUBNET_PROBE_COOLDOWN_MS - 1))38    }3940    @Test41    fun `subnetProbeOnCooldown releases after the window expires`() = runBlocking {42        val now = 1_000_000L43        probeSubnetForPeer(44            subnet = "10.0.0",45            port = SyncReconnectListener.SYNC_PORT,46            ourLongTermPrivateKey = ByteArray(32),47            ourLongTermPublicKey = ByteArray(32),48            expectedRemotePubkeyHex = peerPubkey,49            batch = 254,50            timeoutMs = 1,51            now = now,52        )53        assertFalse(subnetProbeOnCooldown(peerPubkey, now + SUBNET_PROBE_COOLDOWN_MS))54    }5556    @Test57    fun `probeSubnetForPeer returns null and skips the scan when on cooldown`() = runBlocking {58        val now = 1_000_000L59        probeSubnetForPeer(60            subnet = "10.0.0",61            port = SyncReconnectListener.SYNC_PORT,62            ourLongTermPrivateKey = ByteArray(32),63            ourLongTermPublicKey = ByteArray(32),64            expectedRemotePubkeyHex = peerPubkey,65            batch = 254,66            timeoutMs = 1,67            now = now,68        )69        val result = probeSubnetForPeer(70            subnet = "10.0.0",71            port = SyncReconnectListener.SYNC_PORT,72            ourLongTermPrivateKey = ByteArray(32),73            ourLongTermPublicKey = ByteArray(32),74            expectedRemotePubkeyHex = peerPubkey,75            batch = 254,76            timeoutMs = 1,77            now = now + 1_000,78        )79        assertNull(result)80    }8182    @Test83    fun `probeSubnetForPeer tracks cooldown independently per peer pubkey`() = runBlocking {84        val now = 1_000_000L85        val other = "cd".repeat(32)86        probeSubnetForPeer(87            subnet = "10.0.0",88            port = SyncReconnectListener.SYNC_PORT,89            ourLongTermPrivateKey = ByteArray(32),90            ourLongTermPublicKey = ByteArray(32),91            expectedRemotePubkeyHex = peerPubkey,92            batch = 254,93            timeoutMs = 1,94            now = now,95        )96        assertTrue(subnetProbeOnCooldown(peerPubkey, now + 1))97        assertFalse(subnetProbeOnCooldown(other, now + 1))98    }99}