Home | History | Annotate | Download | only in suite
      1 /*
      2  * Copyright (C) 2017 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.suite;
     17 
     18 import static org.junit.Assert.assertEquals;
     19 import static org.junit.Assert.assertTrue;
     20 import static org.mockito.Mockito.doReturn;
     21 import static org.mockito.Mockito.mock;
     22 import static org.mockito.Mockito.spy;
     23 
     24 import com.android.tradefed.build.DeviceBuildInfo;
     25 import com.android.tradefed.build.IDeviceBuildInfo;
     26 import com.android.tradefed.config.IConfiguration;
     27 import com.android.tradefed.config.OptionSetter;
     28 import com.android.tradefed.device.ITestDevice;
     29 import com.android.tradefed.result.ITestInvocationListener;
     30 import com.android.tradefed.targetprep.ITargetPreparer;
     31 import com.android.tradefed.testtype.Abi;
     32 import com.android.tradefed.testtype.IAbi;
     33 import com.android.tradefed.testtype.IRemoteTest;
     34 import com.android.tradefed.testtype.InstrumentationTest;
     35 import com.android.tradefed.testtype.UiAutomatorTest;
     36 import com.android.tradefed.util.AbiUtils;
     37 
     38 import org.junit.Before;
     39 import org.junit.Test;
     40 import org.junit.runner.RunWith;
     41 import org.junit.runners.JUnit4;
     42 import java.io.File;
     43 import java.util.ArrayList;
     44 import java.util.HashSet;
     45 import java.util.LinkedHashMap;
     46 import java.util.List;
     47 import java.util.Set;
     48 
     49 /** Unit tests for {@link AtestRunner}. */
     50 @RunWith(JUnit4.class)
     51 public class AtestRunnerTest {
     52 
     53     private static final String ABI = "armeabi-v7a";
     54     private static final String TEST_NAME_FMT = ABI + " %s";
     55     private static final String INSTRUMENTATION_TEST_NAME =
     56             String.format(TEST_NAME_FMT, "tf/instrumentation");
     57 
     58     private AtestRunner mSpyRunner;
     59     private OptionSetter setter;
     60     private IDeviceBuildInfo mBuildInfo;
     61     private ITestDevice mMockDevice;
     62     private String classA = "fully.qualified.classA";
     63     private String classB = "fully.qualified.classB";
     64     private String method1 = "method1";
     65 
     66     @Before
     67     public void setUp() throws Exception {
     68         mSpyRunner = spy(new AtestRunner());
     69         mBuildInfo = spy(new DeviceBuildInfo());
     70         mMockDevice = mock(ITestDevice.class);
     71         mSpyRunner.setBuild(mBuildInfo);
     72         mSpyRunner.setDevice(mMockDevice);
     73 
     74         // Hardcode the abis to avoid failures related to running the tests against a particular
     75         // abi build of tradefed.
     76         Set<IAbi> abis = new HashSet<>();
     77         abis.add(new Abi(ABI, AbiUtils.getBitness(ABI)));
     78         doReturn(abis).when(mSpyRunner).getAbis(mMockDevice);
     79         doReturn(new File("some-dir")).when(mBuildInfo).getTestsDir();
     80     }
     81 
     82     @Test
     83     public void testLoadTests_one() throws Exception {
     84         setter = new OptionSetter(mSpyRunner);
     85         setter.setOptionValue("include-filter", "tf/fake");
     86         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
     87         assertEquals(1, configMap.size());
     88         assertTrue(configMap.containsKey(String.format(TEST_NAME_FMT, "tf/fake")));
     89     }
     90 
     91     @Test
     92     public void testLoadTests_two() throws Exception {
     93         setter = new OptionSetter(mSpyRunner);
     94         setter.setOptionValue("include-filter", "tf/fake");
     95         setter.setOptionValue("include-filter", "tf/func");
     96         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
     97         assertEquals(2, configMap.size());
     98         assertTrue(configMap.containsKey(String.format(TEST_NAME_FMT, "tf/fake")));
     99         assertTrue(configMap.containsKey(String.format(TEST_NAME_FMT, "tf/func")));
    100     }
    101 
    102     @Test
    103     public void testLoadTests_filter() throws Exception {
    104         setter = new OptionSetter(mSpyRunner);
    105         setter.setOptionValue("include-filter", "tf/uiautomator");
    106         setter.setOptionValue("atest-include-filter", "tf/uiautomator:" + classA);
    107         setter.setOptionValue("atest-include-filter", "tf/uiautomator:" + classB + "#" + method1);
    108         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    109         assertEquals(1, configMap.size());
    110         String testName = String.format(TEST_NAME_FMT, "tf/uiautomator");
    111         assertTrue(configMap.containsKey(testName));
    112         IConfiguration config = configMap.get(testName);
    113         List<IRemoteTest> tests = config.getTests();
    114         assertEquals(1, tests.size());
    115         UiAutomatorTest test = (UiAutomatorTest) tests.get(0);
    116         List<String> classFilters = new ArrayList<String>();
    117         classFilters.add(classA);
    118         classFilters.add(classB + "#" + method1);
    119         assertEquals(classFilters, test.getClassNames());
    120     }
    121 
    122     @Test
    123     public void testLoadTests_ignoreFilter() throws Exception {
    124         setter = new OptionSetter(mSpyRunner);
    125         setter.setOptionValue("include-filter", "suite/base-suite1");
    126         setter.setOptionValue("atest-include-filter", "suite/base-suite1:" + classA);
    127         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    128         assertEquals(1, configMap.size());
    129         String testName = String.format(TEST_NAME_FMT, "suite/base-suite1");
    130         assertTrue(configMap.containsKey(testName));
    131         IConfiguration config = configMap.get(testName);
    132         List<IRemoteTest> tests = config.getTests();
    133         assertEquals(1, tests.size());
    134         BaseTestSuite test = (BaseTestSuite) tests.get(0);
    135         assertEquals(new HashSet<String>(), test.getIncludeFilter());
    136     }
    137 
    138     @Test
    139     public void testWaitForDebugger() throws Exception {
    140         OptionSetter setter = new OptionSetter(mSpyRunner);
    141         setter.setOptionValue("wait-for-debugger", "true");
    142         setter.setOptionValue("include-filter", "tf/instrumentation");
    143         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    144         assertEquals(1, configMap.size());
    145         IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
    146         IRemoteTest test = config.getTests().get(0);
    147         assertTrue(((InstrumentationTest) test).getDebug());
    148     }
    149 
    150     @Test
    151     public void testdisableTargetPreparers() throws Exception {
    152         OptionSetter setter = new OptionSetter(mSpyRunner);
    153         setter.setOptionValue("disable-target-preparers", "true");
    154         setter.setOptionValue("include-filter", "tf/instrumentation");
    155         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    156         assertEquals(1, configMap.size());
    157         IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
    158         for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
    159             assertTrue(targetPreparer.isDisabled());
    160         }
    161     }
    162 
    163     @Test
    164     public void testdisableTargetPreparersUnset() throws Exception {
    165         OptionSetter setter = new OptionSetter(mSpyRunner);
    166         setter.setOptionValue("include-filter", "tf/instrumentation");
    167         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    168         assertEquals(1, configMap.size());
    169         IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
    170         for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
    171             assertTrue(!targetPreparer.isDisabled());
    172         }
    173     }
    174 
    175     @Test
    176     public void testDisableTearDown() throws Exception {
    177         OptionSetter setter = new OptionSetter(mSpyRunner);
    178         setter.setOptionValue("disable-teardown", "true");
    179         setter.setOptionValue("include-filter", "tf/instrumentation");
    180         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    181         IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
    182         for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
    183             assertTrue(targetPreparer.isTearDownDisabled());
    184         }
    185     }
    186 
    187     @Test
    188     public void testDisableTearDownUnset() throws Exception {
    189         OptionSetter setter = new OptionSetter(mSpyRunner);
    190         setter.setOptionValue("include-filter", "tf/instrumentation");
    191         LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
    192         assertEquals(1, configMap.size());
    193         IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
    194         for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
    195             assertTrue(!targetPreparer.isTearDownDisabled());
    196         }
    197     }
    198 
    199     @Test
    200     public void testCreateModuleListener() throws Exception {
    201         OptionSetter setter = new OptionSetter(mSpyRunner);
    202         setter.setOptionValue("subprocess-report-port", "55555");
    203         List<ITestInvocationListener> listeners = mSpyRunner.createModuleListeners();
    204         assertEquals(1, listeners.size());
    205     }
    206 }
    207