139 lines
4.9 KiB
Kotlin
139 lines
4.9 KiB
Kotlin
package com.android.systemui.log
|
|
|
|
import androidx.test.filters.SmallTest
|
|
import com.android.systemui.SysuiTestCase
|
|
import com.android.systemui.plugins.log.LogBuffer
|
|
import com.google.common.truth.Truth.assertThat
|
|
import java.io.PrintWriter
|
|
import java.io.StringWriter
|
|
import org.junit.Before
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
import org.mockito.Mock
|
|
import org.mockito.junit.MockitoJUnitRunner
|
|
|
|
@SmallTest
|
|
@RunWith(MockitoJUnitRunner::class)
|
|
class LogBufferTest : SysuiTestCase() {
|
|
private lateinit var buffer: LogBuffer
|
|
|
|
private lateinit var outputWriter: StringWriter
|
|
|
|
@Mock private lateinit var logcatEchoTracker: LogcatEchoTracker
|
|
|
|
@Before
|
|
fun setup() {
|
|
outputWriter = StringWriter()
|
|
buffer = createBuffer()
|
|
}
|
|
|
|
private fun createBuffer(): LogBuffer {
|
|
return LogBuffer("TestBuffer", 1, logcatEchoTracker, false)
|
|
}
|
|
|
|
@Test
|
|
fun log_shouldSaveLogToBuffer() {
|
|
buffer.log("Test", LogLevel.INFO, "Some test message")
|
|
|
|
val dumpedString = dumpBuffer()
|
|
|
|
assertThat(dumpedString).contains("Some test message")
|
|
}
|
|
|
|
@Test
|
|
fun log_shouldRotateIfLogBufferIsFull() {
|
|
buffer.log("Test", LogLevel.INFO, "This should be rotated")
|
|
buffer.log("Test", LogLevel.INFO, "New test message")
|
|
|
|
val dumpedString = dumpBuffer()
|
|
|
|
assertThat(dumpedString).contains("New test message")
|
|
}
|
|
|
|
@Test
|
|
fun dump_writesExceptionAndStacktrace() {
|
|
buffer = createBuffer()
|
|
val exception = createTestException("Exception message", "TestClass")
|
|
buffer.log("Tag", LogLevel.ERROR, { str1 = "Extra message" }, { str1!! }, exception)
|
|
|
|
val dumpedString = dumpBuffer()
|
|
|
|
assertThat(dumpedString).contains("Extra message")
|
|
assertThat(dumpedString).contains("java.lang.RuntimeException: Exception message")
|
|
assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:1)")
|
|
assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:2)")
|
|
}
|
|
|
|
@Test
|
|
fun dump_writesCauseAndStacktrace() {
|
|
buffer = createBuffer()
|
|
val exception =
|
|
createTestException(
|
|
"Exception message",
|
|
"TestClass",
|
|
cause = createTestException("The real cause!", "TestClass")
|
|
)
|
|
buffer.log("Tag", LogLevel.ERROR, { str1 = "Extra message" }, { str1!! }, exception)
|
|
|
|
val dumpedString = dumpBuffer()
|
|
|
|
assertThat(dumpedString).contains("Caused by: java.lang.RuntimeException: The real cause!")
|
|
assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:1)")
|
|
assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:2)")
|
|
}
|
|
|
|
@Test
|
|
fun dump_writesSuppressedExceptionAndStacktrace() {
|
|
buffer = createBuffer()
|
|
val exception = RuntimeException("Root exception message")
|
|
exception.addSuppressed(
|
|
createTestException(
|
|
"First suppressed exception",
|
|
"FirstClass",
|
|
createTestException("Cause of suppressed exp", "ThirdClass")
|
|
)
|
|
)
|
|
exception.addSuppressed(createTestException("Second suppressed exception", "SecondClass"))
|
|
buffer.log("Tag", LogLevel.ERROR, { str1 = "Extra message" }, { str1!! }, exception)
|
|
|
|
val dumpedStr = dumpBuffer()
|
|
|
|
// first suppressed exception
|
|
assertThat(dumpedStr)
|
|
.contains("Suppressed: " + "java.lang.RuntimeException: First suppressed exception")
|
|
assertThat(dumpedStr).contains("at FirstClass.TestMethod(FirstClass.java:1)")
|
|
assertThat(dumpedStr).contains("at FirstClass.TestMethod(FirstClass.java:2)")
|
|
|
|
assertThat(dumpedStr)
|
|
.contains("Caused by: java.lang.RuntimeException: Cause of suppressed exp")
|
|
assertThat(dumpedStr).contains("at ThirdClass.TestMethod(ThirdClass.java:1)")
|
|
assertThat(dumpedStr).contains("at ThirdClass.TestMethod(ThirdClass.java:2)")
|
|
|
|
// second suppressed exception
|
|
assertThat(dumpedStr)
|
|
.contains("Suppressed: " + "java.lang.RuntimeException: Second suppressed exception")
|
|
assertThat(dumpedStr).contains("at SecondClass.TestMethod(SecondClass.java:1)")
|
|
assertThat(dumpedStr).contains("at SecondClass.TestMethod(SecondClass.java:2)")
|
|
}
|
|
|
|
private fun createTestException(
|
|
message: String,
|
|
errorClass: String,
|
|
cause: Throwable? = null,
|
|
): Exception {
|
|
val exception = RuntimeException(message, cause)
|
|
exception.stackTrace =
|
|
(1..5)
|
|
.map { lineNumber ->
|
|
StackTraceElement(errorClass, "TestMethod", "$errorClass.java", lineNumber)
|
|
}
|
|
.toTypedArray()
|
|
return exception
|
|
}
|
|
|
|
private fun dumpBuffer(): String {
|
|
buffer.dump(PrintWriter(outputWriter), tailLength = 100)
|
|
return outputWriter.toString()
|
|
}
|
|
}
|