You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
572 lines
23 KiB
572 lines
23 KiB
#!/usr/bin/python |
|
|
|
# Copyright (C) 2009 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. |
|
|
|
"""Module for generating CTS test descriptions and test plans.""" |
|
|
|
import glob |
|
import os |
|
import re |
|
import shutil |
|
import string |
|
import subprocess |
|
import sys |
|
import xml.dom.minidom as dom |
|
from cts import tools |
|
from multiprocessing import Pool |
|
|
|
def GetSubDirectories(root): |
|
"""Return all directories under the given root directory.""" |
|
return [x for x in os.listdir(root) if os.path.isdir(os.path.join(root, x))] |
|
|
|
def ReadFileLines(filePath): |
|
"""Reads a file and returns its contents as a line list.""" |
|
f = open(filePath, 'r'); |
|
lines = [line.strip() for line in f.readlines()] |
|
f.close() |
|
return lines |
|
|
|
def ReadDeqpTestList(testRoot, file): |
|
"""Reads a file, converts test names from deqp to CTS format, and returns |
|
its contents as a line list. |
|
""" |
|
REPO_ROOT = os.path.join(testRoot, "../../..") |
|
f = open(os.path.join(REPO_ROOT, "external/deqp/android/cts", file), 'r'); |
|
lines = [string.join(line.strip().rsplit('.',1),'#') for line in f.readlines()] |
|
f.close() |
|
return lines |
|
|
|
def GetMakeFileVars(makefile_path): |
|
"""Extracts variable definitions from the given make file. |
|
|
|
Args: |
|
makefile_path: Path to the make file. |
|
|
|
Returns: |
|
A dictionary mapping variable names to their assigned value. |
|
""" |
|
result = {} |
|
pattern = re.compile(r'^\s*([^:#=\s]+)\s*:=\s*(.*?[^\\])$', re.MULTILINE + re.DOTALL) |
|
stream = open(makefile_path, 'r') |
|
content = stream.read() |
|
for match in pattern.finditer(content): |
|
result[match.group(1)] = match.group(2) |
|
stream.close() |
|
return result |
|
|
|
|
|
class CtsBuilder(object): |
|
"""Main class for generating test descriptions and test plans.""" |
|
|
|
def __init__(self, argv): |
|
"""Initialize the CtsBuilder from command line arguments.""" |
|
if len(argv) != 6: |
|
print 'Usage: %s <testRoot> <ctsOutputDir> <tempDir> <androidRootDir> <docletPath>' % argv[0] |
|
print '' |
|
print 'testRoot: Directory under which to search for CTS tests.' |
|
print 'ctsOutputDir: Directory in which the CTS repository should be created.' |
|
print 'tempDir: Directory to use for storing temporary files.' |
|
print 'androidRootDir: Root directory of the Android source tree.' |
|
print 'docletPath: Class path where the DescriptionGenerator doclet can be found.' |
|
sys.exit(1) |
|
self.test_root = sys.argv[1] |
|
self.out_dir = sys.argv[2] |
|
self.temp_dir = sys.argv[3] |
|
self.android_root = sys.argv[4] |
|
self.doclet_path = sys.argv[5] |
|
|
|
self.test_repository = os.path.join(self.out_dir, 'repository/testcases') |
|
self.plan_repository = os.path.join(self.out_dir, 'repository/plans') |
|
self.definedplans_repository = os.path.join(self.android_root, 'cts/tests/plans') |
|
|
|
def GenerateTestDescriptions(self): |
|
"""Generate test descriptions for all packages.""" |
|
pool = Pool(processes=2) |
|
|
|
# generate test descriptions for android tests |
|
results = [] |
|
pool.close() |
|
pool.join() |
|
return sum(map(lambda result: result.get(), results)) |
|
|
|
def __WritePlan(self, plan, plan_name): |
|
print 'Generating test plan %s' % plan_name |
|
plan.Write(os.path.join(self.plan_repository, plan_name + '.xml')) |
|
|
|
def GenerateTestPlans(self): |
|
"""Generate default test plans.""" |
|
# TODO: Instead of hard-coding the plans here, use a configuration file, |
|
# such as test_defs.xml |
|
packages = [] |
|
descriptions = sorted(glob.glob(os.path.join(self.test_repository, '*.xml'))) |
|
for description in descriptions: |
|
doc = tools.XmlFile(description) |
|
packages.append(doc.GetAttr('TestPackage', 'appPackageName')) |
|
# sort the list to give the same sequence based on name |
|
packages.sort() |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('android\.car') |
|
plan.Exclude('android\.performance.*') |
|
self.__WritePlan(plan, 'CTS') |
|
self.__WritePlan(plan, 'CTS-TF') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('android\.car') |
|
plan.Exclude('android\.performance.*') |
|
plan.Exclude('android\.media\.cts\.StreamingMediaPlayerTest.*') |
|
# Test plan to not include media streaming tests |
|
self.__WritePlan(plan, 'CTS-No-Media-Stream') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('android\.car') |
|
plan.Exclude('android\.performance.*') |
|
self.__WritePlan(plan, 'SDK') |
|
|
|
plan.Exclude(r'android\.signature') |
|
plan.Exclude(r'android\.core.*') |
|
self.__WritePlan(plan, 'Android') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Include(r'android\.core\.tests.*') |
|
plan.Exclude(r'android\.core\.tests\.libcore\.package\.harmony*') |
|
self.__WritePlan(plan, 'Java') |
|
|
|
# TODO: remove this once the tests are fixed and merged into Java plan above. |
|
plan = tools.TestPlan(packages) |
|
plan.Include(r'android\.core\.tests\.libcore\.package\.harmony*') |
|
self.__WritePlan(plan, 'Harmony') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Include(r'android\.core\.vm-tests-tf') |
|
self.__WritePlan(plan, 'VM-TF') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Include(r'android\.tests\.appsecurity') |
|
self.__WritePlan(plan, 'AppSecurity') |
|
|
|
# hard-coded white list for PDK plan |
|
plan.Exclude('.*') |
|
plan.Include('android\.aadb') |
|
plan.Include('android\.bluetooth') |
|
plan.Include('android\.graphics.*') |
|
plan.Include('android\.hardware') |
|
plan.Include('android\.media') |
|
plan.Exclude('android\.mediastress') |
|
plan.Include('android\.net') |
|
plan.Include('android\.opengl.*') |
|
plan.Include('android\.renderscript') |
|
plan.Include('android\.telephony') |
|
plan.Include('android\.nativemedia.*') |
|
plan.Include('com\.android\.cts\..*')#TODO(stuartscott): Should PDK have all these? |
|
plan.Exclude('android\.car') |
|
self.__WritePlan(plan, 'PDK') |
|
|
|
temporarily_known_failure_tests = BuildCtsTemporarilyKnownFailureList(); |
|
flaky_tests = BuildCtsFlakyTestList() |
|
releasekey_tests = BuildListForReleaseBuildTest() |
|
|
|
# CTS Stable plan |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('android\.car') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-stable') |
|
|
|
# CTS Flaky plan - list of tests known to be flaky in lab environment |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.Include(package+'$') |
|
plan.IncludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-flaky') |
|
|
|
small_tests = BuildAospSmallSizeTestList() |
|
medium_tests = BuildAospMediumSizeTestList() |
|
new_test_packages = BuildCtsVettedNewPackagesList() |
|
|
|
# CTS - sub plan for public, small size tests |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
for package, test_list in small_tests.iteritems(): |
|
plan.Include(package+'$') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-kitkat-small') |
|
self.__WritePlan(plan, 'CTS-public-small') |
|
|
|
# CTS - sub plan for public, medium size tests |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
for package, test_list in medium_tests.iteritems(): |
|
plan.Include(package+'$') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-kitkat-medium') |
|
self.__WritePlan(plan, 'CTS-public-medium') |
|
|
|
# CTS - sub plan for hardware tests which is public, large |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'android\.hardware$') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-hardware') |
|
|
|
# CTS - sub plan for camera tests which is public, large |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'android\.camera$') |
|
misc_camera_tests = BuildCtsMiscCameraList() |
|
for package, test_list in misc_camera_tests.iteritems(): |
|
plan.Include(package+'$') |
|
plan.IncludeTests(package, test_list) |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-camera') |
|
|
|
# CTS - sub plan for media tests which is public, large |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'android\.media$') |
|
plan.Include(r'android\.view$') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-media') |
|
|
|
# CTS - sub plan for mediastress tests which is public, large |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'android\.mediastress$') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-mediastress') |
|
|
|
# CTS - sub plan for new tests that is vetted for L launch |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
for package, test_list in new_test_packages.iteritems(): |
|
plan.Include(package+'$') |
|
plan.Exclude(r'android\.browser') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-l-tests') |
|
|
|
# CTS - sub plan for tests in drawelement packages |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'com\.drawelements\.') |
|
plan.IncludeTests('com.drawelements.deqp.egl', ReadDeqpTestList(self.test_root, 'mnc/egl-master.txt')) |
|
plan.IncludeTests('com.drawelements.deqp.gles2', ReadDeqpTestList(self.test_root, 'mnc/gles2-master.txt')) |
|
plan.IncludeTests('com.drawelements.deqp.gles3', ReadDeqpTestList(self.test_root, 'mnc/gles3-master.txt')) |
|
plan.IncludeTests('com.drawelements.deqp.gles31', ReadDeqpTestList(self.test_root, 'mnc/gles31-master.txt')) |
|
self.__WritePlan(plan, 'CTS-DEQP') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'com\.drawelements\.') |
|
plan.ExcludeTests('com.drawelements.deqp.egl', ReadDeqpTestList(self.test_root, 'mnc/egl-master.txt')) |
|
plan.ExcludeTests('com.drawelements.deqp.gles2', ReadDeqpTestList(self.test_root, 'mnc/gles2-master.txt')) |
|
plan.ExcludeTests('com.drawelements.deqp.gles3', ReadDeqpTestList(self.test_root, 'mnc/gles3-master.txt')) |
|
plan.ExcludeTests('com.drawelements.deqp.gles31', ReadDeqpTestList(self.test_root, 'mnc/gles31-master.txt')) |
|
self.__WritePlan(plan, 'CTS-DEQP-for-next-rel') |
|
|
|
# CTS - sub plan for new test packages added for staging |
|
plan = tools.TestPlan(packages) |
|
for package, test_list in small_tests.iteritems(): |
|
plan.Exclude(package+'$') |
|
for package, test_list in medium_tests.iteritems(): |
|
plan.Exclude(package+'$') |
|
for package, tests_list in new_test_packages.iteritems(): |
|
plan.Exclude(package+'$') |
|
plan.Exclude(r'com\.drawelements\.') |
|
plan.Exclude(r'android\.hardware$') |
|
plan.Exclude(r'android\.media$') |
|
plan.Exclude(r'android\.view$') |
|
plan.Exclude(r'android\.mediastress$') |
|
plan.Exclude(r'android\.browser') |
|
plan.Exclude('android\.car') |
|
for package, test_list in flaky_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
for package, test_list in releasekey_tests.iteritems(): |
|
plan.ExcludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-m-tests') |
|
|
|
|
|
# CTS - sub plan for new test packages added for staging |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
for package, test_list in temporarily_known_failure_tests.iteritems(): |
|
plan.Include(package+'$') |
|
plan.IncludeTests(package, test_list) |
|
self.__WritePlan(plan, 'CTS-staging') |
|
|
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
self.__WritePlan(plan, 'CTS-webview') |
|
|
|
# CTS - sub plan for Security |
|
plan = tools.TestPlan(packages) |
|
plan.Exclude('.*') |
|
plan.Include(r'android\.security$') |
|
plan.Include('android\.host\.jdwpsecurity$') |
|
plan.Include('android\.host\.abioverride$') |
|
self.__WritePlan(plan, 'Security') |
|
|
|
def BuildAospMediumSizeTestList(): |
|
""" Construct a defaultdic that lists package names of medium tests |
|
already published to aosp. """ |
|
return { |
|
'android.app' : [], |
|
'android.core.tests.libcore.package.libcore' : [], |
|
'android.core.tests.libcore.package.org' : [], |
|
'android.core.vm-tests-tf' : [], |
|
'android.dpi' : [], |
|
'android.host.security' : [], |
|
'android.net' : [], |
|
'android.os' : [], |
|
'android.permission2' : [], |
|
'android.security' : [], |
|
'android.telephony' : [], |
|
'android.webkit' : [], |
|
'android.widget' : [], |
|
'android.browser' : []} |
|
|
|
def BuildAospSmallSizeTestList(): |
|
""" Construct a default dict that lists packages names of small tests |
|
already published to aosp. """ |
|
return { |
|
'android.aadb' : [], |
|
'android.acceleration' : [], |
|
'android.accessibility' : [], |
|
'android.accessibilityservice' : [], |
|
'android.accounts' : [], |
|
'android.admin' : [], |
|
'android.animation' : [], |
|
'android.appsecurity' : [], |
|
'android.bionic' : [], |
|
'android.bluetooth' : [], |
|
'android.calendarcommon' : [], |
|
'android.content' : [], |
|
'android.core.tests.libcore.package.com' : [], |
|
'android.core.tests.libcore.package.conscrypt' : [], |
|
'android.core.tests.libcore.package.dalvik' : [], |
|
'android.core.tests.libcore.package.sun' : [], |
|
'android.core.tests.libcore.package.tests' : [], |
|
'android.database' : [], |
|
'android.dram' : [], |
|
'android.dreams' : [], |
|
'android.drm' : [], |
|
'android.effect' : [], |
|
'android.filesystem' : [], |
|
'android.gesture' : [], |
|
'android.graphics' : [], |
|
'android.graphics2' : [], |
|
'android.jni' : [], |
|
'android.keystore' : [], |
|
'android.location' : [], |
|
'android.nativemedia.sl' : [], |
|
'android.nativemedia.xa' : [], |
|
'android.ndef' : [], |
|
'android.opengl' : [], |
|
'android.openglperf' : [], |
|
'android.permission' : [], |
|
'android.preference' : [], |
|
'android.preference2' : [], |
|
'android.provider' : [], |
|
'android.renderscript' : [], |
|
'android.rscpp' : [], |
|
'android.rsg' : [], |
|
'android.sax' : [], |
|
'android.server' : [], |
|
'android.signature' : [], |
|
'android.simplecpu' : [], |
|
'android.simpleperf' : [], |
|
'android.speech' : [], |
|
'android.text' : [], |
|
'android.textureview' : [], |
|
'android.theme' : [], |
|
'android.usb' : [], |
|
'android.util' : [], |
|
'android.video' : [], |
|
'com.android.cts.jank' : [], |
|
'com.android.cts.jank2' : [], |
|
'com.android.cts.opengl' : [], |
|
'com.android.cts.ui' : [], |
|
'com.android.cts.uihost' : [], |
|
'zzz.android.monkey' : []} |
|
|
|
def BuildCtsVettedNewPackagesList(): |
|
""" Construct a defaultdict that maps package names that is vetted for L. """ |
|
return { |
|
'android.JobScheduler' : [], |
|
'android.core.tests.libcore.package.harmony_annotation' : [], |
|
'android.core.tests.libcore.package.harmony_beans' : [], |
|
'android.core.tests.libcore.package.harmony_java_io' : [], |
|
'android.core.tests.libcore.package.harmony_java_lang' : [], |
|
'android.core.tests.libcore.package.harmony_java_math' : [], |
|
'android.core.tests.libcore.package.harmony_java_net' : [], |
|
'android.core.tests.libcore.package.harmony_java_nio' : [], |
|
'android.core.tests.libcore.package.harmony_java_util' : [], |
|
'android.core.tests.libcore.package.harmony_java_text' : [], |
|
'android.core.tests.libcore.package.harmony_javax_security' : [], |
|
'android.core.tests.libcore.package.harmony_logging' : [], |
|
'android.core.tests.libcore.package.harmony_prefs' : [], |
|
'android.core.tests.libcore.package.harmony_sql' : [], |
|
'android.core.tests.libcore.package.jsr166' : [], |
|
'android.core.tests.libcore.package.okhttp' : [], |
|
'android.display' : [], |
|
'android.host.theme' : [], |
|
'android.jdwp' : [], |
|
'android.location2' : [], |
|
'android.print' : [], |
|
'android.renderscriptlegacy' : [], |
|
'android.signature' : [], |
|
'android.tv' : [], |
|
'android.uiautomation' : [], |
|
'android.uirendering' : []} |
|
|
|
def BuildListForReleaseBuildTest(): |
|
""" Construct a defaultdict that maps package name to a list of tests |
|
that are expected to pass only when running against a user/release-key build. """ |
|
return { |
|
'android.app' : [ |
|
'android.app.cts.ActivityManagerTest#testIsRunningInTestHarness',], |
|
'android.dpi' : [ |
|
'android.dpi.cts.DefaultManifestAttributesSdkTest#testPackageHasExpectedSdkVersion',], |
|
'android.host.security' : [ |
|
'android.cts.security.SELinuxHostTest#testAllEnforcing', |
|
'android.cts.security.SELinuxHostTest#testSuDomain',], |
|
'android.os' : [ |
|
'android.os.cts.BuildVersionTest#testReleaseVersion', |
|
'android.os.cts.BuildTest#testIsSecureUserBuild',], |
|
'android.security' : [ |
|
'android.security.cts.BannedFilesTest#testNoSu', |
|
'android.security.cts.BannedFilesTest#testNoSuInPath', |
|
'android.security.cts.PackageSignatureTest#testPackageSignatures', |
|
'android.security.cts.SELinuxDomainTest#testSuDomain',], |
|
'' : []} |
|
|
|
def BuildCtsFlakyTestList(): |
|
""" Construct a defaultdict that maps package name to a list of tests |
|
that flaky during dev cycle and cause other subsequent tests to fail. """ |
|
return { |
|
'android.camera' : [ |
|
'android.hardware.cts.CameraTest#testVideoSnapshot', |
|
'android.hardware.cts.CameraGLTest#testCameraToSurfaceTextureMetadata', |
|
'android.hardware.cts.CameraGLTest#testSetPreviewTextureBothCallbacks', |
|
'android.hardware.cts.CameraGLTest#testSetPreviewTexturePreviewCallback',], |
|
'android.media' : [ |
|
'android.media.cts.DecoderTest#testCodecResetsH264WithSurface', |
|
'android.media.cts.StreamingMediaPlayerTest#testHLS',], |
|
'android.net' : [ |
|
'android.net.cts.ConnectivityManagerTest#testStartUsingNetworkFeature_enableHipri', |
|
'android.net.cts.DnsTest#testDnsWorks', |
|
'android.net.cts.SSLCertificateSocketFactoryTest#testCreateSocket', |
|
'android.net.cts.SSLCertificateSocketFactoryTest#test_createSocket_bind', |
|
'android.net.cts.SSLCertificateSocketFactoryTest#test_createSocket_simple', |
|
'android.net.cts.SSLCertificateSocketFactoryTest#test_createSocket_wrapping', |
|
'android.net.cts.TrafficStatsTest#testTrafficStatsForLocalhost', |
|
'android.net.wifi.cts.NsdManagerTest#testAndroidTestCaseSetupProperly',], |
|
'android.security' : [ |
|
'android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningUdp6Ports', |
|
'android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningUdpPorts',], |
|
'android.webkit' : [ |
|
'android.webkit.cts.WebViewClientTest#testOnUnhandledKeyEvent',], |
|
'com.android.cts.filesystemperf' : [ |
|
'com.android.cts.filesystemperf.RandomRWTest#testRandomRead', |
|
'com.android.cts.filesystemperf.RandomRWTest#testRandomUpdate',], |
|
'' : []} |
|
|
|
def BuildCtsTemporarilyKnownFailureList(): |
|
""" Construct a defaultdict that maps package name to a list of tests |
|
that are known failures during dev cycle but expected to be fixed before launch """ |
|
return { |
|
'android.alarmclock' : [ |
|
'android.alarmclock.cts.DismissAlarmTest#testAll', |
|
'android.alarmclock.cts.SetAlarmTest#testAll', |
|
'android.alarmclock.cts.SnoozeAlarmTest#testAll', |
|
], |
|
'android.dumpsys' : [ |
|
'android.dumpsys.cts.DumpsysHostTest#testBatterystatsOutput', |
|
'android.dumpsys.cts.DumpsysHostTest#testGfxinfoFramestats', |
|
], |
|
'android.telecom' : [ |
|
'android.telecom.cts.ExtendedInCallServiceTest#testAddNewOutgoingCallAndThenDisconnect', |
|
'android.telecom.cts.RemoteConferenceTest#testRemoteConferenceCallbacks_ConferenceableConnections', |
|
], |
|
'android.transition' : [ |
|
'android.transition.cts.ChangeScrollTest#testChangeScroll', |
|
], |
|
'android.voicesettings' : [ |
|
'android.voicesettings.cts.ZenModeTest#testAll', |
|
], |
|
'android.systemui.cts' : [ |
|
'android.systemui.cts.LightStatusBarTests#testLightStatusBarIcons', |
|
], |
|
'com.android.cts.app.os' : [ |
|
'com.android.cts.app.os.OsHostTests#testNonExportedActivities', |
|
], |
|
'com.android.cts.devicepolicy' : [ |
|
'com.android.cts.devicepolicy.MixedDeviceOwnerTest#testPackageInstallUserRestrictions', |
|
'com.android.cts.devicepolicy.MixedProfileOwnerTest#testPackageInstallUserRestrictions', |
|
], |
|
'' : []} |
|
|
|
def BuildCtsMiscCameraList(): |
|
""" Construct a defaultdict that maps package name to a list of tests |
|
that are relevant to camera but does not reside in camera test package """ |
|
return { |
|
'android.app' : [ |
|
'android.app.cts.SystemFeaturesTest#testCameraFeatures', |
|
], |
|
'android.permission' : [ |
|
'android.permission.cts.CameraPermissionTest', |
|
'android.permission.cts.Camera2PermissionTest', |
|
], |
|
'' : []} |
|
|
|
def LogGenerateDescription(name): |
|
print 'Generating test description for package %s' % name |
|
|
|
if __name__ == '__main__': |
|
builder = CtsBuilder(sys.argv) |
|
result = builder.GenerateTestDescriptions() |
|
if result != 0: |
|
sys.exit(result) |
|
builder.GenerateTestPlans()
|
|
|