Skip to content

Commit

Permalink
Make FakeClock instantiable without spy(). (jitsi#165)
Browse files Browse the repository at this point in the history
* Make FakeClock instantiable without spy().

This removes Mockito overhead from its method calls, speeding up BandwidthEstimationTest substantially.

* Put DtlsTest's PcapWriter behind a debug flag.

* Simplify DtlsTest's PcapWriter conditional.
  • Loading branch information
JonathanLennox committed Dec 17, 2019
1 parent 14ec968 commit 6ba0047
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 15 deletions.
Expand Up @@ -35,6 +35,7 @@ import org.jitsi.rtp.UnparsedPacket
class DtlsTest : ShouldSpec() {
override fun isolationMode(): IsolationMode? = IsolationMode.InstancePerLeaf
private val debugEnabled = true
private val pcapEnabled = false
private val logger = StdoutLogger()

fun debug(s: String) {
Expand All @@ -58,19 +59,19 @@ class DtlsTest : ShouldSpec() {
val clientSender = ProtocolSender(dtlsClient)
val clientReceiver = ProtocolReceiver(dtlsClient)

val pcapWriter = PcapWriter(logger, "/tmp/dtls-test.pcap")
val pcapWriter = if (pcapEnabled) PcapWriter(logger, "/tmp/dtls-test.pcap") else null

// The server and client senders are connected directly to their
// peer's receiver
serverSender.attach(object : ConsumerNode("server network") {
override fun consume(packetInfo: PacketInfo) {
pcapWriter.processPacket(packetInfo)
pcapWriter?.processPacket(packetInfo)
clientReceiver.processPacket(packetInfo)
}
})
clientSender.attach(object : ConsumerNode("client network") {
override fun consume(packetInfo: PacketInfo) {
pcapWriter.processPacket(packetInfo)
pcapWriter?.processPacket(packetInfo)
serverReceiver.processPacket(packetInfo)
}
})
Expand Down
Expand Up @@ -16,7 +16,6 @@

package org.jitsi.nlj.rtcp

import com.nhaarman.mockitokotlin2.spy
import io.kotlintest.IsolationMode
import io.kotlintest.matchers.collections.shouldBeEmpty
import io.kotlintest.matchers.collections.shouldHaveSize
Expand Down Expand Up @@ -63,7 +62,7 @@ class KeyframeRequesterTest : ShouldSpec() {
override fun getRemoteSecondarySsrc(primarySsrc: Long, associationType: SsrcAssociationType): Long? = null
}
private val logger = StdoutLogger()
private val clock: FakeClock = spy()
private val clock: FakeClock = FakeClock()

private val keyframeRequester = KeyframeRequester(streamInformationStore, logger, clock)
private val sentKeyframeRequests = mutableListOf<PacketInfo>()
Expand Down
Expand Up @@ -18,7 +18,6 @@ package org.jitsi.nlj.stats

import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.spy
import io.kotlintest.IsolationMode
import io.kotlintest.matchers.doubles.plusOrMinus
import io.kotlintest.milliseconds
Expand All @@ -35,7 +34,7 @@ import org.jitsi.rtp.rtcp.RtcpSrPacket
class EndpointConnectionStatsTest : ShouldSpec() {
override fun isolationMode(): IsolationMode? = IsolationMode.InstancePerLeaf

private val clock: FakeClock = spy()
private val clock: FakeClock = FakeClock()

private var mostRecentPublishedRtt: Double = -1.0
private var numRttUpdates: Int = 0
Expand Down
Expand Up @@ -16,7 +16,6 @@

package org.jitsi.nlj.stats

import com.nhaarman.mockitokotlin2.spy
import io.kotlintest.IsolationMode
import io.kotlintest.minutes
import io.kotlintest.seconds
Expand All @@ -28,7 +27,7 @@ class PacketIOActivityTest : ShouldSpec() {
override fun isolationMode(): IsolationMode? = IsolationMode.InstancePerLeaf

private val packetIoActivity = PacketIOActivity()
private val clock: FakeClock = spy()
private val clock: FakeClock = FakeClock()

init {
"Last packet time values" {
Expand Down
Expand Up @@ -19,12 +19,14 @@ package org.jitsi.nlj.test_utils
import java.time.Clock
import java.time.Duration
import java.time.Instant
import java.time.ZoneId

/**
* A fake [Clock] whose time is advanced manually
*/
internal abstract class FakeClock(
private val debug: Boolean = false
internal class FakeClock(
private val debug: Boolean = false,
private val zone_: ZoneId = ZoneId.systemDefault()
) : Clock() {
private var now = Instant.ofEpochMilli(0)

Expand All @@ -47,4 +49,14 @@ internal abstract class FakeClock(
log("clock setting time to $instant")
now = instant
}

override fun getZone(): ZoneId {
return zone_
}

override fun withZone(zone: ZoneId?): Clock {
if (zone_ == zone)
return this
return FakeClock(zone_ = zone!!)
}
}
Expand Up @@ -9,7 +9,7 @@ import java.util.concurrent.Future

internal abstract class FakeExecutorService : ExecutorService {
private var jobs = JobsTimeline()
val clock: FakeClock = stubOnlySpy()
val clock: FakeClock = FakeClock()

override fun execute(command: Runnable) {
jobs.add(Job(command, clock.instant()))
Expand Down
Expand Up @@ -15,7 +15,7 @@ import java.util.concurrent.TimeUnit
*/
internal abstract class FakeScheduledExecutorService : ScheduledExecutorService {
private var jobs = JobsTimeline()
val clock: FakeClock = stubOnlySpy()
val clock: FakeClock = FakeClock()

override fun scheduleAtFixedRate(command: Runnable, initialDelay: Long, period: Long, unit: TimeUnit): ScheduledFuture<*> {
val future: ScheduledFuture<Unit> = mock(stubOnly = true)
Expand Down
Expand Up @@ -4,7 +4,6 @@ import com.nhaarman.mockitokotlin2.argumentCaptor
import com.nhaarman.mockitokotlin2.doNothing
import com.nhaarman.mockitokotlin2.eq
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.spy
import com.nhaarman.mockitokotlin2.whenever
import io.kotlintest.IsolationMode
import io.kotlintest.Spec
Expand All @@ -24,7 +23,7 @@ import org.jitsi.rtp.rtp.header_extensions.TccHeaderExtension
class TccGeneratorNodeTest : ShouldSpec() {
override fun isolationMode(): IsolationMode? = IsolationMode.InstancePerLeaf

private val clock: FakeClock = spy()
private val clock: FakeClock = FakeClock()
private val tccPackets = mutableListOf<RtcpPacket>()
private val onTccReady = { tccPacket: RtcpPacket -> tccPackets.add(tccPacket); Unit }
private val streamInformationStore: StreamInformationStore = mock()
Expand Down

0 comments on commit 6ba0047

Please sign in to comment.