# Copyright 2019 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """This is a temporary module to help scheduling paygen suites in trampoline. In trampoline, paygen suites are scheduled via skylab create-test, to schedule every paygen test independently, instead of creating a paygen suite via skylab create-suite. """ import re import common from autotest_lib.server.cros.dynamic_suite import control_file_getter from autotest_lib.server.cros.dynamic_suite import suite_common def is_paygen_suite(suite_name): """Check if it's to run a paygen suite in trampoline.""" paygen_au_regexp = 'paygen_au_*' return re.match(paygen_au_regexp, suite_name) is not None def get_paygen_tests(build, suite_name): """Parse paygen tests from au control files.""" if not is_paygen_suite(suite_name): raise ValueError('Cannot download paygen test control files for ' 'non-paygen suite %s' % suite_name) ds, _ = suite_common.stage_build_artifacts( build, artifacts=['%s_suite' % suite_name]) cf_getter = control_file_getter.DevServerGetter(build, ds) tests = suite_common.retrieve_for_suite(cf_getter, suite_name) return suite_common.filter_tests( tests, suite_common.name_in_tag_predicate(suite_name)) def paygen_skylab_args(test, suite_name, image, pool, board, model, timeout_mins, qs_account, service_account): """Form args for requesting paygen tests in skylab.""" args = ['-image', image] args += ['-pool', pool] if board is not None: args += ['-board', board] if model is not None: args += ['-model', model] args += ['-timeout-mins', str(timeout_mins)] tags = ['skylab:run_suite_trampoline', 'build:%s' % image, 'suite:%s' % suite_name] for t in tags: args += ['-tag', t] keyvals = ['build:%s' % image, 'suite:%s' % suite_name, 'label:%s/%s/%s' % (image, suite_name, test.name)] for k in keyvals: args += ['-keyval', k] # Paygen test expects a space-separated string of name=value pairs. # See http://shortn/_C8r3rC0rOP. test_args = ['name=%s' % test.suite, 'update_type=%s' % test.update_type, 'source_release=%s' % test.source_release, 'target_release=%s' % test.target_release, 'target_payload_uri=%s' % test.target_payload_uri, 'source_payload_uri=%s' % test.source_payload_uri, 'suite=%s' % test.suite, 'source_archive_uri=%s' % test.source_archive_uri] args += ['-test-args', ' '.join(test_args)] if qs_account: args += ['-qs-account', qs_account] args += ['-service-account-json', service_account] return args + ['autoupdate_EndToEndTest']