blob: eb38073a85f719a57c507cec0dd96fb6b58fc691 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.dump
import android.content.BroadcastReceiver
import android.content.IntentFilter
import android.os.UserHandle
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentCaptor
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
@SmallTest
class LogBufferFreezerTest : SysuiTestCase() {
lateinit var freezer: LogBufferFreezer
lateinit var receiver: BroadcastReceiver
@Mock
lateinit var dumpManager: DumpManager
@Mock
lateinit var broadcastDispatcher: BroadcastDispatcher
@Captor
lateinit var receiverCaptor: ArgumentCaptor<BroadcastReceiver>
val clock = FakeSystemClock()
val executor = FakeExecutor(clock)
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
freezer = LogBufferFreezer(dumpManager, executor, 500)
freezer.attach(broadcastDispatcher)
verify(broadcastDispatcher)
.registerReceiver(
capture(receiverCaptor),
any(IntentFilter::class.java),
eq(executor),
any(UserHandle::class.java))
receiver = receiverCaptor.value
}
@Test
fun testBuffersAreFrozenInResponseToBroadcast() {
// WHEN the bugreport intent is fired
receiver.onReceive(null, null)
// THEN the buffers are frozen
verify(dumpManager).freezeBuffers()
}
@Test
fun testBuffersAreUnfrozenAfterTimeout() {
// GIVEN that we've already frozen the buffers in response to a broadcast
receiver.onReceive(null, null)
verify(dumpManager).freezeBuffers()
// WHEN the timeout expires
clock.advanceTime(501)
// THEN the buffers are unfrozen
verify(dumpManager).unfreezeBuffers()
}
@Test
fun testBuffersAreNotPrematurelyUnfrozen() {
// GIVEN that we received a broadcast 499ms ago (shortly before the timeout would expire)
receiver.onReceive(null, null)
verify(dumpManager).freezeBuffers()
clock.advanceTime(499)
// WHEN we receive a second broadcast
receiver.onReceive(null, null)
// THEN the buffers are frozen a second time
verify(dumpManager, times(2)).freezeBuffers()
// THEN when we advance beyond the first timeout, nothing happens
clock.advanceTime(101)
verify(dumpManager, never()).unfreezeBuffers()
// THEN only when we advance past the reset timeout window are the buffers unfrozen
clock.advanceTime(401)
verify(dumpManager).unfreezeBuffers()
}
}