blob: d0f52304b2da7e948ba98616bddcdc1c38eab82f [file] [log] [blame]
/*
* 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 = "<TestPlan version=\"1.0\">\n"
+ "\t<Description>Demo test plan</Description>\n"
+ "\t\t<PlanSettings>\n"
+ "\t\t\t<RequiredDevice amount=\"" + 1 + "\"" + "/>\n"
+ "\t\t</PlanSettings>\n"
+ "\t<Entry uri=\""
+ appPackageName
+ "\"/>\n"
+ "</TestPlan>";
final String descriptionConfigStr = "<TestPackage name=\""
+ mTestPackageBinaryName+ "\" "
+ "appPackageName=\"" + appPackageName
+ "\" version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"" + runner + "\">\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName + "\"" + ">\n"
+ " <TestCase name=\"" + caseName + "\"" + " priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\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 = "<TestPlan version=\"1.0\">\n"
+ "\t<Description>Demo test plan</Description>\n"
+ "\t\t<PlanSettings>\n"
+ "\t\t\t<RequiredDevice amount=\"" + 1 + "\"" + "/>\n"
+ "\t\t</PlanSettings>\n"
+ "\t<Entry uri=\""
+ appPackageName
+ "\"/>\n"
+ "</TestPlan>";
final String descriptionConfigStr = "<TestPackage name=\""
+ mTestPackageBinaryName+ "\" "
+ "appPackageName=\"" + appPackageName
+ "\" version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"" + runner + "\">\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName + "\"" + ">\n"
+ " <TestCase name=\"" + caseName + "\"" + " priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
String planPath = HostConfig.getInstance().getPlanRepository()
.getPlanPath(mTmpPlanFileName);
createFile(testPlanConfigStr, planPath);
ArrayList<String> removedPkgList = new ArrayList<String>();
Collection<String> entries = TestPlan.getEntries(planPath, removedPkgList);
Iterator<String> 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 = "<TestPlan version=\"1.0\">\n"
+ "\t<Description>Demo test plan</Description>\n"
+ "\t\t<PlanSettings>\n"
+ "\t\t\t<RequiredDevice amount=\"" + 1 + "\"" + "/>\n"
+ "\t\t</PlanSettings>\n"
+ "\t<Entry uri=\""
+ appPackageName
+ "\"/>\n"
+ "</TestPlan>";
final String descriptionConfigStr = "<TestPackage name=\""
+ mTestPackageBinaryName + "\" "
+ "appPackageName=\"" + appPackageName
+ "\" targetNameSpace=\"" + targetNameSpace
+ "\" version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"" +runner + "\">\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName + "\"" + ">\n"
+ " <TestCase name=\"" + caseName + "\"" + " priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\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 = "<TestPlan version=\"1.0\">\n"
+ "<Description>Demo test plan</Description>\n"
+ "<PlanSettings>\n"
+ " <RequiredDevice amount=\"" + 1 + "\"" + "/>\n"
+ "</PlanSettings>\n"
+ "<Entry uri=\"" + appPackageName + "\"/>\n"
+ "</TestPlan>";
final String descriptionConfigStr = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestSuite name=\"TestSuiteName\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\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 = "<TestPlan version=\"1.0\">\n"
+ "<Description>Demo test plan</Description>\n"
+ "<PlanSettings>\n"
+ " <RequiredDevice amount=\"" + 1 + "\"" + "/>\n"
+ "</PlanSettings>\n"
+ " <Entry uri=\"" + appPackageName
+ "\" " + "exclude=\"" + excludedList + "\"/>\n"
+ "</TestPlan>";
final String descriptionConfigStr = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestSuite name=\"TestSuiteName\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testName2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestSuite name=\"TestSuiteName\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testName2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestSuite name=\"TestSuiteName\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testName2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testName2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testName2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " <Test name=\"testHello2\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\""
+ mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName1 + "\"" + ">\n"
+ " <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " <TestSuite name=\"" + suiteName2 + "\"" + ">\n"
+ " <TestCase name=\"" + caseName2 + "\"" + " priority=\"mandatory\">\n"
+ " <Test name=\"" + testName2 +"\" type=\"automatic\" />\n"
+ " <Test name=\"" + testName3 +"\" type=\"automatic\" />\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPackage name=\""
+ mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName1 + "\"" + ">\n"
+ " <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc" + "</Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " <TestSuite name=\"" + nestedSuiteName1 + "\"" + ">\n"
+ " <TestSuite name=\"" + nestedSuiteName2 + "\"" + ">\n"
+ " <TestCase name=\"" + caseName2 + "\"" + " priority=\"mandatory\">\n"
+ " <Test name=\"" + testName2 +"\" type=\"automatic\" />\n"
+ " <Test name=\"" + testName3 +"\" type=\"automatic\" />\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
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 = "<TestPlan version=\"1.0\">\n"
+ "\t<Description>Demo test plan</Description>\n"
+ "\t\t<PlanSettings>\n"
+ "\t\t\t<RequiredDevice amount=\"" + 2 + "\"" + "/>\n"
+ "\t\t</PlanSettings>\n"
+ "\t<Entry uri=\""
+ appPackageName
+ "\"/>\n"
+ "</TestPlan>";
final String descriptionConfigStr = "<TestPackage name=\"" + mTestPackageBinaryName +"\" "
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google.android.cts\"" + ">\n"
+ " <TestCase name=\"CtsTestHello\"" + " priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ "<TestPlan version=\"1.0\">\n"
+ "<PlanSettings/>\n"
+ "<Entry uri=\"com.google.android.cts.CtsTest\"/>\n"
+ "</TestPlan>";
final String package1 = "com.google.android.cts.CtsTest";
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(package1);
HashMap<String, ArrayList<String>> selectedResult =
new HashMap<String, ArrayList<String>>();
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 = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestSuite name=\"TestSuiteName\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
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 = "<TestPackage name=\""
+ mTestPackageBinaryName + "\" "
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" jarPath=\"" + jarPath
+ "\">\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>"
+ "something extracted from java doc" + "</Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\""
+ " type=\"automatic\"" + " HostController=\""
+ description + "\"" + "/>\n" + " </TestCase>\n"
+ " </TestSuite>\n" + "</TestPackage>\n";
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
HashMap<String, ArrayList<String>> results = new HashMap<String, ArrayList<String>>();
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);
}
}