blob: 9b7478477116f71c5cc47d9944f2f2ebe1d2ee53 [file] [log] [blame]
/*
* Copyright (C) 2017 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.tradefed.testtype.suite;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import com.android.tradefed.build.DeviceBuildInfo;
import com.android.tradefed.build.IDeviceBuildInfo;
import com.android.tradefed.config.IConfiguration;
import com.android.tradefed.config.OptionSetter;
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.result.ITestInvocationListener;
import com.android.tradefed.targetprep.ITargetPreparer;
import com.android.tradefed.testtype.Abi;
import com.android.tradefed.testtype.IAbi;
import com.android.tradefed.testtype.IRemoteTest;
import com.android.tradefed.testtype.InstrumentationTest;
import com.android.tradefed.testtype.UiAutomatorTest;
import com.android.tradefed.util.AbiUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
/** Unit tests for {@link AtestRunner}. */
@RunWith(JUnit4.class)
public class AtestRunnerTest {
private static final String ABI = "armeabi-v7a";
private static final String TEST_NAME_FMT = ABI + " %s";
private static final String INSTRUMENTATION_TEST_NAME =
String.format(TEST_NAME_FMT, "tf/instrumentation");
private AtestRunner mSpyRunner;
private OptionSetter setter;
private IDeviceBuildInfo mBuildInfo;
private ITestDevice mMockDevice;
private String classA = "fully.qualified.classA";
private String classB = "fully.qualified.classB";
private String method1 = "method1";
@Before
public void setUp() throws Exception {
mSpyRunner = spy(new AtestRunner());
mBuildInfo = spy(new DeviceBuildInfo());
mMockDevice = mock(ITestDevice.class);
mSpyRunner.setBuild(mBuildInfo);
mSpyRunner.setDevice(mMockDevice);
// Hardcode the abis to avoid failures related to running the tests against a particular
// abi build of tradefed.
Set<IAbi> abis = new HashSet<>();
abis.add(new Abi(ABI, AbiUtils.getBitness(ABI)));
doReturn(abis).when(mSpyRunner).getAbis(mMockDevice);
doReturn(new File("some-dir")).when(mBuildInfo).getTestsDir();
}
@Test
public void testLoadTests_one() throws Exception {
setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("include-filter", "tf/fake");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
assertTrue(configMap.containsKey(String.format(TEST_NAME_FMT, "tf/fake")));
}
@Test
public void testLoadTests_two() throws Exception {
setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("include-filter", "tf/fake");
setter.setOptionValue("include-filter", "tf/func");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(2, configMap.size());
assertTrue(configMap.containsKey(String.format(TEST_NAME_FMT, "tf/fake")));
assertTrue(configMap.containsKey(String.format(TEST_NAME_FMT, "tf/func")));
}
@Test
public void testLoadTests_filter() throws Exception {
setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("include-filter", "tf/uiautomator");
setter.setOptionValue("atest-include-filter", "tf/uiautomator:" + classA);
setter.setOptionValue("atest-include-filter", "tf/uiautomator:" + classB + "#" + method1);
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
String testName = String.format(TEST_NAME_FMT, "tf/uiautomator");
assertTrue(configMap.containsKey(testName));
IConfiguration config = configMap.get(testName);
List<IRemoteTest> tests = config.getTests();
assertEquals(1, tests.size());
UiAutomatorTest test = (UiAutomatorTest) tests.get(0);
List<String> classFilters = new ArrayList<String>();
classFilters.add(classA);
classFilters.add(classB + "#" + method1);
assertEquals(classFilters, test.getClassNames());
}
@Test
public void testLoadTests_ignoreFilter() throws Exception {
setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "suite");
setter.setOptionValue("include-filter", "suite/base-suite1");
setter.setOptionValue("atest-include-filter", "suite/base-suite1:" + classA);
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
String testName = String.format(TEST_NAME_FMT, "suite/base-suite1");
assertTrue(configMap.containsKey(testName));
IConfiguration config = configMap.get(testName);
List<IRemoteTest> tests = config.getTests();
assertEquals(1, tests.size());
BaseTestSuite test = (BaseTestSuite) tests.get(0);
assertEquals(new HashSet<String>(), test.getIncludeFilter());
}
@Test
public void testWaitForDebugger() throws Exception {
OptionSetter setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("wait-for-debugger", "true");
setter.setOptionValue("include-filter", "tf/instrumentation");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
IRemoteTest test = config.getTests().get(0);
assertTrue(((InstrumentationTest) test).getDebug());
}
@Test
public void testdisableTargetPreparers() throws Exception {
OptionSetter setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("disable-target-preparers", "true");
setter.setOptionValue("include-filter", "tf/instrumentation");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
assertTrue(targetPreparer.isDisabled());
}
}
@Test
public void testdisableTargetPreparersUnset() throws Exception {
OptionSetter setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("include-filter", "tf/instrumentation");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
assertTrue(!targetPreparer.isDisabled());
}
}
@Test
public void testDisableTearDown() throws Exception {
OptionSetter setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("disable-teardown", "true");
setter.setOptionValue("include-filter", "tf/instrumentation");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
assertTrue(targetPreparer.isTearDownDisabled());
}
}
@Test
public void testDisableTearDownUnset() throws Exception {
OptionSetter setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("suite-config-prefix", "tf");
setter.setOptionValue("include-filter", "tf/instrumentation");
LinkedHashMap<String, IConfiguration> configMap = mSpyRunner.loadTests();
assertEquals(1, configMap.size());
IConfiguration config = configMap.get(INSTRUMENTATION_TEST_NAME);
for (ITargetPreparer targetPreparer : config.getTargetPreparers()) {
assertTrue(!targetPreparer.isTearDownDisabled());
}
}
@Test
public void testCreateModuleListener() throws Exception {
OptionSetter setter = new OptionSetter(mSpyRunner);
setter.setOptionValue("subprocess-report-port", "55555");
List<ITestInvocationListener> listeners = mSpyRunner.createModuleListeners();
assertEquals(1, listeners.size());
}
}