82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
# 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']
|