Home | History | Annotate | Download | only in parser
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.loganalysis.parser;
     17 
     18 import com.android.loganalysis.item.AnrItem;
     19 import com.android.loganalysis.util.ArrayUtil;
     20 
     21 import junit.framework.TestCase;
     22 
     23 import java.util.Arrays;
     24 import java.util.List;
     25 
     26 /**
     27  * Unit tests for {@link AnrParser}.
     28  */
     29 public class AnrParserTest extends TestCase {
     30 
     31     /**
     32      * Test that ANRs are parsed for the header "ANR (application not responding) in process: app"
     33      */
     34     public void testParse_application_not_responding() {
     35         List<String> lines = Arrays.asList(
     36                 "ANR (application not responding) in process: com.android.package",
     37                 "Reason: keyDispatchingTimedOut",
     38                 "Load: 0.71 / 0.83 / 0.51",
     39                 "CPU usage from 4357ms to -1434ms ago:",
     40                 "  22% 3378/com.android.package: 19% user + 3.6% kernel / faults: 73 minor 1 major",
     41                 "  16% 312/system_server: 12% user + 4.1% kernel / faults: 1082 minor 6 major",
     42                 "33% TOTAL: 21% user + 11% kernel + 0.3% iowait",
     43                 "CPU usage from 907ms to 1431ms later:",
     44                 "  14% 121/mediaserver: 11% user + 3.7% kernel / faults: 17 minor",
     45                 "    3.7% 183/AudioOut_2: 3.7% user + 0% kernel",
     46                 "  12% 312/system_server: 5.5% user + 7.4% kernel / faults: 6 minor",
     47                 "    5.5% 366/InputDispatcher: 0% user + 5.5% kernel",
     48                 "18% TOTAL: 11% user + 7.5% kernel");
     49 
     50         AnrItem anr = new AnrParser().parse(lines);
     51         assertNotNull(anr);
     52         assertEquals("com.android.package", anr.getApp());
     53         assertEquals("keyDispatchingTimedOut", anr.getReason());
     54         assertEquals(0.71, anr.getLoad(AnrItem.LoadCategory.LOAD_1));
     55         assertEquals(0.83, anr.getLoad(AnrItem.LoadCategory.LOAD_5));
     56         assertEquals(0.51, anr.getLoad(AnrItem.LoadCategory.LOAD_15));
     57         assertEquals(33.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.TOTAL));
     58         assertEquals(21.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.USER));
     59         assertEquals(11.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.KERNEL));
     60         assertEquals(0.3, anr.getCpuUsage(AnrItem.CpuUsageCategory.IOWAIT));
     61         assertEquals(ArrayUtil.join("\n", lines), anr.getStack());
     62     }
     63 
     64     /**
     65      * Test that ANRs are parsed for the header "ANR in app"
     66      */
     67     public void testParse_anr_in_app() {
     68         List<String> lines = Arrays.asList(
     69                 "ANR in com.android.package",
     70                 "Reason: keyDispatchingTimedOut",
     71                 "Load: 0.71 / 0.83 / 0.51",
     72                 "CPU usage from 4357ms to -1434ms ago:",
     73                 "  22% 3378/com.android.package: 19% user + 3.6% kernel / faults: 73 minor 1 major",
     74                 "  16% 312/system_server: 12% user + 4.1% kernel / faults: 1082 minor 6 major",
     75                 "33% TOTAL: 21% user + 11% kernel + 0.3% iowait",
     76                 "CPU usage from 907ms to 1431ms later:",
     77                 "  14% 121/mediaserver: 11% user + 3.7% kernel / faults: 17 minor",
     78                 "    3.7% 183/AudioOut_2: 3.7% user + 0% kernel",
     79                 "  12% 312/system_server: 5.5% user + 7.4% kernel / faults: 6 minor",
     80                 "    5.5% 366/InputDispatcher: 0% user + 5.5% kernel",
     81                 "18% TOTAL: 11% user + 7.5% kernel");
     82 
     83         AnrItem anr = new AnrParser().parse(lines);
     84         assertNotNull(anr);
     85         assertEquals("com.android.package", anr.getApp());
     86         assertEquals("keyDispatchingTimedOut", anr.getReason());
     87         assertEquals(0.71, anr.getLoad(AnrItem.LoadCategory.LOAD_1));
     88         assertEquals(0.83, anr.getLoad(AnrItem.LoadCategory.LOAD_5));
     89         assertEquals(0.51, anr.getLoad(AnrItem.LoadCategory.LOAD_15));
     90         assertEquals(33.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.TOTAL));
     91         assertEquals(21.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.USER));
     92         assertEquals(11.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.KERNEL));
     93         assertEquals(0.3, anr.getCpuUsage(AnrItem.CpuUsageCategory.IOWAIT));
     94         assertEquals(ArrayUtil.join("\n", lines), anr.getStack());
     95     }
     96 
     97     /**
     98      * Test that ANRs are parsed for the header "ANR in app (class/package)"
     99      */
    100     public void testParse_anr_in_app_class_package() {
    101         List<String> lines = Arrays.asList(
    102                 "ANR in com.android.package (com.android.package/.Activity)",
    103                 "Reason: keyDispatchingTimedOut",
    104                 "Load: 0.71 / 0.83 / 0.51",
    105                 "CPU usage from 4357ms to -1434ms ago:",
    106                 "  22% 3378/com.android.package: 19% user + 3.6% kernel / faults: 73 minor 1 major",
    107                 "  16% 312/system_server: 12% user + 4.1% kernel / faults: 1082 minor 6 major",
    108                 "33% TOTAL: 21% user + 11% kernel + 0.3% iowait",
    109                 "CPU usage from 907ms to 1431ms later:",
    110                 "  14% 121/mediaserver: 11% user + 3.7% kernel / faults: 17 minor",
    111                 "    3.7% 183/AudioOut_2: 3.7% user + 0% kernel",
    112                 "  12% 312/system_server: 5.5% user + 7.4% kernel / faults: 6 minor",
    113                 "    5.5% 366/InputDispatcher: 0% user + 5.5% kernel",
    114                 "18% TOTAL: 11% user + 7.5% kernel");
    115 
    116         AnrItem anr = new AnrParser().parse(lines);
    117         assertNotNull(anr);
    118         assertEquals("com.android.package", anr.getApp());
    119         assertEquals("keyDispatchingTimedOut", anr.getReason());
    120         assertEquals(0.71, anr.getLoad(AnrItem.LoadCategory.LOAD_1));
    121         assertEquals(0.83, anr.getLoad(AnrItem.LoadCategory.LOAD_5));
    122         assertEquals(0.51, anr.getLoad(AnrItem.LoadCategory.LOAD_15));
    123         assertEquals(33.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.TOTAL));
    124         assertEquals(21.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.USER));
    125         assertEquals(11.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.KERNEL));
    126         assertEquals(0.3, anr.getCpuUsage(AnrItem.CpuUsageCategory.IOWAIT));
    127         assertEquals(ArrayUtil.join("\n", lines), anr.getStack());
    128     }
    129 
    130     /**
    131      * Test that ANRs with PID are parsed.
    132      */
    133     public void testParse_anr_in_app_class_package_pid() {
    134         List<String> lines = Arrays.asList(
    135                 "ANR in com.android.package (com.android.package/.Activity)",
    136                 "PID: 1234",
    137                 "Reason: keyDispatchingTimedOut",
    138                 "Load: 0.71 / 0.83 / 0.51",
    139                 "CPU usage from 4357ms to -1434ms ago:",
    140                 "  22% 3378/com.android.package: 19% user + 3.6% kernel / faults: 73 minor 1 major",
    141                 "  16% 312/system_server: 12% user + 4.1% kernel / faults: 1082 minor 6 major",
    142                 "33% TOTAL: 21% user + 11% kernel + 0.3% iowait",
    143                 "CPU usage from 907ms to 1431ms later:",
    144                 "  14% 121/mediaserver: 11% user + 3.7% kernel / faults: 17 minor",
    145                 "    3.7% 183/AudioOut_2: 3.7% user + 0% kernel",
    146                 "  12% 312/system_server: 5.5% user + 7.4% kernel / faults: 6 minor",
    147                 "    5.5% 366/InputDispatcher: 0% user + 5.5% kernel",
    148                 "18% TOTAL: 11% user + 7.5% kernel");
    149 
    150         AnrItem anr = new AnrParser().parse(lines);
    151         assertNotNull(anr);
    152         assertEquals("com.android.package", anr.getApp());
    153         assertEquals("keyDispatchingTimedOut", anr.getReason());
    154         assertEquals(1234, anr.getPid().intValue());
    155         assertEquals(0.71, anr.getLoad(AnrItem.LoadCategory.LOAD_1));
    156         assertEquals(0.83, anr.getLoad(AnrItem.LoadCategory.LOAD_5));
    157         assertEquals(0.51, anr.getLoad(AnrItem.LoadCategory.LOAD_15));
    158         assertEquals(33.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.TOTAL));
    159         assertEquals(21.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.USER));
    160         assertEquals(11.0, anr.getCpuUsage(AnrItem.CpuUsageCategory.KERNEL));
    161         assertEquals(0.3, anr.getCpuUsage(AnrItem.CpuUsageCategory.IOWAIT));
    162         assertEquals(ArrayUtil.join("\n", lines), anr.getStack());
    163     }
    164 }
    165