diff options
-rw-r--r-- | Android.bp | 6 | ||||
-rw-r--r-- | Android.mk | 29 | ||||
-rw-r--r-- | javatests/.classpath (renamed from tests/.classpath) | 0 | ||||
-rw-r--r-- | javatests/.project (renamed from tests/.project) | 0 | ||||
-rw-r--r-- | javatests/Android.bp (renamed from tests/Android.bp) | 12 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/BatteryDischargeItemTest.java (renamed from tests/src/com/android/loganalysis/item/BatteryDischargeItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/BatteryUsageItemTest.java (renamed from tests/src/com/android/loganalysis/item/BatteryUsageItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java (renamed from tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/DvmLockSampleItemTest.java (renamed from tests/src/com/android/loganalysis/item/DvmLockSampleItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/GenericItemTest.java (renamed from tests/src/com/android/loganalysis/item/GenericItemTest.java) | 48 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/InterruptItemTest.java (renamed from tests/src/com/android/loganalysis/item/InterruptItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/LocationDumpsItemTest.java (renamed from tests/src/com/android/loganalysis/item/LocationDumpsItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/MemInfoItemTest.java (renamed from tests/src/com/android/loganalysis/item/MemInfoItemTest.java) | 4 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/MonkeyLogItemTest.java (renamed from tests/src/com/android/loganalysis/item/MonkeyLogItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/ProcrankItemTest.java (renamed from tests/src/com/android/loganalysis/item/ProcrankItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/SmartMonkeyLogItemTest.java (renamed from tests/src/com/android/loganalysis/item/SmartMonkeyLogItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/SystemPropsItemTest.java (renamed from tests/src/com/android/loganalysis/item/SystemPropsItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/TopItemTest.java (renamed from tests/src/com/android/loganalysis/item/TopItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/item/WakelockItemTest.java (renamed from tests/src/com/android/loganalysis/item/WakelockItemTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/AbstractSectionParserTest.java (renamed from tests/src/com/android/loganalysis/parser/AbstractSectionParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/ActivityServiceParserTest.java (renamed from tests/src/com/android/loganalysis/parser/ActivityServiceParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/AnrParserTest.java (renamed from tests/src/com/android/loganalysis/parser/AnrParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/BatteryDischargeStatsInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/BatteryDischargeStatsInfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/BatteryStatsDetailedInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/BatteryStatsSummaryInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/BatteryStatsSummaryInfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/BatteryUsageParserTest.java (renamed from tests/src/com/android/loganalysis/parser/BatteryUsageParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/BugreportParserTest.java (renamed from tests/src/com/android/loganalysis/parser/BugreportParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/CompactMemInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/CpuInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/CpuInfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DmesgParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DmesgParserTest.java) | 76 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DumpsysBatteryStatsParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DumpsysBatteryStatsParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DumpsysParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DumpsysParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DumpsysProcStatsParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DumpsysProcStatsParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DumpsysProcessMeminfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DumpsysProcessMeminfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/DvmLockSampleParserTest.java (renamed from tests/src/com/android/loganalysis/parser/DvmLockSampleParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/EventsLogParserTest.java (renamed from tests/src/com/android/loganalysis/parser/EventsLogParserTest.java) | 164 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/GfxInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/GfxInfoParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/InterruptParserTest.java (renamed from tests/src/com/android/loganalysis/parser/InterruptParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/JavaCrashParserTest.java (renamed from tests/src/com/android/loganalysis/parser/JavaCrashParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/KernelLogParserTest.java (renamed from tests/src/com/android/loganalysis/parser/KernelLogParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/LocationServiceParserTest.java (renamed from tests/src/com/android/loganalysis/parser/LocationServiceParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/LogcatParserTest.java (renamed from tests/src/com/android/loganalysis/parser/LogcatParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/MemHealthParserTest.java (renamed from tests/src/com/android/loganalysis/parser/MemHealthParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/MemInfoParserTest.java (renamed from tests/src/com/android/loganalysis/parser/MemInfoParserTest.java) | 12 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/MonkeyLogParserTest.java (renamed from tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/NativeCrashParserTest.java (renamed from tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/ProcessUsageParserTest.java (renamed from tests/src/com/android/loganalysis/parser/ProcessUsageParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/ProcrankParserTest.java (renamed from tests/src/com/android/loganalysis/parser/ProcrankParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/QtaguidParserTest.java (renamed from tests/src/com/android/loganalysis/parser/QtaguidParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/SmartMonkeyLogParserTest.java (renamed from tests/src/com/android/loganalysis/parser/SmartMonkeyLogParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/SystemPropsParserTest.java (renamed from tests/src/com/android/loganalysis/parser/SystemPropsParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/TimingsLogParserTest.java (renamed from tests/src/com/android/loganalysis/parser/TimingsLogParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/TopParserTest.java (renamed from tests/src/com/android/loganalysis/parser/TopParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/TraceFormatParserTest.java (renamed from tests/src/com/android/loganalysis/parser/TraceFormatParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/TracesParserTest.java (renamed from tests/src/com/android/loganalysis/parser/TracesParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/parser/WakelockParserTest.java (renamed from tests/src/com/android/loganalysis/parser/WakelockParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/rule/InterruptRuleTest.java (renamed from tests/src/com/android/loganalysis/rule/InterruptRuleTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/rule/LocationUsageRuleTest.java (renamed from tests/src/com/android/loganalysis/rule/LocationUsageRuleTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/rule/ProcessUsageRuleTest.java (renamed from tests/src/com/android/loganalysis/rule/ProcessUsageRuleTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/rule/WakelockRuleTest.java (renamed from tests/src/com/android/loganalysis/rule/WakelockRuleTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/rule/WifiStatsRuleTest.java (renamed from tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/ArrayUtilTest.java (renamed from tests/src/com/android/loganalysis/util/ArrayUtilTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/LogPatternUtilTest.java (renamed from tests/src/com/android/loganalysis/util/LogPatternUtilTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/LogTailUtilTest.java (renamed from tests/src/com/android/loganalysis/util/LogTailUtilTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/RegexTrieTest.java (renamed from tests/src/com/android/loganalysis/util/RegexTrieTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/config/ArgsOptionParserTest.java (renamed from tests/src/com/android/loganalysis/util/config/ArgsOptionParserTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/config/OptionSetterTest.java (renamed from tests/src/com/android/loganalysis/util/config/OptionSetterTest.java) | 0 | ||||
-rw-r--r-- | javatests/com/android/loganalysis/util/config/OptionUpdateRuleTest.java (renamed from tests/src/com/android/loganalysis/util/config/OptionUpdateRuleTest.java) | 0 | ||||
-rw-r--r-- | src/com/android/loganalysis/item/BootEventItem.java | 54 | ||||
-rw-r--r-- | src/com/android/loganalysis/item/DmesgItem.java | 14 | ||||
-rw-r--r-- | src/com/android/loganalysis/item/DmesgModuleInfoItem.java | 122 | ||||
-rw-r--r-- | src/com/android/loganalysis/parser/DmesgParser.java | 74 | ||||
-rw-r--r-- | src/com/android/loganalysis/parser/EventsLogParser.java | 60 | ||||
-rw-r--r-- | src/com/android/loganalysis/parser/LogcatParser.java | 3 | ||||
-rw-r--r-- | tests/Android.mk | 25 | ||||
-rw-r--r-- | tests/src/com/android/loganalysis/FuncTests.java | 41 | ||||
-rw-r--r-- | tests/src/com/android/loganalysis/UnitTests.java | 174 | ||||
-rw-r--r-- | tests/src/com/android/loganalysis/parser/BugreportParserFuncTest.java | 97 | ||||
-rw-r--r-- | tests/src/com/android/loganalysis/parser/LogcatParserFuncTest.java | 71 | ||||
-rw-r--r-- | tests/src/com/android/loganalysis/parser/MonkeyLogParserFuncTest.java | 113 |
82 files changed, 551 insertions, 648 deletions
@@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -java_library_host { +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +tradefed_java_library_host { name: "loganalysis", defaults: [ "tradefed_defaults" ], diff --git a/Android.mk b/Android.mk deleted file mode 100644 index 8a99575..0000000 --- a/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2013 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. - -LOCAL_PATH := $(call my-dir) - -# makefile rules to copy jars to HOST_OUT/tradefed -# so tradefed.sh can automatically add to classpath - -DEST_JAR := $(HOST_OUT)/tradefed/loganalysis.jar -BUILT_JAR := $(call intermediates-dir-for,JAVA_LIBRARIES,loganalysis,HOST)/javalib.jar -$(DEST_JAR): $(BUILT_JAR) - $(copy-file-to-new-target) - -# this dependency ensure the above rule will be executed if module is built -$(HOST_OUT_JAVA_LIBRARIES)/loganalysis.jar : $(DEST_JAR) - -# Build all sub-directories -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/.classpath b/javatests/.classpath index 55aa5dd..55aa5dd 100644 --- a/tests/.classpath +++ b/javatests/.classpath diff --git a/tests/.project b/javatests/.project index f4a1c0b..f4a1c0b 100644 --- a/tests/.project +++ b/javatests/.project diff --git a/tests/Android.bp b/javatests/Android.bp index 0547b23..e89738a 100644 --- a/tests/Android.bp +++ b/javatests/Android.bp @@ -12,17 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -java_library_host { +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +java_test_host { name: "loganalysis-tests", defaults: ["tradefed_defaults"], // Only compile source java files in this lib. - srcs: ["src/**/*.java"], + srcs: ["com/**/*.java"], - libs: [ + static_libs: [ "loganalysis", "json-prebuilt", "junit", - "easymock", + "guava", ], } diff --git a/tests/src/com/android/loganalysis/item/BatteryDischargeItemTest.java b/javatests/com/android/loganalysis/item/BatteryDischargeItemTest.java index 5e27eb2..5e27eb2 100644 --- a/tests/src/com/android/loganalysis/item/BatteryDischargeItemTest.java +++ b/javatests/com/android/loganalysis/item/BatteryDischargeItemTest.java diff --git a/tests/src/com/android/loganalysis/item/BatteryUsageItemTest.java b/javatests/com/android/loganalysis/item/BatteryUsageItemTest.java index b44a432..b44a432 100644 --- a/tests/src/com/android/loganalysis/item/BatteryUsageItemTest.java +++ b/javatests/com/android/loganalysis/item/BatteryUsageItemTest.java diff --git a/tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java b/javatests/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java index dd60500..dd60500 100644 --- a/tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java +++ b/javatests/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java diff --git a/tests/src/com/android/loganalysis/item/DvmLockSampleItemTest.java b/javatests/com/android/loganalysis/item/DvmLockSampleItemTest.java index 5d6054e..5d6054e 100644 --- a/tests/src/com/android/loganalysis/item/DvmLockSampleItemTest.java +++ b/javatests/com/android/loganalysis/item/DvmLockSampleItemTest.java diff --git a/tests/src/com/android/loganalysis/item/GenericItemTest.java b/javatests/com/android/loganalysis/item/GenericItemTest.java index e9ea31f..c8bae41 100644 --- a/tests/src/com/android/loganalysis/item/GenericItemTest.java +++ b/javatests/com/android/loganalysis/item/GenericItemTest.java @@ -26,12 +26,10 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -/** - * Unit test for {@link GenericItem}. - */ +/** Unit test for {@link GenericItem}. */ public class GenericItemTest extends TestCase { - private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList( - "integer", "string")); + private static final Set<String> ATTRIBUTES = + new HashSet<String>(Arrays.asList("integer", "string")); private String mStringAttribute = "String"; private Integer mIntegerAttribute = 1; @@ -70,9 +68,7 @@ public class GenericItemTest extends TestCase { mInconsistentItem.setAttribute("integer", 2); } - /** - * Test for {@link GenericItem#mergeAttributes(IItem, Set)}. - */ + /** Test for {@link GenericItem#mergeAttributes(IItem, Set)}. */ public void testMergeAttributes() throws ConflictingItemException { Map<String, Object> attributes; @@ -120,9 +116,7 @@ public class GenericItemTest extends TestCase { } } - /** - * Test for {@link GenericItem#isConsistent(IItem)}. - */ + /** Test for {@link GenericItem#isConsistent(IItem)}. */ public void testIsConsistent() { assertTrue(mEmptyItem1.isConsistent(mEmptyItem1)); assertFalse(mEmptyItem1.isConsistent(null)); @@ -154,8 +148,8 @@ public class GenericItemTest extends TestCase { } /** - * Test for {@link GenericItem#setAttribute(String, Object)} and - * {@link GenericItem#getAttribute(String)}. + * Test for {@link GenericItem#setAttribute(String, Object)} and {@link + * GenericItem#getAttribute(String)}. */ public void testAttributes() { GenericItem item = new GenericItem(ATTRIBUTES); @@ -183,9 +177,7 @@ public class GenericItemTest extends TestCase { } } - /** - * Test for {@link GenericItem#areEqual(Object, Object)} - */ + /** Test for {@link GenericItem#areEqual(Object, Object)} */ public void testAreEqual() { assertTrue(GenericItem.areEqual(null, null)); assertTrue(GenericItem.areEqual("test", "test")); @@ -194,9 +186,7 @@ public class GenericItemTest extends TestCase { assertFalse(GenericItem.areEqual("test", "")); } - /** - * Test for {@link GenericItem#areConsistent(Object, Object)} - */ + /** Test for {@link GenericItem#areConsistent(Object, Object)} */ public void testAreConsistent() { assertTrue(GenericItem.areConsistent(null, null)); assertTrue(GenericItem.areConsistent("test", "test")); @@ -205,9 +195,7 @@ public class GenericItemTest extends TestCase { assertFalse(GenericItem.areConsistent("test", "")); } - /** - * Test for {@link GenericItem#mergeObjects(Object, Object)} - */ + /** Test for {@link GenericItem#mergeObjects(Object, Object)} */ public void testMergeObjects() throws ConflictingItemException { assertNull(GenericItem.mergeObjects(null, null)); assertEquals("test", GenericItem.mergeObjects("test", "test")); @@ -222,12 +210,14 @@ public class GenericItemTest extends TestCase { } } - /** - * Test that {@link GenericItem#toJson()} returns correctly. - */ + /** Test that {@link GenericItem#toJson()} returns correctly. */ public void testToJson() throws JSONException { - GenericItem item = new GenericItem(new HashSet<String>(Arrays.asList( - "string", "date", "object", "integer", "long", "float", "double", "item", "null"))); + GenericItem item = + new GenericItem( + new HashSet<String>( + Arrays.asList( + "string", "date", "object", "integer", "long", "float", + "double", "item", "null"))); Date date = new Date(); Object object = new Object(); NativeCrashItem subItem = new NativeCrashItem(); @@ -256,9 +246,9 @@ public class GenericItemTest extends TestCase { assertTrue(output.has("long")); assertEquals(1, output.get("long")); assertTrue(output.has("float")); - assertEquals(2.5, output.get("float")); + assertEquals("2.5", output.get("float").toString()); assertTrue(output.has("double")); - assertEquals(3.5, output.get("double")); + assertEquals("3.5", output.get("double").toString()); assertTrue(output.has("item")); assertTrue(output.get("item") instanceof JSONObject); assertFalse(output.has("null")); diff --git a/tests/src/com/android/loganalysis/item/InterruptItemTest.java b/javatests/com/android/loganalysis/item/InterruptItemTest.java index 9e9df61..9e9df61 100644 --- a/tests/src/com/android/loganalysis/item/InterruptItemTest.java +++ b/javatests/com/android/loganalysis/item/InterruptItemTest.java diff --git a/tests/src/com/android/loganalysis/item/LocationDumpsItemTest.java b/javatests/com/android/loganalysis/item/LocationDumpsItemTest.java index a96bc0d..a96bc0d 100644 --- a/tests/src/com/android/loganalysis/item/LocationDumpsItemTest.java +++ b/javatests/com/android/loganalysis/item/LocationDumpsItemTest.java diff --git a/tests/src/com/android/loganalysis/item/MemInfoItemTest.java b/javatests/com/android/loganalysis/item/MemInfoItemTest.java index 7f25fe3..3a8f307 100644 --- a/tests/src/com/android/loganalysis/item/MemInfoItemTest.java +++ b/javatests/com/android/loganalysis/item/MemInfoItemTest.java @@ -30,8 +30,8 @@ public class MemInfoItemTest extends TestCase { */ public void testToJson() throws JSONException { MemInfoItem item = new MemInfoItem(); - item.put("foo", 123l); - item.put("bar", 456l); + item.put("foo", 123L); + item.put("bar", 456L); item.setText("foo: 123 kB\nbar: 456 kB"); // Convert to JSON string and back again diff --git a/tests/src/com/android/loganalysis/item/MonkeyLogItemTest.java b/javatests/com/android/loganalysis/item/MonkeyLogItemTest.java index cc2867c..cc2867c 100644 --- a/tests/src/com/android/loganalysis/item/MonkeyLogItemTest.java +++ b/javatests/com/android/loganalysis/item/MonkeyLogItemTest.java diff --git a/tests/src/com/android/loganalysis/item/ProcrankItemTest.java b/javatests/com/android/loganalysis/item/ProcrankItemTest.java index 7f5d309..7f5d309 100644 --- a/tests/src/com/android/loganalysis/item/ProcrankItemTest.java +++ b/javatests/com/android/loganalysis/item/ProcrankItemTest.java diff --git a/tests/src/com/android/loganalysis/item/SmartMonkeyLogItemTest.java b/javatests/com/android/loganalysis/item/SmartMonkeyLogItemTest.java index 4dd5597..4dd5597 100644 --- a/tests/src/com/android/loganalysis/item/SmartMonkeyLogItemTest.java +++ b/javatests/com/android/loganalysis/item/SmartMonkeyLogItemTest.java diff --git a/tests/src/com/android/loganalysis/item/SystemPropsItemTest.java b/javatests/com/android/loganalysis/item/SystemPropsItemTest.java index b9b6675..b9b6675 100644 --- a/tests/src/com/android/loganalysis/item/SystemPropsItemTest.java +++ b/javatests/com/android/loganalysis/item/SystemPropsItemTest.java diff --git a/tests/src/com/android/loganalysis/item/TopItemTest.java b/javatests/com/android/loganalysis/item/TopItemTest.java index 2df01d0..2df01d0 100644 --- a/tests/src/com/android/loganalysis/item/TopItemTest.java +++ b/javatests/com/android/loganalysis/item/TopItemTest.java diff --git a/tests/src/com/android/loganalysis/item/WakelockItemTest.java b/javatests/com/android/loganalysis/item/WakelockItemTest.java index f570a7b..f570a7b 100644 --- a/tests/src/com/android/loganalysis/item/WakelockItemTest.java +++ b/javatests/com/android/loganalysis/item/WakelockItemTest.java diff --git a/tests/src/com/android/loganalysis/parser/AbstractSectionParserTest.java b/javatests/com/android/loganalysis/parser/AbstractSectionParserTest.java index 1092d0e..1092d0e 100644 --- a/tests/src/com/android/loganalysis/parser/AbstractSectionParserTest.java +++ b/javatests/com/android/loganalysis/parser/AbstractSectionParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/ActivityServiceParserTest.java b/javatests/com/android/loganalysis/parser/ActivityServiceParserTest.java index 57aff9a..57aff9a 100644 --- a/tests/src/com/android/loganalysis/parser/ActivityServiceParserTest.java +++ b/javatests/com/android/loganalysis/parser/ActivityServiceParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/AnrParserTest.java b/javatests/com/android/loganalysis/parser/AnrParserTest.java index e6afe80..e6afe80 100644 --- a/tests/src/com/android/loganalysis/parser/AnrParserTest.java +++ b/javatests/com/android/loganalysis/parser/AnrParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/BatteryDischargeStatsInfoParserTest.java b/javatests/com/android/loganalysis/parser/BatteryDischargeStatsInfoParserTest.java index 691810c..691810c 100644 --- a/tests/src/com/android/loganalysis/parser/BatteryDischargeStatsInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/BatteryDischargeStatsInfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParserTest.java b/javatests/com/android/loganalysis/parser/BatteryStatsDetailedInfoParserTest.java index b176fa2..b176fa2 100644 --- a/tests/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/BatteryStatsDetailedInfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/BatteryStatsSummaryInfoParserTest.java b/javatests/com/android/loganalysis/parser/BatteryStatsSummaryInfoParserTest.java index c6ba381..c6ba381 100644 --- a/tests/src/com/android/loganalysis/parser/BatteryStatsSummaryInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/BatteryStatsSummaryInfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/BatteryUsageParserTest.java b/javatests/com/android/loganalysis/parser/BatteryUsageParserTest.java index 20a9a2e..20a9a2e 100644 --- a/tests/src/com/android/loganalysis/parser/BatteryUsageParserTest.java +++ b/javatests/com/android/loganalysis/parser/BatteryUsageParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/BugreportParserTest.java b/javatests/com/android/loganalysis/parser/BugreportParserTest.java index 5f3fc10..5f3fc10 100644 --- a/tests/src/com/android/loganalysis/parser/BugreportParserTest.java +++ b/javatests/com/android/loganalysis/parser/BugreportParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java b/javatests/com/android/loganalysis/parser/CompactMemInfoParserTest.java index ed4b39b..ed4b39b 100644 --- a/tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/CompactMemInfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/CpuInfoParserTest.java b/javatests/com/android/loganalysis/parser/CpuInfoParserTest.java index 196f6a2..196f6a2 100644 --- a/tests/src/com/android/loganalysis/parser/CpuInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/CpuInfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DmesgParserTest.java b/javatests/com/android/loganalysis/parser/DmesgParserTest.java index 4362c7a..e4ea7af 100644 --- a/tests/src/com/android/loganalysis/parser/DmesgParserTest.java +++ b/javatests/com/android/loganalysis/parser/DmesgParserTest.java @@ -20,6 +20,7 @@ import com.android.loganalysis.item.DmesgActionInfoItem; import com.android.loganalysis.item.DmesgItem; import com.android.loganalysis.item.DmesgServiceInfoItem; import com.android.loganalysis.item.DmesgStageInfoItem; +import com.android.loganalysis.item.DmesgModuleInfoItem; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -38,8 +39,15 @@ public class DmesgParserTest extends TestCase { private static final String BOOT_ANIMATION = "bootanim"; private static final String NETD = "netd"; + private static final String FOO = "foo"; + private static final String BAR = "bar"; + private static final String TOTAL_MODULE = "TOTAL_MODULE"; private static final String[] LINES = new String[] { + "[ 0.370107] init: Loading module /lib/modules/foo.ko with args ''", + "[ 0.372497] init: Loaded kernel module /lib/modules/foo.ko", + "[ 0.372500] init: Loading module /lib/modules/bar.ko with args ''", + "[ 1.115467] init: Loaded 198 kernel modules took 748 ms", "[ 2.471163] init: Wait for property 'apexd.status=ready' took 403ms", "[ 3.786943] ueventd: Coldboot took 0.701291 seconds", "[ 22.962730] init: starting service 'bootanim'...", @@ -50,12 +58,17 @@ public class DmesgParserTest extends TestCase { "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0", "[ 41.665818] init: init first stage started!", "[ 44.942872] init: processing action (early-init) from (/init.rc:13)", - "[ 47.233446] init: processing action (set_mmap_rnd_bits) from (<Builtin Action>:0)", - "[ 47.240083] init: processing action (set_kptr_restrict) from (<Builtin Action>:0)", + "[ 47.233446] init: processing action (set_mmap_rnd_bits) from (<Builtin " + + "Action>:0)", + "[ 47.240083] init: processing action (set_kptr_restrict) from (<Builtin" + + " Action>:0)", "[ 47.245778] init: processing action (keychord_init) from (<Builtin Action>:0)", - "[ 52.361049] init: processing action (persist.sys.usb.config=* boot) from (<Builtin Action>:0)", - "[ 52.361108] init: processing action (enable_property_trigger) from (<Builtin Action>:0)", - "[ 52.361313] init: processing action (security.perf_harden=1) from (/init.rc:677)", + "[ 52.361049] init: processing action (persist.sys.usb.config=* boot) from" + + " (<Builtin Action>:0)", + "[ 52.361108] init: processing action (enable_property_trigger) from (<Builtin" + + " Action>:0)", + "[ 52.361313] init: processing action (security.perf_harden=1) from" + + " (/init.rc:677)", "[ 52.361495] init: processing action (ro.debuggable=1) from (/init.rc:700)", "[ 58.298293] init: processing action (sys.boot_completed=1)", "[ 59.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA", @@ -73,6 +86,9 @@ public class DmesgParserTest extends TestCase { private static final List<DmesgActionInfoItem> EXPECTED_ACTION_INFO_ITEMS = getExpectedActionInfoItems(); + private static final Map<String, DmesgModuleInfoItem> EXPECTED_MODULE_INFO_ITEMS = + getExpectedModuleInfoItems(); + /** * Test for empty dmesg logs passed to the DmesgParser */ @@ -101,10 +117,15 @@ public class DmesgParserTest extends TestCase { dmesgParser.getStageInfoItems().size()); assertEquals("Action info items list size should be 9",9, dmesgParser.getActionInfoItems().size()); + assertEquals( + "Module info items list size should be 3", + 3, + dmesgParser.getModuleInfoItems().size()); assertEquals(EXPECTED_SERVICE_INFO_ITEMS, actualDmesgItem.getServiceInfoItems()); assertEquals(EXPECTED_STAGE_INFO_ITEMS, actualDmesgItem.getStageInfoItems()); assertEquals(EXPECTED_ACTION_INFO_ITEMS, actualDmesgItem.getActionInfoItems()); + assertEquals(EXPECTED_MODULE_INFO_ITEMS, actualDmesgItem.getModuleInfoItems()); } /** @@ -121,6 +142,10 @@ public class DmesgParserTest extends TestCase { dmesgParser.getStageInfoItems().size()); assertEquals("Action info items list size should be 9",9, dmesgParser.getActionInfoItems().size()); + assertEquals( + "Module info items list size should be 3", + 3, + dmesgParser.getModuleInfoItems().size()); } } @@ -213,13 +238,30 @@ public class DmesgParserTest extends TestCase { assertEquals(EXPECTED_ACTION_INFO_ITEMS, actualActionInfoItems); } + /** Test incomplete module loaded pattern */ + public void testIncompleteModuleInfo() { + DmesgParser dmesgParser = new DmesgParser(); + for (String line : LINES) { + dmesgParser.parseModuleInfo(line); + } + List<DmesgModuleInfoItem> actualModuleInfoItems = + new ArrayList<>(dmesgParser.getModuleInfoItems().values()); + assertEquals(EXPECTED_MODULE_INFO_ITEMS, dmesgParser.getModuleInfoItems()); + assertEquals(3, actualModuleInfoItems.size()); + assertEquals( + "Duration should be -1L", + Long.valueOf(-1L), + actualModuleInfoItems.get(0).getModuleDuration()); + } + private static List<DmesgActionInfoItem> getExpectedActionInfoItems() { return Arrays.asList( new DmesgActionInfoItem("/init.rc:13", "early-init", 44942L), new DmesgActionInfoItem("<Builtin Action>:0", "set_mmap_rnd_bits", 47233L), new DmesgActionInfoItem("<Builtin Action>:0", "set_kptr_restrict", 47240L), new DmesgActionInfoItem("<Builtin Action>:0", "keychord_init", 47245L), - new DmesgActionInfoItem("<Builtin Action>:0", "persist.sys.usb.config=* boot", 52361L), + new DmesgActionInfoItem( + "<Builtin Action>:0", "persist.sys.usb.config=* boot", 52361L), new DmesgActionInfoItem("<Builtin Action>:0", "enable_property_trigger", 52361L), new DmesgActionInfoItem("/init.rc:677", "security.perf_harden=1", 52361L), new DmesgActionInfoItem("/init.rc:700", "ro.debuggable=1", 52361L), @@ -250,4 +292,26 @@ public class DmesgParserTest extends TestCase { return serviceInfoItemsMap; } + private static Map<String, DmesgModuleInfoItem> getExpectedModuleInfoItems() { + Map<String, DmesgModuleInfoItem> moduleInfoItemsMap = new HashMap<>(); + DmesgModuleInfoItem fooModuleInfo = new DmesgModuleInfoItem(); + fooModuleInfo.setModuleName(FOO); + fooModuleInfo.setStartTime(370L); + fooModuleInfo.setEndTime(372L); + + DmesgModuleInfoItem barModuleInfo = new DmesgModuleInfoItem(); + barModuleInfo.setModuleName(BAR); + barModuleInfo.setStartTime(372L); + + DmesgModuleInfoItem totalInfoItem = new DmesgModuleInfoItem(); + totalInfoItem.setModuleName(TOTAL_MODULE); + totalInfoItem.setModuleCount("198"); + totalInfoItem.setModuleDuration(748L); + + moduleInfoItemsMap.put(FOO, fooModuleInfo); + moduleInfoItemsMap.put(BAR, barModuleInfo); + moduleInfoItemsMap.put(TOTAL_MODULE, totalInfoItem); + + return moduleInfoItemsMap; + } } diff --git a/tests/src/com/android/loganalysis/parser/DumpsysBatteryStatsParserTest.java b/javatests/com/android/loganalysis/parser/DumpsysBatteryStatsParserTest.java index e96491a..e96491a 100644 --- a/tests/src/com/android/loganalysis/parser/DumpsysBatteryStatsParserTest.java +++ b/javatests/com/android/loganalysis/parser/DumpsysBatteryStatsParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java b/javatests/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java index ee15b78..ee15b78 100644 --- a/tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java +++ b/javatests/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DumpsysParserTest.java b/javatests/com/android/loganalysis/parser/DumpsysParserTest.java index 020c724..020c724 100644 --- a/tests/src/com/android/loganalysis/parser/DumpsysParserTest.java +++ b/javatests/com/android/loganalysis/parser/DumpsysParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DumpsysProcStatsParserTest.java b/javatests/com/android/loganalysis/parser/DumpsysProcStatsParserTest.java index 27bb7a4..27bb7a4 100644 --- a/tests/src/com/android/loganalysis/parser/DumpsysProcStatsParserTest.java +++ b/javatests/com/android/loganalysis/parser/DumpsysProcStatsParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DumpsysProcessMeminfoParserTest.java b/javatests/com/android/loganalysis/parser/DumpsysProcessMeminfoParserTest.java index b7042d3..b7042d3 100644 --- a/tests/src/com/android/loganalysis/parser/DumpsysProcessMeminfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/DumpsysProcessMeminfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java b/javatests/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java index f52e432..f52e432 100644 --- a/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java +++ b/javatests/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/DvmLockSampleParserTest.java b/javatests/com/android/loganalysis/parser/DvmLockSampleParserTest.java index cb85999..cb85999 100644 --- a/tests/src/com/android/loganalysis/parser/DvmLockSampleParserTest.java +++ b/javatests/com/android/loganalysis/parser/DvmLockSampleParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/EventsLogParserTest.java b/javatests/com/android/loganalysis/parser/EventsLogParserTest.java index 6956d16..2108d5d 100644 --- a/tests/src/com/android/loganalysis/parser/EventsLogParserTest.java +++ b/javatests/com/android/loganalysis/parser/EventsLogParserTest.java @@ -16,6 +16,7 @@ package com.android.loganalysis.parser; +import com.android.loganalysis.item.BootEventItem; import com.android.loganalysis.item.LatencyItem; import com.android.loganalysis.item.TransitionDelayItem; @@ -57,11 +58,13 @@ public class EventsLogParserTest extends TestCase { * Test for no transition delay info in the events log */ public void testNoTransitionDelayInfo() throws IOException { - List<String> lines = Arrays - .asList( - "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied setFocusedActivity]", + List<String> lines = + Arrays.asList( + "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied" + + " setFocusedActivity]", "08-25 12:56:15.850 1152 8968 I wm_task_moved: [6,1,1]", - "08-25 12:56:15.852 1152 8968 I am_focused_activity: [0,com.google.android.apps.nexuslauncher/.NexusLauncherActivity,appDied]", + "08-25 12:56:15.852 1152 8968 I am_focused_activity:" + + " [0,com.google.android.apps.nexuslauncher/.NexusLauncherActivity,appDied]", "08-25 12:56:15.852 1152 8968 I wm_task_removed: [27,removeTask]", "08-25 12:56:15.852 1152 8968 I wm_stack_removed: 1"); List<TransitionDelayItem> transitionItems = @@ -74,9 +77,12 @@ public class EventsLogParserTest extends TestCase { * Test for Cold launch transition delay and starting window delay info */ public void testValidColdTransitionDelay() throws IOException { - List<String> lines = Arrays - .asList("09-18 23:56:19.376 1140 1221 I sysui_multi_action: [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0,945,41]", - "09-18 23:56:19.376 1140 1221 I sysui_multi_action: [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0,945,41]"); + List<String> lines = + Arrays.asList( + "09-18 23:56:19.376 1140 1221 I sysui_multi_action:" + + " [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0,945,41]", + "09-18 23:56:19.376 1140 1221 I sysui_multi_action:" + + " [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0,945,41]"); List<TransitionDelayItem> transitionItems = new EventsLogParser().parseTransitionDelayInfo(readInputBuffer(getTempFile(lines))); assertEquals("Startinng Window Delay items list should have two item", 2, @@ -96,11 +102,16 @@ public class EventsLogParserTest extends TestCase { * Test for Hot launch transition delay and starting window delay info */ public void testValidHotTransitionDelay() throws IOException { - List<String> lines = Arrays - .asList("09-18 23:56:19.376 1140 1221 I sysui_multi_action: [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0]", - "09-18 23:56:19.376 1140 1221 I sysui_multi_action: [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0]", - "09-19 02:26:30.182 1143 1196 I sysui_multi_action: [319,87,322,75,325,212,757,761,758,9,759,2,806,com.google.android.apps.nexuslauncher,871,com.google.android.apps.nexuslauncher.NexusLauncherActivity,904,com.google.android.apps.nexuslauncher,905,0]", - "09-19 02:26:30.182 1143 1196 I sysui_multi_action: [319,87,322,75,325,212,757,761,758,9,759,2,806,com.google.android.apps.nexuslauncher,871,com.google.android.apps.nexuslauncher.NexusLauncherActivity,905,0]"); + List<String> lines = + Arrays.asList( + "09-18 23:56:19.376 1140 1221 I sysui_multi_action:" + + " [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0]", + "09-18 23:56:19.376 1140 1221 I sysui_multi_action:" + + " [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0]", + "09-19 02:26:30.182 1143 1196 I sysui_multi_action:" + + " [319,87,322,75,325,212,757,761,758,9,759,2,806,com.google.android.apps.nexuslauncher,871,com.google.android.apps.nexuslauncher.NexusLauncherActivity,904,com.google.android.apps.nexuslauncher,905,0]", + "09-19 02:26:30.182 1143 1196 I sysui_multi_action:" + + " [319,87,322,75,325,212,757,761,758,9,759,2,806,com.google.android.apps.nexuslauncher,871,com.google.android.apps.nexuslauncher.NexusLauncherActivity,905,0]"); List<TransitionDelayItem> transitionItems = new EventsLogParser().parseTransitionDelayInfo(readInputBuffer(getTempFile(lines))); assertEquals("Transition Delay items list should have four item", 4, @@ -118,9 +129,12 @@ public class EventsLogParserTest extends TestCase { * Test for same app transition delay items order after parsing from the events log */ public void testTransitionDelayOrder() throws IOException { - List<String> lines = Arrays - .asList("09-18 23:56:19.376 1140 1221 I sysui_multi_action: [319,51,321,59,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0,945,41]", - "09-18 23:59:18.380 1140 1221 I sysui_multi_action: [319,55,321,65,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0,945,41]"); + List<String> lines = + Arrays.asList( + "09-18 23:56:19.376 1140 1221 I sysui_multi_action:" + + " [319,51,321,59,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0,945,41]", + "09-18 23:59:18.380 1140 1221 I sysui_multi_action:" + + " [319,55,321,65,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0,945,41]"); List<TransitionDelayItem> transitionItems = new EventsLogParser().parseTransitionDelayInfo(readInputBuffer(getTempFile(lines))); assertEquals("Transition Delay items list should have two items", 2, @@ -135,9 +149,12 @@ public class EventsLogParserTest extends TestCase { * Test for two different different apps transition delay items */ public void testDifferentAppTransitionDelay() throws IOException { - List<String> lines = Arrays - .asList("09-18 23:56:19.376 1140 1221 I sysui_multi_action: [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0]", - "09-19 02:26:30.182 1143 1196 I sysui_multi_action: [319,87,322,75,325,212,757,761,758,9,759,2,806,com.google.android.apps.nexuslauncher,871,com.google.android.apps.nexuslauncher.NexusLauncherActivity,904,com.google.android.apps.nexuslauncher,905,0]"); + List<String> lines = + Arrays.asList( + "09-18 23:56:19.376 1140 1221 I sysui_multi_action:" + + " [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871,com.android.calculator2.Calculator,904,com.google.android.apps.nexuslauncher,905,0]", + "09-19 02:26:30.182 1143 1196 I sysui_multi_action:" + + " [319,87,322,75,325,212,757,761,758,9,759,2,806,com.google.android.apps.nexuslauncher,871,com.google.android.apps.nexuslauncher.NexusLauncherActivity,904,com.google.android.apps.nexuslauncher,905,0]"); List<TransitionDelayItem> transitionItems = new EventsLogParser().parseTransitionDelayInfo(readInputBuffer(getTempFile(lines))); assertEquals("Transition Delay items list should have two items", 2, @@ -155,13 +172,20 @@ public class EventsLogParserTest extends TestCase { * Test for invalid transition delay items pattern having different code. */ public void testInvalidTransitionPattern() throws IOException { - List<String> lines = Arrays - .asList("01-02 08:11:58.691 934 986 I sysui_multi_action: a[319,48,322,82,325,84088,757,761,758,9,759,4,807,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0]", - "01-02 08:12:03.639 934 970 I sysui_multi_action: [757,803,799,window_time_0,802,5]", - "01-02 08:12:10.849 934 986 I sysui_multi_action: 319,42,321,59,322,208,325,84100,757,761,758,9,759,4,806,com.google.android.apps.maps,871,com.google.android.maps.MapsActivity,905,0]", - "01-02 08:12:16.895 1446 1446 I sysui_multi_action: [757,803,799,overview_trigger_nav_btn,802,1]", - "01-02 08:12:16.895 1446 1446 I sysui_multi_action: [757,803,799,overview_source_app,802,1]", - "01-02 08:12:16.895 1446 1446 I sysui_multi_action: [757,804,799,overview_source_app_index,801,8,802,1]"); + List<String> lines = + Arrays.asList( + "01-02 08:11:58.691 934 986 I sysui_multi_action:" + + " a[319,48,322,82,325,84088,757,761,758,9,759,4,807,com.google.android.calculator,871,com.android.calculator2.Calculator,905,0]", + "01-02 08:12:03.639 934 970 I sysui_multi_action:" + + " [757,803,799,window_time_0,802,5]", + "01-02 08:12:10.849 934 986 I sysui_multi_action:" + + " 319,42,321,59,322,208,325,84100,757,761,758,9,759,4,806,com.google.android.apps.maps,871,com.google.android.maps.MapsActivity,905,0]", + "01-02 08:12:16.895 1446 1446 I sysui_multi_action:" + + " [757,803,799,overview_trigger_nav_btn,802,1]", + "01-02 08:12:16.895 1446 1446 I sysui_multi_action:" + + " [757,803,799,overview_source_app,802,1]", + "01-02 08:12:16.895 1446 1446 I sysui_multi_action:" + + " [757,804,799,overview_source_app_index,801,8,802,1]"); List<TransitionDelayItem> transitionItems = new EventsLogParser().parseTransitionDelayInfo(readInputBuffer(getTempFile(lines))); assertEquals("Transition Delay items list should be empty", 0, @@ -172,12 +196,15 @@ public class EventsLogParserTest extends TestCase { * Test for valid latency item */ public void testValidLatencyInfo() throws IOException { - List<String> lines = Arrays - .asList("08-25 13:01:19.412 1152 9031 I am_restart_activity: [com.google.android.gm/.ConversationListActivityGmail,0,85290699,38]", + List<String> lines = + Arrays.asList( + "08-25 13:01:19.412 1152 9031 I am_restart_activity:" + + " [com.google.android.gm/.ConversationListActivityGmail,0,85290699,38]", "08-25 13:01:19.437 1152 1226 I sysui_action: [321,85]", "08-25 13:01:19.437 1152 1226 I sysui_action: [320,1]", "08-25 13:01:19.437 1152 1226 I sysui_action: [319,85]", - "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied setFocusedActivity]", + "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied" + + " setFocusedActivity]", "09-19 11:53:16.893 1080 1160 I sysui_latency: [1,50]"); List<LatencyItem> latencyItems = new EventsLogParser().parseLatencyInfo(readInputBuffer(getTempFile(lines))); @@ -190,12 +217,15 @@ public class EventsLogParserTest extends TestCase { * Test for empty delay info */ public void testInvalidLatencyInfo() throws IOException { - List<String> lines = Arrays - .asList("08-25 13:01:19.412 1152 9031 I am_restart_activity: [com.google.android.gm/.ConversationListActivityGmail,0,85290699,38]", + List<String> lines = + Arrays.asList( + "08-25 13:01:19.412 1152 9031 I am_restart_activity:" + + " [com.google.android.gm/.ConversationListActivityGmail,0,85290699,38]", "08-25 13:01:19.437 1152 1226 I sysui_action: [321,85]", "08-25 13:01:19.437 1152 1226 I sysui_action: [320,1]", "08-25 13:01:19.437 1152 1226 I sysui_action: [319,85]", - "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied setFocusedActivity]", + "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied" + + " setFocusedActivity]", "09-19 11:53:16.893 1080 1160 I sysui_latency: [1]"); List<LatencyItem> latencyItems = new EventsLogParser().parseLatencyInfo(readInputBuffer(getTempFile(lines))); @@ -206,12 +236,15 @@ public class EventsLogParserTest extends TestCase { * Test for empty latency info */ public void testEmptyLatencyInfo() throws IOException { - List<String> lines = Arrays - .asList("08-25 13:01:19.412 1152 9031 I am_restart_activity: [com.google.android.gm/.ConversationListActivityGmail,0,85290699,38]", + List<String> lines = + Arrays.asList( + "08-25 13:01:19.412 1152 9031 I am_restart_activity:" + + " [com.google.android.gm/.ConversationListActivityGmail,0,85290699,38]", "08-25 13:01:19.437 1152 1226 I sysui_action: [321,85]", "08-25 13:01:19.437 1152 1226 I sysui_action: [320,1]", "08-25 13:01:19.437 1152 1226 I sysui_action: [319,85]", - "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied setFocusedActivity]", + "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied" + + " setFocusedActivity]", "09-19 11:53:16.893 1080 1160 I sysui_latency: []"); List<LatencyItem> latencyItems = new EventsLogParser().parseLatencyInfo(readInputBuffer(getTempFile(lines))); @@ -223,12 +256,14 @@ public class EventsLogParserTest extends TestCase { * Test for order of the latency items */ public void testLatencyInfoOrder() throws IOException { - List<String> lines = Arrays - .asList("09-19 11:53:16.893 1080 1160 I sysui_latency: [1,50]", + List<String> lines = + Arrays.asList( + "09-19 11:53:16.893 1080 1160 I sysui_latency: [1,50]", "08-25 13:01:19.437 1152 1226 I sysui_action: [321,85]", "08-25 13:01:19.437 1152 1226 I sysui_action: [320,1]", "08-25 13:01:19.437 1152 1226 I sysui_action: [319,85]", - "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied setFocusedActivity]", + "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied" + + " setFocusedActivity]", "09-19 11:53:16.893 1080 1160 I sysui_latency: [2,100]"); List<LatencyItem> latencyItems = new EventsLogParser().parseLatencyInfo(readInputBuffer(getTempFile(lines))); @@ -237,6 +272,59 @@ public class EventsLogParserTest extends TestCase { assertEquals("Second latency id is not 2", 2, latencyItems.get(1).getActionId()); } + /** Test for no boot event info in the events log */ + public void testNoBootEventInfo() throws IOException { + List<String> lines = + Arrays.asList( + "08-25 12:56:15.850 1152 8968 I am_focused_stack: [0,0,1,appDied" + + " setFocusedActivity]", + "08-25 12:56:15.850 1152 8968 I wm_task_moved: [6,1,1]", + "08-25 12:56:15.852 1152 8968 I am_focused_activity:" + + " [0,com.google.android.apps.nexuslauncher/.NexusLauncherActivity,appDied]", + "08-25 12:56:15.852 1152 8968 I wm_task_removed: [27,removeTask]", + "08-25 12:56:15.852 1152 8968 I wm_stack_removed: 1"); + List<BootEventItem> eventItems = + new EventsLogParser().parseBootEventInfo(readInputBuffer(getTempFile(lines))); + assertEquals("Boot item list should be empty", 0, eventItems.size()); + } + + /** Test for valid boot event items */ + public void testValidBootEventInfo() throws IOException { + List<String> lines = + Arrays.asList( + "05-03 13:48:42.837 702 702 I boot_progress_preload_start: 12133", + "05-03 13:48:44.307 702 702 I boot_progress_preload_end: 13603", + "05-03 13:48:48.073 1797 1797 I boot_progress_ams_ready: 17369", + "05-03 13:48:48.073 1797 1797 I user_activity_timeout_override: 10000", + "05-03 13:48:51.074 486 2790 I sf_stop_bootanim: 20369"); + List<BootEventItem> eventItems = + new EventsLogParser().parseBootEventInfo(readInputBuffer(getTempFile(lines))); + assertEquals("4 boot items should present in the list", 4, eventItems.size()); + assertEquals( + "boot_progress event name is not correctly parsed", + "boot_progress_preload_start", + eventItems.get(0).getEventName()); + assertEquals( + "sf_stop_anim event name is not correctly parsed", + "sf_stop_bootanim", + eventItems.get(3).getEventName()); + assertEquals("Duration is not correct", 12133.0, eventItems.get(0).getDuration(), 0.00001); + } + + /** Test for invalid boot event items */ + public void testInvalidBootEventInfo() throws IOException { + List<String> lines = + Arrays.asList( + "05-03 13:48:48.073 1797 1797 I user_activity_timeout_override: 10000", + "05-03 13:48:50.307 702 702 I xxboot_progress_preload_end: 13603", + "05-03 13:48:50.307 702 702 I boot_progress_preload_end xx: 13603", + "05-03 13:48:51.073 486 2790 I sf_stop_bootanim: 20369, 20382", + "05-03 13:48:52.073 486 2790 I xxsf_stop_bootanim: 20369"); + List<BootEventItem> eventItems = + new EventsLogParser().parseBootEventInfo(readInputBuffer(getTempFile(lines))); + assertEquals("Boot item list should be empty", 0, eventItems.size()); + } + /** * Write list of strings to file and use it for testing. */ @@ -255,6 +343,6 @@ public class EventsLogParserTest extends TestCase { * Reader to read the input from the given temp file */ public BufferedReader readInputBuffer(File tempFile) throws IOException { - return (new BufferedReader(new InputStreamReader(new FileInputStream(tempFile)))); + return new BufferedReader(new InputStreamReader(new FileInputStream(tempFile))); } } diff --git a/tests/src/com/android/loganalysis/parser/GfxInfoParserTest.java b/javatests/com/android/loganalysis/parser/GfxInfoParserTest.java index fcd053b..fcd053b 100644 --- a/tests/src/com/android/loganalysis/parser/GfxInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/GfxInfoParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/InterruptParserTest.java b/javatests/com/android/loganalysis/parser/InterruptParserTest.java index d45f3af..d45f3af 100644 --- a/tests/src/com/android/loganalysis/parser/InterruptParserTest.java +++ b/javatests/com/android/loganalysis/parser/InterruptParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/JavaCrashParserTest.java b/javatests/com/android/loganalysis/parser/JavaCrashParserTest.java index a7d06b3..a7d06b3 100644 --- a/tests/src/com/android/loganalysis/parser/JavaCrashParserTest.java +++ b/javatests/com/android/loganalysis/parser/JavaCrashParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/KernelLogParserTest.java b/javatests/com/android/loganalysis/parser/KernelLogParserTest.java index 159a90e..159a90e 100644 --- a/tests/src/com/android/loganalysis/parser/KernelLogParserTest.java +++ b/javatests/com/android/loganalysis/parser/KernelLogParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/LocationServiceParserTest.java b/javatests/com/android/loganalysis/parser/LocationServiceParserTest.java index fc58e45..fc58e45 100644 --- a/tests/src/com/android/loganalysis/parser/LocationServiceParserTest.java +++ b/javatests/com/android/loganalysis/parser/LocationServiceParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/LogcatParserTest.java b/javatests/com/android/loganalysis/parser/LogcatParserTest.java index 1d4f72c..1d4f72c 100644 --- a/tests/src/com/android/loganalysis/parser/LogcatParserTest.java +++ b/javatests/com/android/loganalysis/parser/LogcatParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/MemHealthParserTest.java b/javatests/com/android/loganalysis/parser/MemHealthParserTest.java index 4659b76..4659b76 100644 --- a/tests/src/com/android/loganalysis/parser/MemHealthParserTest.java +++ b/javatests/com/android/loganalysis/parser/MemHealthParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/MemInfoParserTest.java b/javatests/com/android/loganalysis/parser/MemInfoParserTest.java index ab41b33..123db19 100644 --- a/tests/src/com/android/loganalysis/parser/MemInfoParserTest.java +++ b/javatests/com/android/loganalysis/parser/MemInfoParserTest.java @@ -44,12 +44,12 @@ public class MemInfoParserTest extends TestCase { MemInfoItem item = new MemInfoParser().parse(inputBlock); assertEquals(6, item.size()); - assertEquals((Long)353332l, item.get("MemTotal")); - assertEquals((Long)65420l, item.get("MemFree")); - assertEquals((Long)20800l, item.get("Buffers")); - assertEquals((Long)86204l, item.get("Cached")); - assertEquals((Long)0l, item.get("SwapCached")); - assertEquals((Long)34359640152l, item.get("Long")); + assertEquals((Long) 353332L, item.get("MemTotal")); + assertEquals((Long) 65420L, item.get("MemFree")); + assertEquals((Long) 20800L, item.get("Buffers")); + assertEquals((Long) 86204L, item.get("Cached")); + assertEquals((Long) 0L, item.get("SwapCached")); + assertEquals((Long) 34359640152L, item.get("Long")); assertNull(item.get("ExtraLongIgnore")); assertEquals(ArrayUtil.join("\n", inputBlock), item.getText()); } diff --git a/tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java b/javatests/com/android/loganalysis/parser/MonkeyLogParserTest.java index b7e867d..b7e867d 100644 --- a/tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java +++ b/javatests/com/android/loganalysis/parser/MonkeyLogParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java b/javatests/com/android/loganalysis/parser/NativeCrashParserTest.java index 6c5cf98..6c5cf98 100644 --- a/tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java +++ b/javatests/com/android/loganalysis/parser/NativeCrashParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/ProcessUsageParserTest.java b/javatests/com/android/loganalysis/parser/ProcessUsageParserTest.java index bfba620..bfba620 100644 --- a/tests/src/com/android/loganalysis/parser/ProcessUsageParserTest.java +++ b/javatests/com/android/loganalysis/parser/ProcessUsageParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/ProcrankParserTest.java b/javatests/com/android/loganalysis/parser/ProcrankParserTest.java index c47b750..c47b750 100644 --- a/tests/src/com/android/loganalysis/parser/ProcrankParserTest.java +++ b/javatests/com/android/loganalysis/parser/ProcrankParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/QtaguidParserTest.java b/javatests/com/android/loganalysis/parser/QtaguidParserTest.java index f9442a6..f9442a6 100644 --- a/tests/src/com/android/loganalysis/parser/QtaguidParserTest.java +++ b/javatests/com/android/loganalysis/parser/QtaguidParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/SmartMonkeyLogParserTest.java b/javatests/com/android/loganalysis/parser/SmartMonkeyLogParserTest.java index 1249f7c..1249f7c 100644 --- a/tests/src/com/android/loganalysis/parser/SmartMonkeyLogParserTest.java +++ b/javatests/com/android/loganalysis/parser/SmartMonkeyLogParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/SystemPropsParserTest.java b/javatests/com/android/loganalysis/parser/SystemPropsParserTest.java index f6dc8a1..f6dc8a1 100644 --- a/tests/src/com/android/loganalysis/parser/SystemPropsParserTest.java +++ b/javatests/com/android/loganalysis/parser/SystemPropsParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/TimingsLogParserTest.java b/javatests/com/android/loganalysis/parser/TimingsLogParserTest.java index 48881ea..48881ea 100644 --- a/tests/src/com/android/loganalysis/parser/TimingsLogParserTest.java +++ b/javatests/com/android/loganalysis/parser/TimingsLogParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/TopParserTest.java b/javatests/com/android/loganalysis/parser/TopParserTest.java index 9b2253b..9b2253b 100644 --- a/tests/src/com/android/loganalysis/parser/TopParserTest.java +++ b/javatests/com/android/loganalysis/parser/TopParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/TraceFormatParserTest.java b/javatests/com/android/loganalysis/parser/TraceFormatParserTest.java index 06ce9ec..06ce9ec 100644 --- a/tests/src/com/android/loganalysis/parser/TraceFormatParserTest.java +++ b/javatests/com/android/loganalysis/parser/TraceFormatParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/TracesParserTest.java b/javatests/com/android/loganalysis/parser/TracesParserTest.java index c5046e3..c5046e3 100644 --- a/tests/src/com/android/loganalysis/parser/TracesParserTest.java +++ b/javatests/com/android/loganalysis/parser/TracesParserTest.java diff --git a/tests/src/com/android/loganalysis/parser/WakelockParserTest.java b/javatests/com/android/loganalysis/parser/WakelockParserTest.java index eff4ec8..eff4ec8 100644 --- a/tests/src/com/android/loganalysis/parser/WakelockParserTest.java +++ b/javatests/com/android/loganalysis/parser/WakelockParserTest.java diff --git a/tests/src/com/android/loganalysis/rule/InterruptRuleTest.java b/javatests/com/android/loganalysis/rule/InterruptRuleTest.java index 7a08db0..7a08db0 100644 --- a/tests/src/com/android/loganalysis/rule/InterruptRuleTest.java +++ b/javatests/com/android/loganalysis/rule/InterruptRuleTest.java diff --git a/tests/src/com/android/loganalysis/rule/LocationUsageRuleTest.java b/javatests/com/android/loganalysis/rule/LocationUsageRuleTest.java index 5dd7e9e..5dd7e9e 100644 --- a/tests/src/com/android/loganalysis/rule/LocationUsageRuleTest.java +++ b/javatests/com/android/loganalysis/rule/LocationUsageRuleTest.java diff --git a/tests/src/com/android/loganalysis/rule/ProcessUsageRuleTest.java b/javatests/com/android/loganalysis/rule/ProcessUsageRuleTest.java index cc322dc..cc322dc 100644 --- a/tests/src/com/android/loganalysis/rule/ProcessUsageRuleTest.java +++ b/javatests/com/android/loganalysis/rule/ProcessUsageRuleTest.java diff --git a/tests/src/com/android/loganalysis/rule/WakelockRuleTest.java b/javatests/com/android/loganalysis/rule/WakelockRuleTest.java index 6900c07..6900c07 100644 --- a/tests/src/com/android/loganalysis/rule/WakelockRuleTest.java +++ b/javatests/com/android/loganalysis/rule/WakelockRuleTest.java diff --git a/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java b/javatests/com/android/loganalysis/rule/WifiStatsRuleTest.java index 984ed20..984ed20 100644 --- a/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java +++ b/javatests/com/android/loganalysis/rule/WifiStatsRuleTest.java diff --git a/tests/src/com/android/loganalysis/util/ArrayUtilTest.java b/javatests/com/android/loganalysis/util/ArrayUtilTest.java index 98d85e6..98d85e6 100644 --- a/tests/src/com/android/loganalysis/util/ArrayUtilTest.java +++ b/javatests/com/android/loganalysis/util/ArrayUtilTest.java diff --git a/tests/src/com/android/loganalysis/util/LogPatternUtilTest.java b/javatests/com/android/loganalysis/util/LogPatternUtilTest.java index 98226d4..98226d4 100644 --- a/tests/src/com/android/loganalysis/util/LogPatternUtilTest.java +++ b/javatests/com/android/loganalysis/util/LogPatternUtilTest.java diff --git a/tests/src/com/android/loganalysis/util/LogTailUtilTest.java b/javatests/com/android/loganalysis/util/LogTailUtilTest.java index d7316c6..d7316c6 100644 --- a/tests/src/com/android/loganalysis/util/LogTailUtilTest.java +++ b/javatests/com/android/loganalysis/util/LogTailUtilTest.java diff --git a/tests/src/com/android/loganalysis/util/RegexTrieTest.java b/javatests/com/android/loganalysis/util/RegexTrieTest.java index 4b689b6..4b689b6 100644 --- a/tests/src/com/android/loganalysis/util/RegexTrieTest.java +++ b/javatests/com/android/loganalysis/util/RegexTrieTest.java diff --git a/tests/src/com/android/loganalysis/util/config/ArgsOptionParserTest.java b/javatests/com/android/loganalysis/util/config/ArgsOptionParserTest.java index 524cfa0..524cfa0 100644 --- a/tests/src/com/android/loganalysis/util/config/ArgsOptionParserTest.java +++ b/javatests/com/android/loganalysis/util/config/ArgsOptionParserTest.java diff --git a/tests/src/com/android/loganalysis/util/config/OptionSetterTest.java b/javatests/com/android/loganalysis/util/config/OptionSetterTest.java index 308e895..308e895 100644 --- a/tests/src/com/android/loganalysis/util/config/OptionSetterTest.java +++ b/javatests/com/android/loganalysis/util/config/OptionSetterTest.java diff --git a/tests/src/com/android/loganalysis/util/config/OptionUpdateRuleTest.java b/javatests/com/android/loganalysis/util/config/OptionUpdateRuleTest.java index 0e899ec..0e899ec 100644 --- a/tests/src/com/android/loganalysis/util/config/OptionUpdateRuleTest.java +++ b/javatests/com/android/loganalysis/util/config/OptionUpdateRuleTest.java diff --git a/src/com/android/loganalysis/item/BootEventItem.java b/src/com/android/loganalysis/item/BootEventItem.java new file mode 100644 index 0000000..ec948bb --- /dev/null +++ b/src/com/android/loganalysis/item/BootEventItem.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 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.loganalysis.item; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** An {@link IItem} used to store boot event info logged in event log. */ +public class BootEventItem extends GenericItem { + + /** Constant for JSON output */ + public static final String EVENT_NAME = "EVENT_NAME"; + + public static final String EVENT_DURATION = "DURATION"; + + private static final Set<String> ATTRIBUTES = + new HashSet<String>(Arrays.asList(EVENT_NAME, EVENT_DURATION)); + + /** The constructor for {@link BootEventItem}. */ + public BootEventItem() { + super(ATTRIBUTES); + } + + public String getEventName() { + return (String) getAttribute(EVENT_NAME); + } + + public void setEventName(String eventName) { + setAttribute(EVENT_NAME, eventName); + } + + public Double getDuration() { + return (Double) getAttribute(EVENT_DURATION); + } + + public void setDuration(Double eventDuration) { + setAttribute(EVENT_DURATION, eventDuration); + } +} diff --git a/src/com/android/loganalysis/item/DmesgItem.java b/src/com/android/loganalysis/item/DmesgItem.java index de70145..43fc04d 100644 --- a/src/com/android/loganalysis/item/DmesgItem.java +++ b/src/com/android/loganalysis/item/DmesgItem.java @@ -33,6 +33,8 @@ public class DmesgItem extends GenericItem { private List<DmesgActionInfoItem> mActionInfoItems = new ArrayList<>(); + private Map<String, DmesgModuleInfoItem> mModuleInfoItems = new HashMap<>(); + public DmesgItem() { super(Collections.emptySet()); } @@ -80,4 +82,16 @@ public class DmesgItem extends GenericItem { mActionInfoItems.add(actionInfoItem); } + /** @return moduleInfoItem */ + public Map<String, DmesgModuleInfoItem> getModuleInfoItems() { + return mModuleInfoItems; + } + + /** + * @param key to identify module info item + * @param moduleInfoItem to be added to the list + */ + public void addModuleInfoItem(String key, DmesgModuleInfoItem moduleInfoItem) { + mModuleInfoItems.put(key, moduleInfoItem); + } } diff --git a/src/com/android/loganalysis/item/DmesgModuleInfoItem.java b/src/com/android/loganalysis/item/DmesgModuleInfoItem.java new file mode 100644 index 0000000..dca6721 --- /dev/null +++ b/src/com/android/loganalysis/item/DmesgModuleInfoItem.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2021 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.loganalysis.item; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** An {@link IItem} used to store Module info logged in dmesg. */ +public class DmesgModuleInfoItem extends GenericItem { + + /** Constant for JSON output */ + public static final String MODULE_NAME = "MODULE_NAME"; + + public static final String MODULE_START_TIME = "MODULE_START_TIME"; + + public static final String MODULE_END_TIME = "MODULE_END_TIME"; + + public static final String MODULE_COUNT = "MODULE_COUNT"; + + public static final String MODULE_DURATION = "MODULE_DURATION"; + + private static final Set<String> ATTRIBUTES = + new HashSet<String>( + Arrays.asList( + MODULE_NAME, + MODULE_START_TIME, + MODULE_END_TIME, + MODULE_COUNT, + MODULE_DURATION)); + + /** The constructor for {@link DmesgModuleInfoItem}. */ + public DmesgModuleInfoItem() { + super(ATTRIBUTES); + } + + /** Set the name of the Module */ + public void setModuleName(String moduleName) { + setAttribute(MODULE_NAME, moduleName); + } + + /** Get the name of the Module */ + public String getModuleName() { + return (String) getAttribute(MODULE_NAME); + } + + /** Get the count of modules */ + public String getModuleCount() { + return (String) getAttribute(MODULE_COUNT); + } + + /** Set the count of modules */ + public void setModuleCount(String moduleName) { + setAttribute(MODULE_COUNT, moduleName); + } + + /** Get the start time in msecs */ + public Long getStartTime() { + return (Long) getAttribute(MODULE_START_TIME); + } + + /** Set the start time in msecs */ + public void setStartTime(Long startTime) { + setAttribute(MODULE_START_TIME, startTime); + } + + /** Get the end time in msecs */ + public Long getEndTime() { + return (Long) getAttribute(MODULE_END_TIME); + } + + /** Set the end time in msecs */ + public void setEndTime(Long endTime) { + setAttribute(MODULE_END_TIME, endTime); + } + + /** + * Get the module loading time in msecs If the start or end time is not present then return -1 + */ + public Long getModuleDuration() { + if (null != getAttribute(MODULE_DURATION)) { + return (Long) getAttribute(MODULE_DURATION); + } + if (null != getAttribute(MODULE_END_TIME) && null != getAttribute(MODULE_START_TIME)) { + long duration = getEndTime() - getStartTime(); + setModuleDuration(duration); + return duration; + } + return -1L; + } + + /** Get the duration in msec */ + public void setModuleDuration(Long duration) { + setAttribute(MODULE_DURATION, duration); + } + + @Override + public String toString() { + return "ModuleInfoItem [" + + "getModuleName()=" + + getModuleName() + + ", getStartTime()=" + + getStartTime() + + ", getDuration()=" + + getModuleDuration() + + "]"; + } +} diff --git a/src/com/android/loganalysis/parser/DmesgParser.java b/src/com/android/loganalysis/parser/DmesgParser.java index ffb6faa..53514d2 100644 --- a/src/com/android/loganalysis/parser/DmesgParser.java +++ b/src/com/android/loganalysis/parser/DmesgParser.java @@ -20,6 +20,7 @@ import com.android.loganalysis.item.DmesgActionInfoItem; import com.android.loganalysis.item.DmesgItem; import com.android.loganalysis.item.DmesgServiceInfoItem; import com.android.loganalysis.item.DmesgStageInfoItem; +import com.android.loganalysis.item.DmesgModuleInfoItem; import com.google.common.annotations.VisibleForTesting; @@ -44,6 +45,8 @@ public class DmesgParser implements IParser { private static final String DURATION = "DURATION"; private static final String UEVENTD = "ueventd"; private static final String INIT = "init"; + private static final String WAIT_PROPERTY = "Wait for property "; + private static final String TOTAL_MODULE = "TOTAL_MODULE"; // Matches: [ 14.822691] init: private static final String SERVICE_PREFIX = String.format("^\\[\\s+(?<%s>.*)\\] init:\\s+", @@ -82,14 +85,34 @@ public class DmesgParser implements IParser { private static final Pattern START_PROCESSING_ACTION = Pattern.compile(String.format("%s%s", SERVICE_PREFIX, START_PROCESSING_ACTION_PREFIX)); + // Matches: [ 1.175984] [ T1] init: Loaded 198 kernel modules took 808 ms + private static final Pattern MODULES_INFO = + Pattern.compile( + String.format( + "%sLoaded (?<count>\\d+) kernel modules took (?<%s>\\d+) ms.*$", + SERVICE_PREFIX, DURATION)); + + // Matches: [ 0.503853] [ T1] init: Loading module /lib/modules/exynos_dit.ko with args '' + private static final Pattern MODULE_LOADING = + Pattern.compile( + String.format( + "%sLoading module \\S+\\/(?<koname>\\S+)\\.ko with args.*", + SERVICE_PREFIX)); + + // Matches: [ 0.503803] [ T1] init: Loaded kernel module /lib/modules/boot_device_spi.ko + private static final Pattern MODULE_LOADED = + Pattern.compile( + String.format( + "%sLoaded kernel module \\S+\\/(?<koname>\\S+)\\.ko", SERVICE_PREFIX)); + // Matches: [ 3.791635] ueventd: Coldboot took 0.695055 seconds private static final String STAGE_SUFFIX= String.format( "(?<%s>.*)\\s+took\\s+(?<%s>.*)\\s+seconds$", STAGE, DURATION); private static final Pattern UEVENTD_STAGE_INFO = Pattern.compile( String.format("%s%s", UEVENTD_PREFIX, STAGE_SUFFIX)); - private static final String PROPERTY_SUFFIX= String.format( - "(?<%s>.*)\\s+took\\s+(?<%s>.*)ms$", STAGE, DURATION); + private static final String PROPERTY_SUFFIX = + String.format("Wait for property\\s(?<%s>.*)\\s+took\\s+(?<%s>.*)ms$", STAGE, DURATION); // Matches [ 7.270487] init: Wait for property 'apexd.status=ready' took 230ms private static final Pattern WAIT_FOR_PROPERTY_INFO = Pattern.compile( String.format("%s%s", SERVICE_PREFIX, PROPERTY_SUFFIX)); @@ -151,6 +174,9 @@ public class DmesgParser implements IParser { if (parseActionInfo(line)) { return; } + if (parseModuleInfo(line)) { + return; + } } /** @@ -214,7 +240,8 @@ public class DmesgParser implements IParser { } if((match = matches(WAIT_FOR_PROPERTY_INFO, line)) != null) { DmesgStageInfoItem stageInfoItem = new DmesgStageInfoItem(); - stageInfoItem.setStageName(String.format("%s_%s", INIT, match.group(STAGE))); + stageInfoItem.setStageName( + String.format("%s_%s%s", INIT, WAIT_PROPERTY, match.group(STAGE))); stageInfoItem.setDuration((long) Double.parseDouble(match.group(DURATION))); mDmesgItem.addStageInfoItem(stageInfoItem); return true; @@ -249,6 +276,44 @@ public class DmesgParser implements IParser { } /** + * Parse modules from each {@code line} of dmesg log and store the module name and loading time + * in {@link DmesgModuleInfoItem} object + * + * @param individual {@code line} of the dmesg log + * @return {@code true}, if {@code line} indicates start, end of a module loading or the summary + * {@code false}, otherwise + */ + @VisibleForTesting + boolean parseModuleInfo(String line) { + Matcher match = null; + if ((match = matches(MODULES_INFO, line)) != null) { + DmesgModuleInfoItem moduleInfoItem = new DmesgModuleInfoItem(); + moduleInfoItem.setModuleName(TOTAL_MODULE); + moduleInfoItem.setModuleDuration((long) Double.parseDouble(match.group(DURATION))); + moduleInfoItem.setModuleCount(match.group("count")); + mDmesgItem.addModuleInfoItem(TOTAL_MODULE, moduleInfoItem); + return true; + } + + if ((match = matches(MODULE_LOADING, line)) != null) { + DmesgModuleInfoItem moduleInfoItem = new DmesgModuleInfoItem(); + moduleInfoItem.setModuleName(match.group("koname")); + moduleInfoItem.setStartTime((long) (Double.parseDouble(match.group(TIMESTAMP)) * 1000)); + mDmesgItem.addModuleInfoItem(match.group("koname"), moduleInfoItem); + return true; + } else if ((match = matches(MODULE_LOADED, line)) != null) { + if (getModuleInfoItems().containsKey(match.group("koname"))) { + DmesgModuleInfoItem moduleInfoItem = + getModuleInfoItems().get(match.group("koname")); + moduleInfoItem.setEndTime( + (long) (Double.parseDouble(match.group(TIMESTAMP)) * 1000)); + } + return true; + } + return false; + } + + /** * Checks whether {@code line} matches the given {@link Pattern}. * * @return The resulting {@link Matcher} obtained by matching the {@code line} against @@ -277,4 +342,7 @@ public class DmesgParser implements IParser { return mDmesgItem.getActionInfoItems(); } + public Map<String, DmesgModuleInfoItem> getModuleInfoItems() { + return mDmesgItem.getModuleInfoItems(); + } }
\ No newline at end of file diff --git a/src/com/android/loganalysis/parser/EventsLogParser.java b/src/com/android/loganalysis/parser/EventsLogParser.java index 8dc2ca3..b2d6b06 100644 --- a/src/com/android/loganalysis/parser/EventsLogParser.java +++ b/src/com/android/loganalysis/parser/EventsLogParser.java @@ -17,6 +17,7 @@ package com.android.loganalysis.parser; import com.android.loganalysis.item.IItem; +import com.android.loganalysis.item.BootEventItem; import com.android.loganalysis.item.LatencyItem; import com.android.loganalysis.item.TransitionDelayItem; @@ -34,6 +35,18 @@ import java.util.regex.Pattern; */ public class EventsLogParser implements IParser { + private static final String DATE = "date"; + private static final String TIME = "time"; + private static final String TRANSITION_INFO = "transitioninfo"; + private static final String PACKAGE_KEY = "806"; + private static final String ACTIVITY_KEY = "871"; + private static final String TRANSITION_DELAY_KEY = "319"; + private static final String STARTING_WINDOW_DELAY_KEY = "321"; + private static final String COLD_LAUNCH_KEY = "945"; + private static final String WINDOWS_DRAWN_DELAY_KEY = "322"; + private static final String BOOT_PROGRESS = "boot_progress_"; + private static final String STOP_ANIM = "sf_stop_bootanim"; + // 09-18 23:56:19.376 1140 1221 I sysui_multi_action: // [319,51,321,50,322,190,325,670,757,761,758,7,759,1,806,com.google.android.calculator,871, // com.android.calculator2.Calculator,905,0,945,41] @@ -46,15 +59,21 @@ public class EventsLogParser implements IParser { + "(?<time>[0-9:.]*)\\s+\\d+\\s+\\d+ I sysui_latency: \\[(?<action>.*)," + "(?<delay>.*)\\]$"); - private static final String DATE = "date"; - private static final String TIME = "time"; - private static final String TRANSITION_INFO = "transitioninfo"; - private static final String PACKAGE_KEY = "806"; - private static final String ACTIVITY_KEY = "871"; - private static final String TRANSITION_DELAY_KEY = "319"; - private static final String STARTING_WINDOW_DELAY_KEY = "321"; - private static final String COLD_LAUNCH_KEY = "945"; - private static final String WINDOWS_DRAWN_DELAY_KEY = "322"; + // 05-24 09:14:59.999 720 720 I boot_progress_start: 40429 + private static final Pattern BOOT_DURATION = + Pattern.compile( + String.format( + "^\\d+-\\d+\\s(?<time>[0-9:.]*)\\s+\\S+\\s+\\S+\\sI (?<event>%s\\S+): " + + "(?<duration>\\d+)$", + BOOT_PROGRESS)); + + // 05-24 09:15:20.737 516 542 I sf_stop_bootanim: 61167 + private static final Pattern STOPANIM_DURATION = + Pattern.compile( + String.format( + "^\\d+-\\d+\\s(?<time>[0-9:.]*)\\s+\\S+\\s+\\S+\\sI (?<event>%s): " + + "(?<duration>\\d+)$", + STOP_ANIM)); @Override public IItem parse(List<String> lines) { @@ -143,6 +162,29 @@ public class EventsLogParser implements IParser { } /** + * Method to parse the boot information from the events log + * + * @param input + * @return + * @throws IOException + */ + public List<BootEventItem> parseBootEventInfo(BufferedReader input) throws IOException { + List<BootEventItem> eventItems = new ArrayList<BootEventItem>(); + String line; + while ((line = input.readLine()) != null) { + Matcher match = null; + if ((match = matches(BOOT_DURATION, line)) != null + || (match = matches(STOPANIM_DURATION, line)) != null) { + BootEventItem eventItem = new BootEventItem(); + eventItem.setEventName(match.group("event")); + eventItem.setDuration(Double.parseDouble(match.group("duration"))); + eventItems.add(eventItem); + } + } + return eventItems; + } + + /** * Checks whether {@code line} matches the given {@link Pattern}. * * @return The resulting {@link Matcher} obtained by matching the {@code line} against diff --git a/src/com/android/loganalysis/parser/LogcatParser.java b/src/com/android/loganalysis/parser/LogcatParser.java index b32536d..366b851 100644 --- a/src/com/android/loganalysis/parser/LogcatParser.java +++ b/src/com/android/loganalysis/parser/LogcatParser.java @@ -192,6 +192,9 @@ public class LogcatParser implements IParser { @Override public LogcatItem parse(List<String> lines) { for (String line : lines) { + if (line == null) { + continue; + } parseLine(line); } commit(); diff --git a/tests/Android.mk b/tests/Android.mk deleted file mode 100644 index e3958cd..0000000 --- a/tests/Android.mk +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (C) 2013 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. - -LOCAL_PATH := $(call my-dir) - -# makefile rules to copy jars to HOST_OUT/tradefed -# so tradefed.sh can automatically add to classpath - -DEST_JAR := $(HOST_OUT)/tradefed/loganalysis-tests.jar -$(DEST_JAR): $(call intermediates-dir-for,JAVA_LIBRARIES,loganalysis-tests,HOST)/javalib.jar - $(copy-file-to-new-target) - -# this dependency ensure the above rule will be executed if module is built -$(HOST_OUT_JAVA_LIBRARIES)/loganalysis-tests.jar : $(DEST_JAR) diff --git a/tests/src/com/android/loganalysis/FuncTests.java b/tests/src/com/android/loganalysis/FuncTests.java deleted file mode 100644 index 7a06cbd..0000000 --- a/tests/src/com/android/loganalysis/FuncTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2013 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.loganalysis; - -import com.android.loganalysis.parser.BugreportParserFuncTest; -import com.android.loganalysis.parser.LogcatParserFuncTest; -import com.android.loganalysis.parser.MonkeyLogParserFuncTest; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * A test suite for all log analysis functional tests. - */ -public class FuncTests extends TestSuite { - - public FuncTests() { - super(); - - addTestSuite(BugreportParserFuncTest.class); - addTestSuite(LogcatParserFuncTest.class); - addTestSuite(MonkeyLogParserFuncTest.class); - } - - public static Test suite() { - return new FuncTests(); - } -} diff --git a/tests/src/com/android/loganalysis/UnitTests.java b/tests/src/com/android/loganalysis/UnitTests.java deleted file mode 100644 index 35359ba..0000000 --- a/tests/src/com/android/loganalysis/UnitTests.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (C) 2013 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.loganalysis; - -import com.android.loganalysis.item.BatteryDischargeItemTest; -import com.android.loganalysis.item.BatteryUsageItemTest; -import com.android.loganalysis.item.DumpsysPackageStatsItemTest; -import com.android.loganalysis.item.DvmLockSampleItemTest; -import com.android.loganalysis.item.GenericItemTest; -import com.android.loganalysis.item.InterruptItemTest; -import com.android.loganalysis.item.LocationDumpsItemTest; -import com.android.loganalysis.item.MemInfoItemTest; -import com.android.loganalysis.item.MonkeyLogItemTest; -import com.android.loganalysis.item.ProcrankItemTest; -import com.android.loganalysis.item.SmartMonkeyLogItemTest; -import com.android.loganalysis.item.SystemPropsItemTest; -import com.android.loganalysis.item.TopItemTest; -import com.android.loganalysis.item.WakelockItemTest; -import com.android.loganalysis.parser.AbstractSectionParserTest; -import com.android.loganalysis.parser.ActivityServiceParserTest; -import com.android.loganalysis.parser.AnrParserTest; -import com.android.loganalysis.parser.BatteryDischargeStatsInfoParserTest; -import com.android.loganalysis.parser.BatteryStatsDetailedInfoParserTest; -import com.android.loganalysis.parser.BatteryStatsSummaryInfoParserTest; -import com.android.loganalysis.parser.BatteryUsageParserTest; -import com.android.loganalysis.parser.TimingsLogParserTest; -import com.android.loganalysis.parser.BugreportParserTest; -import com.android.loganalysis.parser.CompactMemInfoParserTest; -import com.android.loganalysis.parser.CpuInfoParserTest; -import com.android.loganalysis.parser.DmesgParserTest; -import com.android.loganalysis.parser.DumpsysBatteryStatsParserTest; -import com.android.loganalysis.parser.DumpsysPackageStatsParserTest; -import com.android.loganalysis.parser.DumpsysParserTest; -import com.android.loganalysis.parser.DumpsysProcStatsParserTest; -import com.android.loganalysis.parser.DumpsysProcessMeminfoParserTest; -import com.android.loganalysis.parser.DumpsysWifiStatsParserTest; -import com.android.loganalysis.parser.DvmLockSampleParserTest; -import com.android.loganalysis.parser.EventsLogParserTest; -import com.android.loganalysis.parser.GfxInfoParserTest; -import com.android.loganalysis.parser.InterruptParserTest; -import com.android.loganalysis.parser.JavaCrashParserTest; -import com.android.loganalysis.parser.KernelLogParserTest; -import com.android.loganalysis.parser.LocationServiceParserTest; -import com.android.loganalysis.parser.LogcatParserTest; -import com.android.loganalysis.parser.MemHealthParserTest; -import com.android.loganalysis.parser.MemInfoParserTest; -import com.android.loganalysis.parser.MonkeyLogParserTest; -import com.android.loganalysis.parser.NativeCrashParserTest; -import com.android.loganalysis.parser.ProcessUsageParserTest; -import com.android.loganalysis.parser.ProcrankParserTest; -import com.android.loganalysis.parser.QtaguidParserTest; -import com.android.loganalysis.parser.SmartMonkeyLogParserTest; -import com.android.loganalysis.parser.SystemPropsParserTest; -import com.android.loganalysis.parser.TopParserTest; -import com.android.loganalysis.parser.TraceFormatParserTest; -import com.android.loganalysis.parser.TracesParserTest; -import com.android.loganalysis.parser.WakelockParserTest; -import com.android.loganalysis.rule.InterruptRuleTest; -import com.android.loganalysis.rule.LocationUsageRuleTest; -import com.android.loganalysis.rule.ProcessUsageRuleTest; -import com.android.loganalysis.rule.WakelockRuleTest; -import com.android.loganalysis.rule.WifiStatsRuleTest; -import com.android.loganalysis.util.ArrayUtilTest; -import com.android.loganalysis.util.LogPatternUtilTest; -import com.android.loganalysis.util.LogTailUtilTest; -import com.android.loganalysis.util.RegexTrieTest; -import com.android.loganalysis.util.config.ArgsOptionParserTest; -import com.android.loganalysis.util.config.OptionSetterTest; -import com.android.loganalysis.util.config.OptionUpdateRuleTest; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -/** - * A test suite for all log analysis unit tests. - * - * <p>All tests listed here should be self-contained, and should not require any external - * dependencies. - */ -@RunWith(Suite.class) -@SuiteClasses({ - // item - BatteryDischargeItemTest.class, - BatteryUsageItemTest.class, - DumpsysPackageStatsItemTest.class, - DvmLockSampleItemTest.class, - GenericItemTest.class, - InterruptItemTest.class, - LocationDumpsItemTest.class, - MemInfoItemTest.class, - MonkeyLogItemTest.class, - ProcrankItemTest.class, - SmartMonkeyLogItemTest.class, - SystemPropsItemTest.class, - TopItemTest.class, - WakelockItemTest.class, - - // rule - InterruptRuleTest.class, - LocationUsageRuleTest.class, - ProcessUsageRuleTest.class, - WakelockRuleTest.class, - WifiStatsRuleTest.class, - - // parser - AbstractSectionParserTest.class, - ActivityServiceParserTest.class, - AnrParserTest.class, - BatteryDischargeStatsInfoParserTest.class, - BatteryStatsDetailedInfoParserTest.class, - BatteryStatsSummaryInfoParserTest.class, - BatteryUsageParserTest.class, - TimingsLogParserTest.class, - BugreportParserTest.class, - CompactMemInfoParserTest.class, - CpuInfoParserTest.class, - DmesgParserTest.class, - DumpsysBatteryStatsParserTest.class, - DumpsysPackageStatsParserTest.class, - DumpsysParserTest.class, - DumpsysProcessMeminfoParserTest.class, - DumpsysProcStatsParserTest.class, - DumpsysWifiStatsParserTest.class, - DvmLockSampleParserTest.class, - EventsLogParserTest.class, - GfxInfoParserTest.class, - InterruptParserTest.class, - JavaCrashParserTest.class, - KernelLogParserTest.class, - LocationServiceParserTest.class, - LogcatParserTest.class, - MemHealthParserTest.class, - MemInfoParserTest.class, - MonkeyLogParserTest.class, - NativeCrashParserTest.class, - ProcessUsageParserTest.class, - ProcrankParserTest.class, - QtaguidParserTest.class, - SmartMonkeyLogParserTest.class, - SystemPropsParserTest.class, - TopParserTest.class, - TraceFormatParserTest.class, - TracesParserTest.class, - WakelockParserTest.class, - - // util - ArrayUtilTest.class, - LogPatternUtilTest.class, - LogTailUtilTest.class, - RegexTrieTest.class, - - // util.config - ArgsOptionParserTest.class, - OptionSetterTest.class, - OptionUpdateRuleTest.class, -}) -public class UnitTests { - // empty of purpose -} diff --git a/tests/src/com/android/loganalysis/parser/BugreportParserFuncTest.java b/tests/src/com/android/loganalysis/parser/BugreportParserFuncTest.java deleted file mode 100644 index 802c5c0..0000000 --- a/tests/src/com/android/loganalysis/parser/BugreportParserFuncTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2011 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.loganalysis.parser; - -import com.android.loganalysis.item.BugreportItem; - -import junit.framework.TestCase; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -/** - * Functional tests for {@link BugreportParser} - */ -public class BugreportParserFuncTest extends TestCase { - // FIXME: Make bugreport file configurable. - private static final String BUGREPORT_PATH = "/tmp/bugreport.txt"; - - /** - * A test that is intended to force Brillopad to parse a bugreport. The purpose of this is to - * assist a developer in checking why a given bugreport file might not be parsed correctly by - * Brillopad. - */ - public void testParse() throws Exception { - BufferedReader bugreportReader = new BufferedReader(new FileReader(BUGREPORT_PATH)); - BugreportItem bugreport = null; - try { - long start = System.currentTimeMillis(); - bugreport = new BugreportParser().parse(bugreportReader); - long stop = System.currentTimeMillis(); - System.out.println(String.format("Bugreport took %d ms to parse.", stop - start)); - } finally { - if (bugreportReader != null) { - try { - bugreportReader.close(); - } catch (IOException e) { - // Ignore - } - } - } - - assertNotNull(bugreport); - assertNotNull(bugreport.getTime()); - - assertNotNull(bugreport.getSystemProps()); - assertTrue(bugreport.getSystemProps().size() > 0); - - assertNotNull(bugreport.getMemInfo()); - assertTrue(bugreport.getMemInfo().size() > 0); - - assertNotNull(bugreport.getProcrank()); - assertTrue(bugreport.getProcrank().getPids().size() > 0); - - assertNotNull(bugreport.getSystemLog()); - assertNotNull(bugreport.getSystemLog().getStartTime()); - assertNotNull(bugreport.getSystemLog().getStopTime()); - - assertNotNull(bugreport.getLastKmsg()); - - System.out.println(String.format("Stats for bugreport:\n" + - " Time: %s\n" + - " System Properties: %d items\n" + - " Mem info: %d items\n" + - " Procrank: %d items\n" + - " System Log:\n" + - " Start time: %s\n" + - " Stop time: %s\n" + - " %d ANR(s), %d Java Crash(es), %d Native Crash(es)\n" + - " %d Kernel Reset(s), %d Kernel Error(s)", - bugreport.getTime(), - bugreport.getSystemProps().size(), - bugreport.getMemInfo().size(), - bugreport.getProcrank().getPids().size(), - bugreport.getSystemLog().getStartTime().toString(), - bugreport.getSystemLog().getStopTime().toString(), - bugreport.getSystemLog().getAnrs().size(), - bugreport.getSystemLog().getJavaCrashes().size(), - bugreport.getSystemLog().getNativeCrashes().size(), - bugreport.getLastKmsg().getMiscEvents(KernelLogParser.KERNEL_RESET).size(), - bugreport.getLastKmsg().getMiscEvents(KernelLogParser.KERNEL_ERROR).size())); - } -} - diff --git a/tests/src/com/android/loganalysis/parser/LogcatParserFuncTest.java b/tests/src/com/android/loganalysis/parser/LogcatParserFuncTest.java deleted file mode 100644 index 5c43b75..0000000 --- a/tests/src/com/android/loganalysis/parser/LogcatParserFuncTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2011 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.loganalysis.parser; - -import com.android.loganalysis.item.LogcatItem; - -import junit.framework.TestCase; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -/** - * Functional tests for {@link LogcatParser} - */ -public class LogcatParserFuncTest extends TestCase { - // FIXME: Make logcat file configurable. - private static final String LOGCAT_PATH = "/tmp/logcat.txt"; - - /** - * A test that is intended to force Brillopad to parse a logcat. The purpose of this is to - * assist a developer in checking why a given logcat file might not be parsed correctly by - * Brillopad. - */ - public void testParse() throws Exception { - BufferedReader logcatReader = new BufferedReader(new FileReader(LOGCAT_PATH)); - - LogcatItem logcat = null; - try { - long start = System.currentTimeMillis(); - logcat = new LogcatParser().parse(logcatReader); - long stop = System.currentTimeMillis(); - System.out.println(String.format("Logcat took %d ms to parse.", stop - start)); - } finally { - if (logcatReader != null) { - try { - logcatReader.close(); - } catch (IOException e) { - // Ignore - } - } } - - assertNotNull(logcat); - assertNotNull(logcat.getStartTime()); - assertNotNull(logcat.getStopTime()); - - System.out.println(String.format("Stats for logcat:\n" + - " Start time: %s\n" + - " Stop time: %s\n" + - " %d ANR(s), %d Java Crash(es), %d Native Crash(es)", - logcat.getStartTime().toString(), - logcat.getStopTime().toString(), - logcat.getAnrs().size(), - logcat.getJavaCrashes().size(), - logcat.getNativeCrashes().size())); - } -} - diff --git a/tests/src/com/android/loganalysis/parser/MonkeyLogParserFuncTest.java b/tests/src/com/android/loganalysis/parser/MonkeyLogParserFuncTest.java deleted file mode 100644 index d4dec36..0000000 --- a/tests/src/com/android/loganalysis/parser/MonkeyLogParserFuncTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2011 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.loganalysis.parser; - -import com.android.loganalysis.item.AnrItem; -import com.android.loganalysis.item.JavaCrashItem; -import com.android.loganalysis.item.MonkeyLogItem; -import com.android.loganalysis.item.MonkeyLogItem.DroppedCategory; - -import junit.framework.TestCase; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -/** - * Functional tests for {@link MonkeyLogParser} - */ -public class MonkeyLogParserFuncTest extends TestCase { - // FIXME: Make monkey log file configurable. - private static final String MONKEY_LOG_PATH = "/tmp/monkey_log.txt"; - - /** - * A test that is intended to force Brillopad to parse a monkey log. The purpose of this is to - * assist a developer in checking why a given monkey log file might not be parsed correctly by - * Brillopad. - */ - public void testParse() throws Exception { - BufferedReader monkeyLogReader = new BufferedReader(new FileReader(MONKEY_LOG_PATH)); - MonkeyLogItem monkeyLog = null; - try { - long start = System.currentTimeMillis(); - monkeyLog = new MonkeyLogParser().parse(monkeyLogReader); - long stop = System.currentTimeMillis(); - System.out.println(String.format("Monkey log took %d ms to parse.", stop - start)); - } finally { - if (monkeyLogReader != null) { - try { - monkeyLogReader.close(); - } catch (IOException e) { - // Ignore - } - } } - - assertNotNull(monkeyLog); - assertNotNull(monkeyLog.getStartTime()); - assertNotNull(monkeyLog.getStopTime()); - assertNotNull(monkeyLog.getTargetCount()); - assertNotNull(monkeyLog.getThrottle()); - assertNotNull(monkeyLog.getSeed()); - assertNotNull(monkeyLog.getIgnoreSecurityExceptions()); - assertTrue(monkeyLog.getPackages().size() > 0); - assertTrue(monkeyLog.getCategories().size() > 0); - assertNotNull(monkeyLog.getIsFinished()); - assertNotNull(monkeyLog.getIntermediateCount()); - assertNotNull(monkeyLog.getTotalDuration()); - assertNotNull(monkeyLog.getStartUptimeDuration()); - assertNotNull(monkeyLog.getStopUptimeDuration()); - - - StringBuffer sb = new StringBuffer(); - sb.append("Stats for monkey log:\n"); - sb.append(String.format(" Start time: %s\n", monkeyLog.getStartTime())); - sb.append(String.format(" Stop time: %s\n", monkeyLog.getStopTime())); - sb.append(String.format(" Parameters: target-count=%d, throttle=%d, seed=%d, " + - "ignore-security-exceptions=%b\n", - monkeyLog.getTargetCount(), monkeyLog.getThrottle(), monkeyLog.getSeed(), - monkeyLog.getIgnoreSecurityExceptions())); - sb.append(String.format(" Packages: %s\n", monkeyLog.getPackages())); - sb.append(String.format(" Categories: %s\n", monkeyLog.getCategories())); - if (monkeyLog.getNoActivities()) { - sb.append(" Status: no-activities=true\n"); - } else { - sb.append(String.format(" Status: finished=%b, final-count=%d, " + - "intermediate-count=%d\n", monkeyLog.getIsFinished(), monkeyLog.getFinalCount(), - monkeyLog.getIntermediateCount())); - - sb.append(" Dropped events:"); - for (DroppedCategory drop : DroppedCategory.values()) { - sb.append(String.format(" %s=%d,", drop.toString(), - monkeyLog.getDroppedCount(drop))); - } - sb.deleteCharAt(sb.length()-1); - sb.append("\n"); - } - sb.append(String.format(" Run time: duration=%d ms, delta-uptime=%d (%d - %d) ms\n", - monkeyLog.getTotalDuration(), - monkeyLog.getStopUptimeDuration() - monkeyLog.getStartUptimeDuration(), - monkeyLog.getStopUptimeDuration(), monkeyLog.getStartUptimeDuration())); - - if (monkeyLog.getCrash() != null && monkeyLog.getCrash() instanceof AnrItem) { - sb.append(String.format(" Stopped due to ANR\n")); - } - if (monkeyLog.getCrash() != null && monkeyLog.getCrash() instanceof JavaCrashItem) { - sb.append(String.format(" Stopped due to Java crash\n")); - } - System.out.println(sb.toString()); - } -} - |