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