Home | History | Annotate | Download | only in testtype
      1 /*
      2  * Copyright (C) 2010 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.tradefed.testtype;
     17 
     18 import com.android.tradefed.metrics.proto.MetricMeasurement.Metric;
     19 import com.android.tradefed.result.ITestInvocationListener;
     20 import com.android.tradefed.result.TestDescription;
     21 
     22 import org.easymock.EasyMock;
     23 
     24 import java.util.HashMap;
     25 
     26 
     27 /**
     28  * Unit tests for {@link GTestResultParserTest}.
     29  */
     30 public class GTestResultParserTest extends GTestParserTestBase {
     31 
     32     /**
     33      * Tests the parser for a simple test run output with 11 tests.
     34      */
     35     @SuppressWarnings("unchecked")
     36     public void testParseSimpleFile() throws Exception {
     37         String[] contents =  readInFile(GTEST_OUTPUT_FILE_1);
     38         ITestInvocationListener mockRunListener =
     39                 EasyMock.createMock(ITestInvocationListener.class);
     40         mockRunListener.testRunStarted(TEST_MODULE_NAME, 11);
     41         // 11 passing test cases in this run
     42         for (int i=0; i<11; ++i) {
     43             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
     44             mockRunListener.testEnded(
     45                     (TestDescription) EasyMock.anyObject(),
     46                     (HashMap<String, Metric>) EasyMock.anyObject());
     47         }
     48         // TODO: validate param values
     49         mockRunListener.testRunEnded(
     50                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
     51         EasyMock.replay(mockRunListener);
     52         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
     53         resultParser.processNewLines(contents);
     54         resultParser.flush();
     55         EasyMock.verify(mockRunListener);
     56     }
     57 
     58     /**
     59      * Tests the parser for a simple test run output with 53 tests and no times.
     60      */
     61     @SuppressWarnings("unchecked")
     62     public void testParseSimpleFileNoTimes() throws Exception {
     63         String[] contents =  readInFile(GTEST_OUTPUT_FILE_2);
     64         ITestInvocationListener mockRunListener =
     65                 EasyMock.createMock(ITestInvocationListener.class);
     66         mockRunListener.testRunStarted(TEST_MODULE_NAME, 53);
     67         // 53 passing test cases in this run
     68         for (int i=0; i<53; ++i) {
     69             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
     70             mockRunListener.testEnded(
     71                     (TestDescription) EasyMock.anyObject(),
     72                     (HashMap<String, Metric>) EasyMock.anyObject());
     73         }
     74         // TODO: validate param values
     75         mockRunListener.testRunEnded(
     76                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
     77         EasyMock.replay(mockRunListener);
     78         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
     79         resultParser.processNewLines(contents);
     80         resultParser.flush();
     81         EasyMock.verify(mockRunListener);
     82     }
     83 
     84     /**
     85      * Tests the parser for a simple test run output with 0 tests and no times.
     86      */
     87     public void testParseNoTests() throws Exception {
     88         String[] contents =  readInFile(GTEST_OUTPUT_FILE_3);
     89         HashMap<String, Metric> expected = new HashMap<>();
     90         ITestInvocationListener mockRunListener =
     91                 EasyMock.createMock(ITestInvocationListener.class);
     92         mockRunListener.testRunStarted(TEST_MODULE_NAME, 0);
     93         mockRunListener.testRunEnded(EasyMock.anyLong(), EasyMock.eq(expected));
     94         EasyMock.replay(mockRunListener);
     95         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
     96         resultParser.processNewLines(contents);
     97         resultParser.flush();
     98         EasyMock.verify(mockRunListener);
     99     }
    100 
    101     /**
    102      * Tests the parser for a run with 268 tests.
    103      */
    104     @SuppressWarnings("unchecked")
    105     public void testParseLargerFile() throws Exception {
    106         String[] contents =  readInFile(GTEST_OUTPUT_FILE_4);
    107         ITestInvocationListener mockRunListener =
    108                 EasyMock.createMock(ITestInvocationListener.class);
    109         mockRunListener.testRunStarted(TEST_MODULE_NAME, 268);
    110         // 268 passing test cases in this run
    111         for (int i=0; i<268; ++i) {
    112             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    113             mockRunListener.testEnded(
    114                     (TestDescription) EasyMock.anyObject(),
    115                     (HashMap<String, Metric>) EasyMock.anyObject());
    116         }
    117         // TODO: validate param values
    118         mockRunListener.testRunEnded(
    119                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
    120         EasyMock.replay(mockRunListener);
    121         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
    122         resultParser.processNewLines(contents);
    123         resultParser.flush();
    124         EasyMock.verify(mockRunListener);
    125     }
    126 
    127     /**
    128      * Tests the parser for a run with test failures.
    129      */
    130     @SuppressWarnings("unchecked")
    131     public void testParseWithFailures() throws Exception {
    132         String MESSAGE_OUTPUT =
    133                 "This is some random text that should get captured by the parser.";
    134         String[] contents =  readInFile(GTEST_OUTPUT_FILE_5);
    135         ITestInvocationListener mockRunListener =
    136                 EasyMock.createMock(ITestInvocationListener.class);
    137         // 13 test cases in this run
    138         mockRunListener.testRunStarted(TEST_MODULE_NAME, 13);
    139         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    140         mockRunListener.testEnded(
    141                 (TestDescription) EasyMock.anyObject(),
    142                 (HashMap<String, Metric>) EasyMock.anyObject());
    143         // test failure
    144         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    145         mockRunListener.testFailed(
    146                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    147         mockRunListener.testEnded(
    148                 (TestDescription) EasyMock.anyObject(),
    149                 (HashMap<String, Metric>) EasyMock.anyObject());
    150         // 4 passing tests
    151         for (int i=0; i<4; ++i) {
    152             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    153             mockRunListener.testEnded(
    154                     (TestDescription) EasyMock.anyObject(),
    155                     (HashMap<String, Metric>) EasyMock.anyObject());
    156         }
    157         // 2 consecutive test failures
    158         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    159         mockRunListener.testFailed(
    160                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    161         mockRunListener.testEnded(
    162                 (TestDescription) EasyMock.anyObject(),
    163                 (HashMap<String, Metric>) EasyMock.anyObject());
    164 
    165         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    166         mockRunListener.testFailed(
    167                 (TestDescription) EasyMock.anyObject(), EasyMock.matches(MESSAGE_OUTPUT));
    168         mockRunListener.testEnded(
    169                 (TestDescription) EasyMock.anyObject(),
    170                 (HashMap<String, Metric>) EasyMock.anyObject());
    171 
    172         // 5 passing tests
    173         for (int i=0; i<5; ++i) {
    174             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    175             mockRunListener.testEnded(
    176                     (TestDescription) EasyMock.anyObject(),
    177                     (HashMap<String, Metric>) EasyMock.anyObject());
    178         }
    179 
    180         // TODO: validate param values
    181         mockRunListener.testRunEnded(
    182                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
    183         EasyMock.replay(mockRunListener);
    184         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
    185         resultParser.processNewLines(contents);
    186         resultParser.flush();
    187         EasyMock.verify(mockRunListener);
    188     }
    189 
    190     /**
    191      * Tests the parser for a run with test errors.
    192      */
    193     @SuppressWarnings("unchecked")
    194     public void testParseWithErrors() throws Exception {
    195         String[] contents =  readInFile(GTEST_OUTPUT_FILE_6);
    196         ITestInvocationListener mockRunListener =
    197                 EasyMock.createMock(ITestInvocationListener.class);
    198         // 10 test cases in this run
    199         mockRunListener.testRunStarted(TEST_MODULE_NAME, 10);
    200         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    201         mockRunListener.testEnded(
    202                 (TestDescription) EasyMock.anyObject(),
    203                 (HashMap<String, Metric>) EasyMock.anyObject());
    204         // test failure
    205         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    206         mockRunListener.testFailed(
    207                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    208         mockRunListener.testEnded(
    209                 (TestDescription) EasyMock.anyObject(),
    210                 (HashMap<String, Metric>) EasyMock.anyObject());
    211         // 5 passing tests
    212         for (int i=0; i<5; ++i) {
    213             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    214             mockRunListener.testEnded(
    215                     (TestDescription) EasyMock.anyObject(),
    216                     (HashMap<String, Metric>) EasyMock.anyObject());
    217         }
    218         // another test error
    219         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    220         mockRunListener.testFailed(
    221                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    222         mockRunListener.testEnded(
    223                 (TestDescription) EasyMock.anyObject(),
    224                 (HashMap<String, Metric>) EasyMock.anyObject());
    225         // 2 passing tests
    226         for (int i=0; i<2; ++i) {
    227             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    228             mockRunListener.testEnded(
    229                     (TestDescription) EasyMock.anyObject(),
    230                     (HashMap<String, Metric>) EasyMock.anyObject());
    231         }
    232 
    233         // TODO: validate param values
    234         mockRunListener.testRunEnded(
    235                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
    236         EasyMock.replay(mockRunListener);
    237         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
    238         resultParser.processNewLines(contents);
    239         resultParser.flush();
    240         EasyMock.verify(mockRunListener);
    241     }
    242 
    243     /**
    244      * Tests the parser for a run with 11 tests.
    245      */
    246     @SuppressWarnings("unchecked")
    247     public void testParseNonAlignedTag() throws Exception {
    248         String[] contents =  readInFile(GTEST_OUTPUT_FILE_7);
    249         ITestInvocationListener mockRunListener =
    250                 EasyMock.createMock(ITestInvocationListener.class);
    251         mockRunListener.testRunStarted(TEST_MODULE_NAME, 11);
    252         // 11 passing test cases in this run
    253         for (int i=0; i<11; ++i) {
    254             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    255             mockRunListener.testEnded(
    256                     (TestDescription) EasyMock.anyObject(),
    257                     (HashMap<String, Metric>) EasyMock.anyObject());
    258         }
    259         mockRunListener.testRunEnded(
    260                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
    261         EasyMock.replay(mockRunListener);
    262         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
    263         resultParser.processNewLines(contents);
    264         resultParser.flush();
    265         EasyMock.verify(mockRunListener);
    266     }
    267 
    268     /**
    269      * Tests the parser for a simple test run output with 18 tests with Non GTest format
    270      * Should not crash.
    271      */
    272     @SuppressWarnings("unchecked")
    273     public void testParseSimpleFile_AltFormat() throws Exception {
    274         String[] contents =  readInFile(GTEST_OUTPUT_FILE_8);
    275         ITestInvocationListener mockRunListener =
    276                 EasyMock.createMock(ITestInvocationListener.class);
    277         mockRunListener.testRunStarted(TEST_MODULE_NAME, 18);
    278         // 14 passing tests
    279         for (int i=0; i<14; ++i) {
    280             mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    281             mockRunListener.testEnded(
    282                     (TestDescription) EasyMock.anyObject(),
    283                     (HashMap<String, Metric>) EasyMock.anyObject());
    284         }
    285         // 3 consecutive test failures
    286         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    287         mockRunListener.testFailed(
    288                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    289         mockRunListener.testEnded(
    290                 (TestDescription) EasyMock.anyObject(),
    291                 (HashMap<String, Metric>) EasyMock.anyObject());
    292         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    293         mockRunListener.testFailed(
    294                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    295         mockRunListener.testEnded(
    296                 (TestDescription) EasyMock.anyObject(),
    297                 (HashMap<String, Metric>) EasyMock.anyObject());
    298 
    299         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    300         mockRunListener.testFailed(
    301                 (TestDescription) EasyMock.anyObject(), (String) EasyMock.anyObject());
    302         mockRunListener.testEnded(
    303                 (TestDescription) EasyMock.anyObject(),
    304                 (HashMap<String, Metric>) EasyMock.anyObject());
    305         // 1 passing test
    306         mockRunListener.testStarted((TestDescription) EasyMock.anyObject());
    307         mockRunListener.testEnded(
    308                 (TestDescription) EasyMock.anyObject(),
    309                 (HashMap<String, Metric>) EasyMock.anyObject());
    310 
    311         mockRunListener.testRunEnded(
    312                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
    313         EasyMock.replay(mockRunListener);
    314         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
    315         resultParser.processNewLines(contents);
    316         resultParser.flush();
    317         EasyMock.verify(mockRunListener);
    318     }
    319 
    320     /** Tests the parser for a simple test run output with a link error. */
    321     public void testParseSimpleFile_LinkError() throws Exception {
    322         String[] contents = readInFile(GTEST_OUTPUT_FILE_9);
    323         ITestInvocationListener mockRunListener =
    324                 EasyMock.createMock(ITestInvocationListener.class);
    325         mockRunListener.testRunStarted(TEST_MODULE_NAME, 0);
    326         mockRunListener.testRunFailed(
    327                 "CANNOT LINK EXECUTABLE \"/data/installd_cache_test\": "
    328                         + "library \"liblogwrap.so\" not found");
    329         mockRunListener.testRunEnded(
    330                 EasyMock.anyLong(), (HashMap<String, Metric>) EasyMock.anyObject());
    331         EasyMock.replay(mockRunListener);
    332         GTestResultParser resultParser = new GTestResultParser(TEST_MODULE_NAME, mockRunListener);
    333         resultParser.processNewLines(contents);
    334         resultParser.flush();
    335         EasyMock.verify(mockRunListener);
    336     }
    337 }
    338