Snap for 8426163 from b735f448e61c99f4c06101902ff76eee4e5496f1 to mainline-tzdata2-release
Change-Id: Ib80eff4f563fdc57945c9b79bc3701a5e29375d8
diff --git a/Android.bp b/Android.bp
index 6c0735f..5aa9b14 100644
--- a/Android.bp
+++ b/Android.bp
@@ -12,23 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- default_applicable_licenses: ["tools_trebuchet_license"],
-}
-
-// Added automatically by a large-scale-change
-// http://go/android-license-faq
-license {
- name: "tools_trebuchet_license",
- visibility: [":__subpackages__"],
- license_kinds: [
- "SPDX-license-identifier-Apache-2.0",
- ],
- license_text: [
- "LICENSE",
- ],
-}
-
java_defaults {
name: "trebuchet-defaults",
javacflags: [
diff --git a/TEST_MAPPING b/TEST_MAPPING
new file mode 100644
index 0000000..5be5baf
--- /dev/null
+++ b/TEST_MAPPING
@@ -0,0 +1,17 @@
+{
+ "presubmit": [
+ {
+ "name": "trebuchet-core-tests",
+ "host": true,
+ "options": [
+ {
+ "exclude-annotation": "trebuchet.testutils.NeedsSampleData"
+ }
+ ]
+ },
+ {
+ "name": "trebuchet-startup-common-tests",
+ "host": true
+ }
+ ]
+}
diff --git a/core/common/src/test/kotlin/trebuchet/extractors/ZlibExtractorTest.kt b/core/common/src/test/kotlin/trebuchet/extractors/ZlibExtractorTest.kt
new file mode 100644
index 0000000..5f1e493
--- /dev/null
+++ b/core/common/src/test/kotlin/trebuchet/extractors/ZlibExtractorTest.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * 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
+ *
+ * https://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 trebuchet.extractors
+
+import org.junit.Test
+import trebuchet.extras.InputStreamAdapter
+import trebuchet.extras.findSampleData
+import trebuchet.importers.FatalImportFeedback
+import trebuchet.io.BufferProducer
+import trebuchet.io.StreamingReader
+import trebuchet.testutils.NeedsSampleData
+import java.io.File
+import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
+import kotlin.test.assertNull
+import kotlin.test.assertTrue
+
+class ZlibExtractorTest {
+ @Test @NeedsSampleData
+ fun testFactorySuccess() {
+ val reader = StreamingReader(openSample())
+ reader.loadIndex(reader.keepLoadedSize.toLong())
+ assertNotNull(ZlibExtractor.Factory.extractorFor(reader, FatalImportFeedback))
+ }
+
+ @Test @NeedsSampleData
+ fun testFactoryNotDeflated() {
+ val reader = StreamingReader(openSample("sample.ftrace"))
+ reader.loadIndex(reader.keepLoadedSize.toLong())
+ assertNull(ZlibExtractor.Factory.extractorFor(reader, FatalImportFeedback))
+ }
+
+ @Test @NeedsSampleData
+ fun testFactoryNoHeader() {
+ val reader = StreamingReader(openSample("caltrace1.html"))
+ reader.loadIndex(reader.keepLoadedSize.toLong())
+ assertNull(ZlibExtractor.Factory.extractorFor(reader, FatalImportFeedback))
+ }
+
+ @Test @NeedsSampleData
+ fun testExtractInitial() {
+ val expected = "# tracer: nop\n#\n# ent"
+ val extractor = ZlibExtractor(FatalImportFeedback)
+ extractor.extract(StreamingReader(openSample())) {
+ val first = it.next()
+ assertNotNull(first)
+ assertTrue(first.length > expected.length)
+ assertEquals(expected, first.slice(0, expected.length).toString())
+ it.close()
+ }
+ }
+
+ private fun openSample(name: String = "missed_traces.trace"): BufferProducer {
+ val file = File(findSampleData(), name)
+ assertTrue(file.exists(), "Unable to find '$name'")
+ return InputStreamAdapter(file)
+ }
+}
\ No newline at end of file
diff --git a/core/common/src/test/kotlin/trebuchet/io/StringStreamTest.kt b/core/common/src/test/kotlin/trebuchet/io/StringStreamTest.kt
index 7b71fd8..ee149c9 100644
--- a/core/common/src/test/kotlin/trebuchet/io/StringStreamTest.kt
+++ b/core/common/src/test/kotlin/trebuchet/io/StringStreamTest.kt
@@ -24,6 +24,7 @@
import trebuchet.model.Model
import trebuchet.task.ImportTask
import trebuchet.testutils.makeReader
+import trebuchet.testutils.NeedsSampleData
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
@@ -38,6 +39,17 @@
expect1_20_300("1\r\n20\r\n300")
}
+ @Test @NeedsSampleData
+ fun testLineReaderOnFile() {
+ val file = File("${findSampleData()}/sample.ftrace")
+ Assert.assertTrue(file.exists())
+ val expected = BufferedReader(FileReader(file))
+ StreamingReader(readFile(file)).iterLines().forEach {
+ assertEquals(expected.readLine(), it.toString())
+ }
+ assertNull(expected.readLine())
+ }
+
@Test fun testLineReaderEmptyLines() {
expect1_20_300("\n\n1\r\n\r\n20\n\n\n\n300\n\n\n")
@@ -53,4 +65,16 @@
assertEquals("20", lines[1])
assertEquals("300", lines[2])
}
+
+ fun readFile(file: File): BufferProducer {
+ val inputStream = file.inputStream()
+ return object : BufferProducer {
+ override fun next(): DataSlice? {
+ val buffer = ByteArray(2 * 1024 * 1024)
+ val read = inputStream.read(buffer)
+ if (read == -1) return null
+ return buffer.asSlice(read)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/core/common/src/test/kotlin/trebuchet/task/ImportTaskTest.kt b/core/common/src/test/kotlin/trebuchet/task/ImportTaskTest.kt
new file mode 100644
index 0000000..f51f3ca
--- /dev/null
+++ b/core/common/src/test/kotlin/trebuchet/task/ImportTaskTest.kt
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * 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
+ *
+ * https://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 trebuchet.task
+
+import org.junit.Assert.*
+import org.junit.Test
+import trebuchet.extras.findSampleData
+import trebuchet.importers.DummyImportFeedback
+import trebuchet.io.BufferProducer
+import trebuchet.io.DataSlice
+import trebuchet.io.asSlice
+import trebuchet.model.Model
+import trebuchet.model.fragments.AsyncSlice
+import trebuchet.queries.slices.*
+import trebuchet.testutils.NeedsSampleData
+import java.io.File
+
+class ImportTaskTest {
+ @Test @NeedsSampleData
+ fun testImportCameraTrace() {
+ val model = import("hdr-0608-4-trace.html")
+ val slices = model.selectAll { it.name.startsWith("MergeShot")}
+ assertEquals(2, slices.size)
+ assertEquals(0.868, slices[0].duration, .001)
+ assertEquals(0.866, slices[1].duration, .001)
+ }
+
+ @Test @NeedsSampleData
+ fun testImportCalTrace1() {
+ val model = import("caltrace1.html")
+ val counterName = "com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1"
+ val process = model.processes.values.find { it.name == "surfaceflinger" }!!
+ val thread = process.threads.find { it.name == "surfaceflinger" }!!
+ val slices = thread.selectAll { it.name == "handleMessageRefresh" }
+ assertEquals(103, slices.size)
+ assertFalse(slices.any { it.duration <= 0.0 })
+ val totalDuration = slices.map { it.duration }.reduce { a,b -> a+b }
+ assertEquals(.217984, totalDuration, .00001)
+ val counter = process.counters.find { it.name == counterName }
+ assertNotNull(counter)
+ counter!!
+ assertEquals(2, counter.events.filter { it.count == 2L }.size)
+ assertFalse(counter.events.any { it.count < 0 || it.count > 2})
+ }
+
+ @Test @NeedsSampleData
+ fun testImportSample() {
+ val model = import("sample.ftrace")
+ val process = model.processes[6381]!!
+ val thread = process.threads.find { it.name == "RenderThread" }!!
+ assertEquals(6506, thread.id)
+
+ val inputEvent4 = process.asyncSlices.find {
+ it.name == "deliverInputEvent" && it.cookie == 4
+ }
+ assertNotNull(inputEvent4)
+ inputEvent4!!
+ assertEquals(6381, inputEvent4.startThreadId)
+ assertEquals(6381, inputEvent4.endThreadId)
+ assertEquals(4493.665365, inputEvent4.startTime, 0.0)
+ assertEquals(4493.725982, inputEvent4.endTime, 0.0)
+ }
+
+ private fun import(filename: String): Model {
+ val task = ImportTask(DummyImportFeedback)
+ val file = File(findSampleData(), filename)
+ assertTrue(file.exists())
+ val model = task.import(readFile(file))
+ assertFalse(model.isEmpty())
+ return model
+ }
+
+ fun readFile(file: File): BufferProducer {
+ val inputStream = file.inputStream()
+ return object : BufferProducer {
+ override fun next(): DataSlice? {
+ val buffer = ByteArray(2 * 1024 * 1024)
+ val read = inputStream.read(buffer)
+ if (read == -1) return null
+ return buffer.asSlice(read)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/common/src/test/kotlin/trebuchet/testutils/Annotations.kt b/core/common/src/test/kotlin/trebuchet/testutils/Annotations.kt
new file mode 100644
index 0000000..b9aeb0d
--- /dev/null
+++ b/core/common/src/test/kotlin/trebuchet/testutils/Annotations.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * 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
+ *
+ * https://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 trebuchet.testutils
+
+/**
+ Indicates that a test needs access to sample data, which is not included in
+ the repository. This is used to skip these tests on presubmit checks.
+ */
+annotation class NeedsSampleData