/* * Copyright (C) 2008 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.cts; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.SAXException; import android.annotation.cts.Profile; import com.android.cts.TestDevice.DeviceParameterCollector; /** * Test the session builder. */ public class TestSessionBuilderTests extends CtsTestBase { private static final String mTmpPlanFileName = "plan"; private static final String ATTRIBUTE_DEVICE_ID = "deviceID"; private static final String ATTRIBUTE_BUILD_ID = "buildID"; private static final String ATTRIBUTE_BUILD_VERSION = "buildVersion"; private static final String ATTRIBUTE_BUILD_NAME = "buildName"; private String mTestPackageBinaryName = "CtsTestPackage"; /** {@inheritDoc} */ @Override public void tearDown() { HostConfig.getInstance().removeTestPacakges(); deleteTestPackage(mTestPackageBinaryName); super.tearDown(); } /** * Test building simple test session. */ public void testBuildSimpleSession() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts" + ".CtsTest"; final String suiteName = appPackageName; final String caseName = "CtsTestHello"; final String runner = "android.test.InstrumentationTestRunner"; final String serialNum = "serialNum"; final String buildID = "buildid"; final String buildName = "buildname"; final String buildVersion = "buildVersion"; final String testPlanConfigStr = "\n" + "\tDemo test plan\n" + "\t\t\n" + "\t\t\t\n" + "\t\t\n" + "\t\n" + ""; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(mTmpPlanFileName); createFile(testPlanConfigStr, planPath); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals(appPackageName, testPackage.getAppPackageName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); assertEquals(runner, testPackage.getInstrumentationRunner()); TestSuite testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getTestCases().size()); assertEquals(suiteName, testSuite.getFullName()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("automatic", test.getType()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); assertEquals(runner, test.getInstrumentationRunner()); // test build information DeviceParameterCollector deviceParam = new DeviceParameterCollector(); deviceParam.setSerialNumber(serialNum); deviceParam.setBuildId(buildID); deviceParam.setBuildVersion(buildVersion); deviceParam.setProductName(buildName); tsl.setDeviceInfo(deviceParam); Document doc = tsl.createResultDoc(); Node buildInfoNode = doc.getElementsByTagName("BuildInfo").item(0); assertEquals(serialNum, buildInfoNode.getAttributes().getNamedItem( ATTRIBUTE_DEVICE_ID).getNodeValue().trim()); assertEquals(buildID, buildInfoNode.getAttributes().getNamedItem( ATTRIBUTE_BUILD_ID).getNodeValue().trim()); assertEquals(buildVersion, buildInfoNode.getAttributes().getNamedItem( ATTRIBUTE_BUILD_VERSION).getNodeValue().trim()); assertEquals(buildName, buildInfoNode.getAttributes().getNamedItem( ATTRIBUTE_BUILD_NAME).getNodeValue().trim()); deleteTestPackage(mTestPackageBinaryName); } /** * Test getting and removing entries from plan file. */ public void testGetAndRemoveEntriesFromPlanFile() throws UnknownCommandException, CommandNotFoundException, Exception { final String appPackageName = "com.google.android.cts"; final String suiteName = appPackageName; final String caseName = "CtsTestHello"; final String runner = "android.test.InstrumentationTestRunner"; final String testPlanConfigStr = "\n" + "\tDemo test plan\n" + "\t\t\n" + "\t\t\t\n" + "\t\t\n" + "\t\n" + ""; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); String planPath = HostConfig.getInstance().getPlanRepository() .getPlanPath(mTmpPlanFileName); createFile(testPlanConfigStr, planPath); ArrayList removedPkgList = new ArrayList(); Collection entries = TestPlan.getEntries(planPath, removedPkgList); Iterator it = entries.iterator(); assertEquals(1, entries.size()); assertEquals(appPackageName, it.next()); ConsoleUi cui = new ConsoleUi(TestHost.getInstance()); String cmdLine = CTSCommand.REMOVE + " " + "-p" + " " + appPackageName; cui.processCommand(CommandParser.parse(cmdLine)); entries = TestPlan.getEntries(planPath, removedPkgList); assertEquals(1, removedPkgList.size()); deleteTestPackage(mTestPackageBinaryName); } /** * Test validating package name. */ public void testValidatePackageName() throws IOException { final String packageName = "com.google.android.testname"; String testPackageXmlFilePath = HostConfig.getInstance().getCaseRepository().getXmlPath(packageName); String testpackageAPKFilePath = HostConfig.getInstance().getCaseRepository().getApkPath(packageName); HostConfig.getInstance().removeTestPacakges(); createTestPackage("", packageName); assertEquals(true, TestPlan.isValidPackageName(packageName)); deleteFile(testPackageXmlFilePath); assertEquals(false, TestPlan.isValidPackageName(packageName)); deleteFile(testpackageAPKFilePath); assertEquals(false, TestPlan.isValidPackageName(packageName)); } /** * Test building test session with dependency. */ public void testBuildSessionWithDependency() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, NoSuchAlgorithmException { final String targetNameSpace = "i don't want to be the target!"; final String appPackageName = "com.google.android.cts"; final String suiteName = appPackageName + ".CtsTest"; final String caseName = "CtsTestHello"; final String runner = "android.test.InstrumentationTestRunner"; final String testPlanConfigStr = "\n" + "\tDemo test plan\n" + "\t\t\n" + "\t\t\t\n" + "\t\t\n" + "\t\n" + ""; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(mTmpPlanFileName); createFile(testPlanConfigStr, planPath); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals(targetNameSpace, testPackage.getTargetNameSpace()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); assertEquals(runner, testPackage.getInstrumentationRunner()); TestSuite testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getTestCases().size()); assertEquals(suiteName, testSuite.getFullName()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("automatic", test.getType()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); assertEquals(runner, test.getInstrumentationRunner()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building test session from embedded suites. */ public void testBuildSessionFromEmbeddedSuites() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String caseName = "CtsTestHello"; final String testName = "testHello"; final String testPlanConfigStr = "\n" + "Demo test plan\n" + "\n" + " \n" + "\n" + "\n" + ""; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(mTmpPlanFileName); createFile(testPlanConfigStr, planPath); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getSubSuites().size()); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google", testSuite.getFullName()); assertEquals("com.google", testSuite.getName()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("com.google.CtsTestHello#testHello", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(testName, test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); testSuite = testSuite.getSubSuites().iterator().next(); assertEquals(0, testSuite.getSubSuites().size()); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google.TestSuiteName", testSuite.getFullName()); assertEquals("TestSuiteName", testSuite.getName()); testCase = testSuite.getTestCases().iterator().next(); assertEquals("TestCaseName", testCase.getName()); assertEquals("mandatory", testCase.getPriority()); test = testCase.getTests().iterator().next(); assertEquals("com.google.TestSuiteName.TestCaseName#testName", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals("testName", test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test loading plan with excluded list from the xml file. */ public void testExcludingFromXmlFile() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String caseName = "CtsTestHello"; final String testName = "testHello"; final String excludedList = "com.google.TestSuiteName"; final String testPlanConfigStr = "\n" + "Demo test plan\n" + "\n" + " \n" + "\n" + " \n" + ""; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(mTmpPlanFileName); createFile(testPlanConfigStr, planPath); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(0, testSuite.getSubSuites().size()); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google", testSuite.getFullName()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("com.google.CtsTestHello#testHello", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(testName, test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building and loading plan with excluding list of embedded suite. */ public void testExcludingEmbeddedSuite() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String caseName = "CtsTestHello"; final String testName = "testHello"; final String excludedList = "com.google.TestSuiteName"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(0, testSuite.getSubSuites().size()); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google", testSuite.getFullName()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("com.google.CtsTestHello#testHello", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(testName, test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building and loading plan with excluding list of the top suite. */ public void testExcludingTopSuite() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String excludedList = "com.google"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(0, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building and loading plan with excluded list of test case. */ public void testExcludingTestCase() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String caseName = "CtsTestHello"; final String testName = "testHello"; final String excludedList = "com.google.TestCaseName"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google", testSuite.getFullName()); assertEquals(1, testSuite.getTestCases().size()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("com.google.CtsTestHello#testHello", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(testName, test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building and loading plan with excluded list of all of the test cases. */ public void testExcludingAllTestCases() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String excludedList = "com.google.TestCaseName;com.google.CtsTestHello"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(0, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); assertEquals(0, testPackage.getTestSuites().size()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building and loading plan with excluded list of test. */ public void testExcludingTest() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String caseName = "CtsTestHello"; final String testName = "testHello"; final String excludedList = "com.google.CtsTestHello#testHello2"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google", testSuite.getFullName()); assertEquals(1, testSuite.getTestCases().size()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("com.google.CtsTestHello#testHello", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(testName, test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building and loading plan with excluded list of all of the tests. */ public void testExcludingAllTests() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String excludedList = "com.google.CtsTestHello#testHello;com.google.CtsTestHello#testHello2;"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(0, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); deleteTestPackage(mTestPackageBinaryName); } /** * Test creating plan with excluded list. */ public void testCreatePlanWithExcludedList() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException{ final String appPackageName = "com.google.android.cts"; final String suiteName1 = appPackageName + "." + "SuiteName1"; final String caseName1 = "CtsTestHello"; final String testName1 = "testHello"; final String caseName2 = "CtsTestHello2"; final String testName2 = "testHello2"; final String testName3 = "testHello3"; final String suiteName2 = "com.google.android.cts.CtsTest.SuiteName2"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); String excludedList = suiteName1 + "." + caseName1 + TestPlan.EXCLUDE_SEPARATOR; excludedList += suiteName2 + "." + caseName2 + Test.METHOD_SEPARATOR + testName2; list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getTestCases().size()); assertEquals(suiteName2, testSuite.getFullName()); assertEquals(1, testSuite.getTestCases().size()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName2, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); assertEquals(1, testCase.getTests().size()); Test test = testCase.getTests().iterator().next(); String testName = suiteName2 + "." + caseName2 + Test.METHOD_SEPARATOR + testName3; assertEquals(testName, test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test creating plan with excluded list of nested suites. */ public void testCreatePlanWithExcludedListForNestedSuite() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException{ final String appPackageName = "com.google.android.cts"; final String fullName = mTestPackageBinaryName + ".CtsTest"; final String suiteName1 = fullName + "." + "SuiteName1"; final String caseName1 = "CtsTestHello"; final String testName1 = "testHello"; final String caseName2 = "CtsTestHello2"; final String testName2 = "testHello2"; final String testName3 = "testHello3"; final String nestedSuiteName1 = "com.google"; final String nestedSuiteName2 = "android.cts.CtsTest.SuiteName2"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); ArrayList list = new ArrayList(); String excludedList = suiteName1 + "." + caseName1 + TestPlan.EXCLUDE_SEPARATOR; excludedList += nestedSuiteName1 + "." + nestedSuiteName2 + "." + caseName2 + Test.METHOD_SEPARATOR + testName2; list.add(excludedList); results.put(appPackageName, list); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(0, testSuite.getTestCases().size()); assertEquals(nestedSuiteName1, testSuite.getFullName()); assertEquals(1, testSuite.getSubSuites().size()); TestSuite testSubSuite = testSuite.getSubSuites().iterator().next(); assertEquals(1, testSubSuite.getTestCases().size()); String suiteName = nestedSuiteName1 + "." + nestedSuiteName2; assertEquals(suiteName, testSubSuite.getFullName()); assertEquals(1, testSubSuite.getTestCases().size()); TestCase testCase = testSubSuite.getTestCases().iterator().next(); assertEquals(caseName2, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); assertEquals(1, testCase.getTests().size()); Test test = testCase.getTests().iterator().next(); String testName = nestedSuiteName1 + "." + nestedSuiteName2 + "." +caseName2 + Test.METHOD_SEPARATOR + testName3; assertEquals(testName, test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test building plan of protocol type. */ public void testBuildProtocolPlan() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String testPlanConfigStr = "\n" + "\tDemo test plan\n" + "\t\t\n" + "\t\t\t\n" + "\t\t\n" + "\t\n" + ""; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); String planPath = HostConfig.getInstance().getPlanRepository() .getPlanPath(mTmpPlanFileName); createFile(testPlanConfigStr, planPath); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(2, ts.getNumOfRequiredDevices()); TestSessionLog tsl = ts.getSessionLog(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google.android.cts", testSuite.getFullName()); TestCase testCase = testSuite.getTestCases().iterator().next(); Test test = testCase.getTests().iterator().next(); assertEquals("testHello", test.getName()); assertEquals("automatic", test.getType()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test serializing the test plan. */ public void testSerialize() throws Exception { final String srcStr = "\n" + "\n" + "\n" + "\n" + ""; final String package1 = "com.google.android.cts.CtsTest"; ArrayList packageNames = new ArrayList(); packageNames.add(package1); HashMap> selectedResult = new HashMap>(); selectedResult.put(package1, null); HostConfig.getInstance().removeTestPacakges(); String planName = "plan_test"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, selectedResult); File file = new File(planPath); assertTrue(file.exists()); assertTrue(file.isFile()); FileReader dstInput = new FileReader(file); BufferedReader dstBufReader = new BufferedReader(dstInput); char[] resChars = new char[1024]; dstBufReader.read(resChars); assertEquals(srcStr, new String(resChars).trim()); dstBufReader.close(); deleteFile(planPath); } /** * Test loading plan with sub suites. */ public void testLoadPlanWithSubSuite() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String fullName = mTestPackageBinaryName + ".CtsTest"; final String caseName = "CtsTestHello"; final String testName = "testHello"; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + "something extracted from java doc" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; HostConfig.getInstance().removeTestPacakges(); createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); results.put(appPackageName, null); String planName = "plan_test_excluding"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); assertEquals(1, ts.getNumOfRequiredDevices()); ts.getSessionLog().setStartTime(System.currentTimeMillis()); TestSessionLog tsl = ts.getSessionLog(); tsl.createResultDoc(); assertEquals(1, tsl.getTestPackages().size()); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(1, testPackage.getTestSuites().size()); assertEquals(mTestPackageBinaryName, testPackage.getAppBinaryName()); assertEquals("1.0", testPackage.getVersion()); assertEquals("Android 1.0", testPackage.getAndroidVersion()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); assertEquals(1, testSuite.getSubSuites().size()); assertEquals(1, testSuite.getTestCases().size()); assertEquals("com.google", testSuite.getFullName()); TestCase testCase = testSuite.getTestCases().iterator().next(); assertEquals(caseName, testCase.getName()); assertEquals("mandatory", testCase.getPriority()); Test test = testCase.getTests().iterator().next(); assertEquals("com.google.CtsTestHello#testHello", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals(testName, test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); TestSuite subTestSuite; subTestSuite = testSuite.getSubSuites().iterator().next(); assertEquals(1, subTestSuite.getTestCases().size()); assertEquals("com.google.TestSuiteName", subTestSuite.getFullName()); assertEquals("TestSuiteName", subTestSuite.getName()); testCase = subTestSuite.getTestCases().iterator().next(); assertEquals("TestCaseName", testCase.getName()); assertEquals("mandatory", testCase.getPriority()); test = testCase.getTests().iterator().next(); assertEquals("com.google.TestSuiteName.TestCaseName#testName1", test.getFullName()); assertEquals("automatic", test.getType()); assertEquals("testName1", test.getName()); assertEquals(CtsTestResult.CODE_NOT_EXECUTED, test.getResult().getResultCode()); deleteTestPackage(mTestPackageBinaryName); } /** * Test validating test controller. */ public void testValidateTestController() { String jarPath = "test.jar"; String packageName = "com.android.tests"; String className = "ConsoleTests"; String methodName = "testMethod"; TestController controller = new TestController(null, null, null, null); assertFalse(controller.isValid()); controller = new TestController(jarPath, null, null, null); assertFalse(controller.isValid()); controller = new TestController(null, packageName, null, null); assertFalse(controller.isValid()); controller = new TestController(null, null, className, null); assertFalse(controller.isValid()); controller = new TestController(null, null, null, methodName); assertFalse(controller.isValid()); controller = new TestController("", "", "", ""); assertFalse(controller.isValid()); controller = new TestController("", packageName, className, methodName); assertFalse(controller.isValid()); controller = new TestController(jarPath, "", className, methodName); assertFalse(controller.isValid()); controller = new TestController(jarPath, packageName, "", methodName); assertFalse(controller.isValid()); controller = new TestController(jarPath, packageName, className, ""); assertFalse(controller.isValid()); controller = new TestController(jarPath, packageName, className, methodName); assertTrue(controller.isValid()); } /** * Test loading plan with test controller. */ public void testLoadPlanWithTestController() throws IOException, ParserConfigurationException, SAXException, TestPlanNotFoundException, TestNotFoundException, TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException { final String appPackageName = "com.google.android.cts"; final String jarPath = "test.jar"; final String controllerPackageName = "com.android.tests"; final String className = "ConsoleTests"; final String methodName = "testMethod"; final String description = controllerPackageName + "." + className + Test.METHOD_SEPARATOR + methodName; final String descriptionConfigStr = "\n" + " something extracted from java doc\n" + " \n" + " \n" + " " + "something extracted from java doc" + "\n" + " \n" + " \n" + " \n" + " \n" + "\n"; createTestPackage(descriptionConfigStr, mTestPackageBinaryName); HostConfig.getInstance().loadTestPackages(); ArrayList packageNames = new ArrayList(); packageNames.add(appPackageName); HashMap> results = new HashMap>(); results.put(appPackageName, null); String planName = "plan_test"; String planPath = HostConfig.getInstance().getPlanRepository().getPlanPath(planName); TestSessionBuilder.getInstance().serialize(planName, packageNames, results); TestSession ts = TestSessionBuilder.getInstance().build(planPath, Profile.ALL); ts.getSessionLog().setStartTime(System.currentTimeMillis()); TestSessionLog tsl = ts.getSessionLog(); TestPackage testPackage = tsl.getTestPackages().iterator().next(); assertEquals(jarPath, testPackage.getJarPath()); TestSuite testSuite; testSuite = testPackage.getTestSuites().iterator().next(); TestCase testCase = testSuite.getTestCases().iterator().next(); Test test = testCase.getTests().iterator().next(); assertEquals(controllerPackageName, test.getTestController().getPackageName()); assertEquals(className, test.getTestController().getClassName()); assertEquals(methodName, test.getTestController().getMethodName()); deleteTestPackage(mTestPackageBinaryName); } }