summaryrefslogtreecommitdiff
path: root/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/loganalysis/parser/DmesgParserTest.java')
-rw-r--r--tests/src/com/android/loganalysis/parser/DmesgParserTest.java231
1 files changed, 151 insertions, 80 deletions
diff --git a/tests/src/com/android/loganalysis/parser/DmesgParserTest.java b/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
index 9374c41..de3850a 100644
--- a/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
@@ -16,18 +16,16 @@
package com.android.loganalysis.parser;
-import com.android.loganalysis.item.ServiceInfoItem;
-
+import com.android.loganalysis.item.DmesgActionInfoItem;
+import com.android.loganalysis.item.DmesgServiceInfoItem;
+import com.android.loganalysis.item.DmesgStageInfoItem;
import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-
import junit.framework.TestCase;
/**
@@ -37,140 +35,213 @@ public class DmesgParserTest extends TestCase {
private static final String BOOT_ANIMATION = "bootanim";
private static final String NETD = "netd";
- private static final String DMESG_LOG = "dmesg_logs";
-
- private File mTempFile = null;
/**
* Test for empty dmesg logs passed to the DmesgParser
*/
public void testEmptyDmesgLog() throws IOException {
- List<String> lines = Arrays.asList("");
- File testFile = getTempFile(lines);
- BufferedReader bufferedReader = new BufferedReader(readInputBuffer(testFile));
- List<ServiceInfoItem> serviceItems = (new DmesgParser()).
- parseServiceInfo(bufferedReader);
- assertEquals("Service info items list should be empty", 0, serviceItems.size());
- bufferedReader.close();
- testFile.delete();
+ String[] lines = new String[] {""};
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
+ new ByteArrayInputStream(String.join("\n", lines).getBytes())))) {
+ DmesgParser dmesgParser = new DmesgParser();
+ dmesgParser.parseInfo(bufferedReader);
+ assertEquals("Service info items list should be empty", 0,
+ dmesgParser.getServiceInfoItems().size());
+ }
+ }
+
+ /**
+ * Test for complete dmesg logs
+ */
+ public void testCompleteDmesgLog() throws IOException {
+ String[] lines = new String[] {
+ "[ 22.962730] init: starting service 'bootanim'...",
+ "[ 23.252321] init: starting service 'netd'...",
+ "[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
+ "[ 32.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
+ "[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
+ "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0",
+ "[ 41.665818] init: init first stage started!",
+ "[ 42.425056] init: init second stage started!",
+ "[ 44.942872] init: processing action (early-init)",
+ "[ 47.233446] init: processing action (set_mmap_rnd_bits)",
+ "[ 47.240083] init: processing action (set_kptr_restrict)",
+ "[ 47.245778] init: processing action (keychord_init)",
+ "[ 52.361049] init: processing action (persist.sys.usb.config=* boot)",
+ "[ 52.361108] init: processing action (enable_property_trigger)",
+ "[ 52.361313] init: processing action (security.perf_harden=1)",
+ "[ 52.361495] init: processing action (ro.debuggable=1)",
+ "[ 52.962730] init: starting service 'bootanim'...",
+ "[ 59.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
+ "[ 62.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
+ "[ 65.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
+ "[ 69.855818] init: Service 'bootanim' (pid 588) exited with status 0"};
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
+ new ByteArrayInputStream(String.join("\n", lines).getBytes())))) {
+ DmesgParser dmesgParser = new DmesgParser();
+ dmesgParser.parseInfo(bufferedReader);
+ assertEquals("Service info items list size should be 2", 2,
+ dmesgParser.getServiceInfoItems().size());
+ assertEquals("Stage info items list size should be 2", 2,
+ dmesgParser.getStageInfoItems().size());
+ assertEquals("Action info items list size should be 5", 5,
+ dmesgParser.getActionInfoItems().size());
+ }
}
/**
* Test service which logs both the start and end time
*/
- public void testCompleteServiceInfo() throws IOException {
- List<String> lines = Arrays.asList(
+ public void testCompleteServiceInfo() {
+ String[] lines = new String[] {
"[ 22.962730] init: starting service 'bootanim'...",
"[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
"[ 32.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
"[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
- "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0");
- File testFile = getTempFile(lines);
- BufferedReader bufferedReader = new BufferedReader(readInputBuffer(testFile));
- List<ServiceInfoItem> serviceInfoItems = (new DmesgParser()).
- parseServiceInfo(bufferedReader);
- assertEquals("There should be atleast one service info", 1,
- serviceInfoItems.size());
+ "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0"};
+ DmesgParser dmesgParser = new DmesgParser();
+ for (String line : lines) {
+ dmesgParser.parseServiceInfo(line);
+ }
+ List<DmesgServiceInfoItem> serviceInfoItems = new ArrayList<>(
+ dmesgParser.getServiceInfoItems().values());
+ assertEquals("There should be atleast one service info", 1, serviceInfoItems.size());
assertEquals("Service name is not boot anim", BOOT_ANIMATION,
serviceInfoItems.get(0).getServiceName());
- assertEquals("Service start time is not correct", new Long(22962), serviceInfoItems.get(0)
- .getStartTime());
+ assertEquals("Service start time is not correct", new Long(22962),
+ serviceInfoItems.get(0)
+ .getStartTime());
assertEquals("Service end time is not correct", new Long(39855), serviceInfoItems.get(0)
.getEndTime());
- assertEquals("Service duration is nott correct", new Long(16893), serviceInfoItems.get(0)
- .getServiceDuration());
- bufferedReader.close();
- testFile.delete();
+ assertEquals("Service duration is nott correct", new Long(16893),
+ serviceInfoItems.get(0)
+ .getServiceDuration());
}
/**
* Test service which logs only the start time
*/
- public void testStartServiceInfo() throws IOException {
- List<String> lines = Arrays.asList(
+ public void testStartServiceInfo() {
+ String[] lines = new String[] {
"[ 23.252321] init: starting service 'netd'...",
"[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
"[ 32.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
- "[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts");
- File testFile = getTempFile(lines);
- BufferedReader bufferedReader = new BufferedReader(readInputBuffer(testFile));
- List<ServiceInfoItem> serviceInfoItems = (new DmesgParser()).
- parseServiceInfo(bufferedReader);
- assertEquals("There should be exactly one service info", 1,
- serviceInfoItems.size());
- assertEquals("Service name is not netd", NETD,
- serviceInfoItems.get(0).getServiceName());
- bufferedReader.close();
- testFile.delete();
+ "[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts"};
+ DmesgParser dmesgParser = new DmesgParser();
+ for (String line : lines) {
+ dmesgParser.parseServiceInfo(line);
+ }
+ List<DmesgServiceInfoItem> serviceInfoItems = new ArrayList<>(
+ dmesgParser.getServiceInfoItems().values());
+ assertEquals("There should be exactly one service info", 1, serviceInfoItems.size());
+ assertEquals("Service name is not netd", NETD, serviceInfoItems.get(0).getServiceName());
}
/**
* Test multiple service info parsed correctly and stored in the same order logged in
* the file.
*/
- public void testMultipleServiceInfo() throws IOException {
- List<String> lines = Arrays.asList(
+ public void testMultipleServiceInfo() {
+ String[] lines = new String[] {
"[ 22.962730] init: starting service 'bootanim'...",
"[ 23.252321] init: starting service 'netd'...",
"[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
"[ 32.182592] ueventd: fixup /sys/devices/virtual/inputpoll_delay 0 1004 660",
"[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
- "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0");
- File testFile = getTempFile(lines);
- BufferedReader bufferedReader = new BufferedReader(readInputBuffer(testFile));
- List<ServiceInfoItem> serviceInfoItems = (new DmesgParser()).
- parseServiceInfo(bufferedReader);
- assertEquals("There should be exactly two service info", 2,
- serviceInfoItems.size());
+ "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0"};
+ DmesgParser dmesgParser = new DmesgParser();
+ for (String line : lines) {
+ dmesgParser.parseServiceInfo(line);
+ }
+ List<DmesgServiceInfoItem> serviceInfoItems = new ArrayList<>(
+ dmesgParser.getServiceInfoItems().values());
+ assertEquals("There should be exactly two service info", 2, serviceInfoItems.size());
assertEquals("First service name is not boot anim", BOOT_ANIMATION,
serviceInfoItems.get(0).getServiceName());
assertEquals("Second service name is not netd", NETD,
serviceInfoItems.get(1).getServiceName());
- bufferedReader.close();
- testFile.delete();
}
/**
* Test invalid patterns on the start and exit service logs
*/
- public void testInvalidServiceLogs() throws IOException {
+ public void testInvalidServiceLogs() {
// Added space at the end of the start and exit of service logs to make it invalid
- List<String> lines = Arrays.asList(
+ String[] lines = new String[] {
"[ 22.962730] init: starting service 'bootanim'... ",
"[ 23.252321] init: starting service 'netd'... ",
"[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
"[ 32.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
"[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
- "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0 ");
- File testFile = getTempFile(lines);
- BufferedReader bufferedReader = new BufferedReader(readInputBuffer(testFile));
- List<ServiceInfoItem> serviceInfoItems = (new DmesgParser()).
- parseServiceInfo(bufferedReader);
- assertEquals("No service info should be available", 0,
- serviceInfoItems.size());
- bufferedReader.close();
- testFile.delete();
+ "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0 "};
+ DmesgParser dmesgParser = new DmesgParser();
+ for (String line : lines) {
+ dmesgParser.parseServiceInfo(line);
+ }
+ List<DmesgServiceInfoItem> serviceInfoItems = new ArrayList<>(
+ dmesgParser.getServiceInfoItems().values());
+ assertEquals("No service info should be available", 0, serviceInfoItems.size());
}
/**
- * Write list of strings to file and use it for testing.
+ * Test init stages' start time logs
*/
- public File getTempFile(List<String> sampleEventsLogs) throws IOException {
- mTempFile = File.createTempFile(DMESG_LOG, ".txt");
- BufferedWriter out = new BufferedWriter(new FileWriter(mTempFile));
- for (String line : sampleEventsLogs) {
- out.write(line);
- out.newLine();
+ public void testCompleteStageInfo() {
+ String[] lines = new String[] {
+ "[ 22.962730] init: starting service 'bootanim'...",
+ "[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
+ "[ 32.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
+ "[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
+ "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0",
+ "[ 41.665818] init: init first stage started!",
+ "[ 42.425056] init: init second stage started!"};
+ DmesgStageInfoItem firstStageInfoItem = new DmesgStageInfoItem("first",
+ (long) (Double.parseDouble("41665.818")));
+ DmesgStageInfoItem secondStageInfoItem = new DmesgStageInfoItem("second",
+ (long) (Double.parseDouble("42425.056")));
+ DmesgParser dmesgParser = new DmesgParser();
+ for (String line : lines) {
+ dmesgParser.parseStageInfo(line);
}
- out.close();
- return mTempFile;
+ List<DmesgStageInfoItem> stageInfoItems = dmesgParser.getStageInfoItems();
+ assertEquals(2, stageInfoItems.size());
+ assertEquals(Arrays.asList(firstStageInfoItem, secondStageInfoItem), stageInfoItems);
}
/**
- * Reader to read the input from the given temp file
+ * Test processing action start time logs
*/
- public BufferedReader readInputBuffer(File tempFile) throws IOException {
- return (new BufferedReader(new InputStreamReader(new FileInputStream(tempFile))));
+ public void testCompleteActionInfo() {
+ String[] lines = new String[] {
+ "[ 14.942872] init: processing action (early-init)",
+ "[ 17.233446] init: processing action (set_mmap_rnd_bits)",
+ "[ 17.240083] init: processing action (set_kptr_restrict)",
+ "[ 17.245778] init: processing action (keychord_init)",
+ "[ 22.361049] init: processing action (persist.sys.usb.config=* boot)",
+ "[ 22.361108] init: processing action (enable_property_trigger)",
+ "[ 22.361313] init: processing action (security.perf_harden=1)",
+ "[ 22.361495] init: processing action (ro.debuggable=1)",
+ "[ 22.962730] init: starting service 'bootanim'...",
+ "[ 29.331069] ipa-wan ipa_wwan_ioctl:1428 dev(rmnet_data0) register to IPA",
+ "[ 32.182592] ueventd: fixup /sys/devices/virtual/input/poll_delay 0 1004 660",
+ "[ 35.642666] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts",
+ "[ 39.855818] init: Service 'bootanim' (pid 588) exited with status 0"};
+ List<DmesgActionInfoItem> expectedActionInfoItems = Arrays.asList(
+ new DmesgActionInfoItem("early-init", (long) (Double.parseDouble("14942.872"))),
+ new DmesgActionInfoItem("set_mmap_rnd_bits",
+ (long) (Double.parseDouble("17233.446"))),
+ new DmesgActionInfoItem("set_kptr_restrict",
+ (long) (Double.parseDouble("17240.083"))),
+ new DmesgActionInfoItem("keychord_init", (long) (Double.parseDouble("17245.778"))),
+ new DmesgActionInfoItem("enable_property_trigger",
+ (long) (Double.parseDouble("22361.108"))));
+ DmesgParser dmesgParser = new DmesgParser();
+ for (String line : lines) {
+ dmesgParser.parseActionInfo(line);
+ }
+ List<DmesgActionInfoItem> actualActionInfoItems = dmesgParser.getActionInfoItems();
+ assertEquals(5, actualActionInfoItems.size());
+ assertEquals(expectedActionInfoItems, actualActionInfoItems);
}
}