• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.cts;
18 
19 import java.io.BufferedReader;
20 import java.io.IOException;
21 import java.io.InputStreamReader;
22 import java.security.NoSuchAlgorithmException;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.List;
28 
29 import javax.xml.parsers.ParserConfigurationException;
30 import javax.xml.transform.TransformerException;
31 import javax.xml.transform.TransformerFactoryConfigurationError;
32 
33 /**
34  * Test the test plan builder.
35  *
36  */
37 public class TestPlanBuilderTests extends CtsTestBase {
38     public static boolean DEBUG = false;
39 
40     private String mTestPackageBinaryName = "CtsTestPackage";
41 
42     /** {@inheritDoc} */
43     @Override
tearDown()44     public void tearDown() {
45         HostConfig.getInstance().removeTestPacakges();
46         deleteTestPackage(mTestPackageBinaryName);
47 
48         super.tearDown();
49     }
50 
51     /**
52      * Test getting test suite name list contained within a test package.
53      */
testGetTestSuiteNames()54     public void testGetTestSuiteNames() throws IOException, NoSuchAlgorithmException {
55         final String appPackageName = "com.google.android.cts";
56         final String fullName = mTestPackageBinaryName + ".CtsTest";
57         final String caseName = "CtsTestHello";
58         final String testName = "testHello";
59 
60         final String descriptionConfigStr = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
61                 + " appPackageName=\"" + appPackageName + "\""
62                 + " version=\"1.0\" AndroidFramework=\"Android 1.0\""
63                 + " runner=\"android.test.InstrumentationTestRunner\" >\n"
64                 + "  <Description>something extracted from java doc</Description>\n"
65                 + "  <TestSuite name=\"com.google\">\n"
66                 + "     <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
67                 + "         <Description>" + "something extracted from java doc"
68                 + "         </Description>\n"
69                 + "         <!-- Test Methods -->\n"
70                 + "         <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
71                 + "     </TestCase>\n"
72                 + "     <TestSuite name=\"TestSuiteName\">\n"
73                 + "         <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
74                 + "             <Description>" + "something extracted from java doc"
75                 + "             </Description>\n"
76                 + "             <!-- Test Methods -->\n"
77                 + "             <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
78                 + "         </TestCase>\n"
79                 + "     </TestSuite>\n"
80                 + "  </TestSuite>\n"
81                 + "</TestPackage>\n";
82 
83         HostConfig.getInstance().removeTestPacakges();
84         createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
85 
86         HostConfig.getInstance().loadTestPackages();
87         Collection<TestPackage> testPackages = HostConfig.getInstance().getTestPackages();
88         assertEquals(1, testPackages.size());
89         TestPackage testPackage = testPackages.iterator().next();
90 
91         String suiteFullName = "com.google";
92         TestSuite suite = testPackage.getTestSuiteByName(suiteFullName);
93         assertEquals(suiteFullName, suite.getFullName());
94 
95         String caseFullName = "com.google.CtsTestHello";
96         TestCase cazz = testPackage.getTestCaseByName(caseFullName);
97         assertEquals(caseFullName, cazz.getFullName());
98 
99         List<String> testNames = testPackage.getAllTestNames(caseFullName);
100         String testFullName = "com.google.CtsTestHello#testHello";
101         assertEquals(1, testNames.size());
102         assertEquals(testFullName, testNames.get(0));
103 
104         suiteFullName = "com.google.TestSuiteName";
105         suite = testPackage.getTestSuiteByName(suiteFullName);
106         assertEquals(suiteFullName, suite.getFullName());
107 
108         caseFullName = "com.google.TestSuiteName.TestCaseName";
109         cazz = testPackage.getTestCaseByName(caseFullName);
110         assertEquals(caseFullName, cazz.getFullName());
111 
112         testNames = testPackage.getAllTestNames(caseFullName);
113         testFullName = "com.google.TestSuiteName.TestCaseName#testName1";
114         assertEquals(1, testNames.size());
115         assertEquals(testFullName, testNames.get(0));
116     }
117 
118     /**
119      * Test building test plan.
120      */
testPlanBuilder()121     public void testPlanBuilder() throws IOException,
122             ParserConfigurationException,
123             TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException {
124 
125         if (DEBUG) {
126             final String appPackageName = "com.google";
127             final String suiteName1 = "com.google.SuiteName1";
128             final String caseName1 = "CtsTestHello";
129             final String testName1 = "testHello";
130 
131             final String cName2 = "CtsTestHello2";
132             final String testName2 = "testHello2";
133             final String testName3 = "testHello3";
134             final String testName4 = "testHello4";
135             final String testName5 = "testHello5";
136             final String nestedSuiteName1 = "com.google";
137             final String nestedSuiteName2 = "CtsTest.SuiteName2";
138 
139             final String descriptionConfigStr =
140                     "<TestPackage name=\"" + mTestPackageBinaryName + "\""
141                     + " appPackageName=\"" + appPackageName + "\""
142                     + " version=\"1.0\" AndroidFramework=\"Android 1.0\""
143                     + " runner=\"android.test.InstrumentationTestRunner\" >\n"
144                     + " <Description>something extracted from java doc</Description>\n"
145                     + " <TestSuite name=\"" + suiteName1 + "\"" + ">\n"
146                     + "     <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
147                     + "         <Description>" + "something extracted from java doc"
148                     + "         </Description>\n"
149                     + "         <!-- Test Methods -->\n"
150                     + "         <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
151                     + "     </TestCase>\n"
152                     + " </TestSuite>\n"
153                     + " <TestSuite name=\"" + nestedSuiteName1+ "\"" + ">\n"
154                     + "     <TestSuite name=\"" + nestedSuiteName2+ "\"" + ">\n"
155                     + "         <TestCase name=\"" + cName2 + "\"" + " priority=\"mandatory\">\n"
156                     + "             <Test name=\"" + testName2 +"\" type=\"automatic\" />\n"
157                     + "             <Test name=\"" + testName3 +"\" type=\"automatic\" />\n"
158                     + "             <Test name=\"" + testName4 +"\" type=\"automatic\" />\n"
159                     + "             <Test name=\"" + testName5 +"\" type=\"automatic\" />\n"
160                     + "         </TestCase>\n"
161                     + "     </TestSuite>\n"
162                     + " </TestSuite>\n"
163                     + "</TestPackage>\n";
164 
165             createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
166             HostConfig.getInstance().loadTestPackages();
167             ArrayList<String> packageNames = new ArrayList<String>();
168             packageNames.add(appPackageName);
169             PlanBuilder planBuilder = new PlanBuilder(packageNames);
170             BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
171             planBuilder.setInputStream(in);
172             HashMap<String, ArrayList<String>> results = planBuilder.doSelect();
173             String planName = "plan_test";
174             if (results != null) {
175                 Log.i("result=" + results.toString());
176                 ArrayList<String> excludedList = results.get(appPackageName);
177                 if (excludedList != null) {
178                     for(String str : excludedList) {
179                         Log.i(str);
180                     }
181                 } else {
182                     Log.i("Nothing is excluded at all!");
183                 }
184 
185                 String planPath =
186                               HostConfig.getInstance().getPlanRepository().getPlanPath(planName);
187                 TestSessionBuilder.getInstance().serialize(planName, packageNames, results);
188                 Log.i("planPath=" + planPath);
189             } else {
190                 Log.i("Selected nothing for the plan of "
191                         + planName + ". The plan is not created!");
192             }
193         }
194     }
195 
196     /**
197      * Test get excluded list.
198      */
testGetExcludedList()199     public void testGetExcludedList() throws IOException,
200             TransformerFactoryConfigurationError, NoSuchAlgorithmException {
201 
202         final String appPackageName = "com.google";
203         final String suiteName1 = "com.google.SuiteName1";
204         final String caseName1 = "CtsTestHello";
205         final String testName1 = "testHello";
206 
207         final String cName2 = "CtsTestHello2";
208         final String testName2 = "testHello2";
209         final String testName3 = "testHello3";
210         final String testName4 = "testHello4";
211         final String testName5 = "testHello5";
212         final String nestedSuiteName1 = "com.google";
213         final String nestedSuiteName2 = "CtsTest.SuiteName2";
214 
215         final String descriptionConfigStr =
216                     "<TestPackage name=\"" + mTestPackageBinaryName + "\""
217                     + " appPackageName=\"" + appPackageName + "\""
218                     + " version=\"1.0\" AndroidFramework=\"Android 1.0\""
219                     + " runner=\"android.test.InstrumentationTestRunner\" >\n"
220                     + " <Description>something extracted from java doc</Description>\n"
221                     + " <TestSuite name=\"" + suiteName1 + "\"" + ">\n"
222                     + "     <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
223                     + "         <Description>" + "something extracted from java doc"
224                     + "         </Description>\n"
225                     + "         <!-- Test Methods -->\n"
226                     + "         <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
227                     + "     </TestCase>\n"
228                     + " </TestSuite>\n"
229                     + " <TestSuite name=\"" + nestedSuiteName1+ "\"" + ">\n"
230                     + "     <TestSuite name=\"" + nestedSuiteName2+ "\"" + ">\n"
231                     + "         <TestCase name=\"" + cName2 + "\"" + " priority=\"mandatory\">\n"
232                     + "             <Test name=\"" + testName2 +"\" type=\"automatic\" />\n"
233                     + "             <Test name=\"" + testName3 +"\" type=\"automatic\" />\n"
234                     + "         </TestCase>\n"
235                     + "     </TestSuite>\n"
236                     + "     <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
237                     + "         <Description>" + "something extracted from java doc"
238                     + "         </Description>\n"
239                     + "         <!-- Test Methods -->\n"
240                     + "         <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
241                     + "     </TestCase>\n"
242                     + " </TestSuite>\n"
243                     + "</TestPackage>\n";
244 
245         createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
246         HostConfig hf = HostConfig.getInstance();
247         hf.loadTestPackages();
248         TestPackage pkg = hf.getTestPackage(appPackageName);
249         assertNotNull(pkg);
250         String caseOneName = suiteName1 + "." + caseName1;
251         String caseTwoName = nestedSuiteName1 + "." + nestedSuiteName2 + "." + cName2;
252         Collection<Test> tests = pkg.getTests();
253         assertEquals(4, tests.size());
254         Iterator<Test> iterator = tests.iterator();
255         Test test1 = iterator.next();
256         Test test2 = iterator.next();
257         Test test3 = iterator.next();
258         Test test4 = iterator.next();
259         ArrayList<String> excludedList = null;
260 
261         //scenario 1: all tests are not executed and get excluded list with notExecuted
262         excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
263         assertNotNull(excludedList);
264         assertEquals(0, excludedList.size());
265 
266         //scenario 2: all tests are not executed and get excluded list with timeout
267         excludedList = pkg.getExcludedList(CtsTestResult.STR_TIMEOUT);
268         assertNull(excludedList);
269 
270         //scenario 3: all tests are not executed and get excluded list with nothing
271         excludedList = pkg.getExcludedList(null);
272         assertNotNull(excludedList);
273         assertEquals(0, excludedList.size());
274 
275         //scenario 4: not all all tests are executed and get excluded list with notExecuted
276         test2.setResult(new CtsTestResult(CtsTestResult.CODE_PASS, null, null));
277         excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
278         assertNotNull(excludedList);
279         assertEquals(1, excludedList.size());
280         assertEquals(test2.getFullName(), excludedList.get(0));
281         test2.setResult(new CtsTestResult(CtsTestResult.CODE_NOT_EXECUTED, null, null));
282 
283         //scenario 5: excluded a whole suite
284         test1.setResult(new CtsTestResult(CtsTestResult.CODE_PASS, null, null));
285         excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
286         assertNotNull(excludedList);
287         assertEquals(1, excludedList.size());
288         assertEquals(suiteName1, excludedList.get(0));
289         test1.setResult(new CtsTestResult(CtsTestResult.CODE_NOT_EXECUTED, null, null));
290 
291         //scenario 6: excluded the test case directly under the embedded test suite
292         String caseName = nestedSuiteName1 + "." + caseName1;
293         test4.setResult(new CtsTestResult(CtsTestResult.CODE_PASS, null, null));
294         excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
295         assertNotNull(excludedList);
296         assertEquals(1, excludedList.size());
297         assertEquals(caseName, excludedList.get(0));
298         test4.setResult(new CtsTestResult(CtsTestResult.CODE_NOT_EXECUTED, null, null));
299     }
300 }
301