blob: 7db2ab2b58b280eef20701b0af61ff7bea182669 [file] [log] [blame]
# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# 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.
"""The media integration test runner.
Usage:
To run all tests of a specific type:
"python media_integration_tests_runner.py
-p android-arm64 -c devel -w noinstall -log-level info
--type functionality"
To run a specific test (suspend_resume):
python media_integration_tests_runner.py
-p android-arm64 -c devel -w noinstall -log-level info
--type functionality --test_name suspend_resume"
"""
import argparse
import importlib
import logging
import pkgutil
import sys
import unittest
import _env # pylint: disable=unused-import
from cobalt.media_integration_tests.test_app import Features
from cobalt.media_integration_tests.test_case import SetLauncherParams, SetSupportedFeatures
from starboard.tools import abstract_launcher
from starboard.tools import command_line
from starboard.tools import log_level
# Location of test files.
_TESTS_PATH = {
'functionality': 'cobalt.media_integration_tests.functionality',
'endurance': 'cobalt.media_integration_tests.endurance',
'performance': 'cobalt.media_integration_tests.performance'
}
def GetSupportedFeatures(launcher_params):
launcher = abstract_launcher.LauncherFactory(
launcher_params.platform,
'cobalt',
launcher_params.config,
device_id=launcher_params.device_id,
target_params=None,
output_file=None,
out_directory=launcher_params.out_directory,
loader_platform=launcher_params.loader_platform,
loader_config=launcher_params.loader_config,
loader_out_directory=launcher_params.loader_out_directory)
return {
Features.SUSPEND_AND_RESUME: launcher.SupportsSystemSuspendResume(),
Features.SEND_KEYS: True,
}
def GetTestPackagePath(test_type):
if _TESTS_PATH.has_key(test_type):
return _TESTS_PATH[test_type]
return None
def GetAllTestNamesInPackage(package_path):
test_names = []
loader = pkgutil.get_loader(package_path)
for sub_module in pkgutil.walk_packages([loader.filename]):
_, sub_module_name, _ = sub_module
# Filter '_env' and '__init__'.
if sub_module_name[0] == '_':
continue
if not sub_module_name in test_names:
test_names.append(sub_module_name)
return test_names
def LoadAllTests(package_path, all_test_names):
test_suite = unittest.TestSuite()
for test_name in all_test_names:
module = importlib.import_module(package_path + '.' + test_name)
test_suite.addTest(unittest.TestLoader().loadTestsFromModule(module))
return test_suite
def main():
# TODO: Support filters.
parser = argparse.ArgumentParser()
parser.add_argument(
'--type',
required=True,
type=str,
help=('Type of the tests to run. It must be functionality, endurance or'
' performance.'))
parser.add_argument(
'--test_name',
default=None,
type=str,
help=('Name of test to run. If not specified, it will run all tests in'
'the directory.'))
args, _ = parser.parse_known_args()
package_path = GetTestPackagePath(args.type)
if package_path is None:
logging.error('{%s} is not a valid test type.', args.type)
return 2
all_test_names = GetAllTestNamesInPackage(package_path)
specified_test_name = args.test_name
if specified_test_name is not None:
if not specified_test_name in all_test_names:
logging.error('{%s} is not a valid test name.', specified_test_name)
return 2
else:
all_test_names = [specified_test_name]
log_level.InitializeLogging(args)
launcher_params = command_line.CreateLauncherParams()
supported_features = GetSupportedFeatures(launcher_params)
# Update global variables in test case.
SetLauncherParams(launcher_params)
SetSupportedFeatures(supported_features)
unittest.installHandler()
test_suite = LoadAllTests(package_path, all_test_names)
return not unittest.TextTestRunner(
verbosity=0, stream=sys.stdout).run(test_suite).wasSuccessful()
if __name__ == '__main__':
sys.exit(main())