15ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens/* 25ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * Copyright (C) 2012 The Android Open Source Project 35ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * 45ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * Licensed under the Apache License, Version 2.0 (the "License"); 55ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * you may not use this file except in compliance with the License. 65ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * You may obtain a copy of the License at 75ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * 85ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * http://www.apache.org/licenses/LICENSE-2.0 95ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * 105ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * Unless required by applicable law or agreed to in writing, software 115ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * distributed under the License is distributed on an "AS IS" BASIS, 125ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * See the License for the specific language governing permissions and 145ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * limitations under the License. 155ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens */ 165ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 175ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephenspackage com.android.smoketest; 185ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 195ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport android.app.ActivityManager; 205ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport android.app.ActivityManager.ProcessErrorStateInfo; 215ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport android.content.pm.PackageManager; 225ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport android.content.pm.ResolveInfo; 235ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport android.test.InstrumentationTestRunner; 245ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 255ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport junit.framework.TestCase; 265ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport junit.framework.TestSuite; 275ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 285ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport java.util.Collection; 295ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport java.util.HashSet; 305ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport java.util.List; 315ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephensimport java.util.Set; 325ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 335ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens/** 345ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * A special test runner which does a test-start for each app in a separate testcase 355ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens */ 365ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephenspublic class SmokeTestRunner extends InstrumentationTestRunner { 375ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 385ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens private static final String SUITE_NAME = "Smoke Test Suite"; 395ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 405ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens /** 415ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens * Returns a single testcase for each app to launch 425ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens */ 435ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens @Override 445ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens public TestSuite getAllTests() { 455ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final TestSuite suite = new TestSuite(SUITE_NAME); 465ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 475ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final PackageManager pm = getTargetContext().getPackageManager(); 485ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final List<ResolveInfo> apps = ProcessErrorsTest.getLauncherActivities(pm); 495ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 505ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final TestCase setupTest = new ProcessErrorsTest() { 515ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens @Override 525ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens public void runTest() throws Exception { 535ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens testSetUpConditions(); 545ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 555ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens }; 565ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens setupTest.setName("testSetUpConditions"); 575ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens suite.addTest(setupTest); 585ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 595ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final TestCase postBootTest = new ProcessErrorsTest() { 605ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens @Override 615ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens public void runTest() throws Exception { 625ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens testNoProcessErrorsAfterBoot(); 635ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 645ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens }; 655ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens postBootTest.setName("testNoProcessErrorsAfterBoot"); 665ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens suite.addTest(postBootTest); 675ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 685ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens for (final ResolveInfo app : apps) { 695ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final TestCase appTest = new ProcessErrorsTest() { 705ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens @Override 715ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens public void runTest() throws Exception { 725ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens final Set<ProcessError> errSet = new HashSet<ProcessError>(); 73ad8037e3a9b306bae6cdc8927c35946696bf40f6Omari Stephens final Collection<ProcessError> errProcs = runOneActivity(app); 745ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens if (errProcs != null) { 75ad8037e3a9b306bae6cdc8927c35946696bf40f6Omari Stephens errSet.addAll(errProcs); 765ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 775ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 785ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens if (!errSet.isEmpty()) { 79bf29121c215b30bed8cb886f1b6c7d71eb36a49dOmari Stephens fail(String.format("Got %d errors:\n%s", errSet.size(), 805ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens reportWrappedListContents(errSet))); 815ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 825ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 835ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens }; 845ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens appTest.setName(app.activityInfo.name); 855ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens suite.addTest(appTest); 865ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 875ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 88a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens final TestCase asyncErrorTest = new ProcessErrorsTest() { 89a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens @Override 90a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens public void runTest() throws Exception { 91a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens testZZReportAsyncErrors(); 92a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens } 93a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens }; 94a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens asyncErrorTest.setName("testAsynchronousErrors"); 95a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens suite.addTest(asyncErrorTest); 96a6a353653d9147a96cd21543448d9be7631cb424Omari Stephens 975ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens return suite; 985ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens } 995ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens} 1005ae3dfe59d22457fb232853990ba4131385ff3f6Omari Stephens 101