blob: cdb3c28823cbc17488eb61f3e7eed1183fdf281a [file] [log] [blame]
#!/bin/bash
set -e
usage() {
echo "
Usage: $0 [OPTION]
Generates control files for Tast categories.
For each Tast category, e.g. 'example', a file
'server/site_tests/tast/control.category-<category>' and
'test_suites/control.bvt-tast-cq-<category>' is generated, and attributes to add
to attribute_allowlist.txt are printed.
The control files follow templates that use test expressions based on test name,
e.g. name:example.*.
-f Overwrite existing control files.
-h Print this help message.
"
exit 1
}
overwrite=false
while getopts "fh" o; do
case "${o}" in
f)
overwrite=true ;;
*)
usage ;;
esac
done
readonly script_dir="$(dirname "$(realpath -e "${BASH_SOURCE[0]}")")"
readonly repo_root=$(realpath "${script_dir}"/..)
readonly src_root="$(realpath "${script_dir}"/../../../..)"
categories=()
types=( "remote" "local" )
for type in "${types[@]}"; do
mapfile -t categories < <(find \
"${src_root}/platform/tast-tests/src/chromiumos/tast/${type}/bundles/cros" \
-maxdepth 1 -mindepth 1 -type d -printf "%f\n")
done
mapfile -t categories < <(printf '%s\n' "${categories[@]}" | sort -u)
attributes=()
for c in "${categories[@]}"; do
test_suites_file="${repo_root}/test_suites/control.bvt-tast-cq-${c}"
if [[ -e ${test_suites_file} && ${overwrite} == "false" ]]; then
echo "File ${test_suites_file} already exists. Use -f to overwrite."
exit 1
fi
cat << EOF > "${test_suites_file}"
# Copyright 2021 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.
AUTHOR = "Chrome OS Team"
NAME = "bvt-tast-cq-${c}"
PURPOSE = 'Tests the critical Tast tests in the "${c}" category.'
TIME = "SHORT"
TEST_CATEGORY = "General"
TEST_CLASS = "suite"
TEST_TYPE = "Server"
DOC = """
This suite verifies Chrome OS's basic functionality for the Chrome OS Commit
Queue by running all Tast integration tests in the "${c}" category that must
always pass against a DUT. See http://go/tast for more information about Tast.
The only Autotest test executed by this suite is tast.category-${c}, which
is a server test that executes the tast executable. The tast executable runs
individual Tast tests. If any of these Tast tests fail, then the
test.category-${c} test (and this suite) fail.
"""
import common
from autotest_lib.server.cros.dynamic_suite import dynamic_suite
args_dict['name'] = NAME
args_dict['max_runtime_mins'] = 30
args_dict['timeout_mins'] = 60
args_dict['job'] = job
dynamic_suite.reimage_and_run(**args_dict)
EOF
tast_file="${repo_root}/server/site_tests/tast/control.category-${c}"
if [[ -e ${tast_file} && ${overwrite} == "false" ]]; then
echo "File ${tast_file} already exists. Use -f to overwrite."
exit 1
fi
cat << EOF > "${tast_file}"
# Copyright 2021 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.
AUTHOR = 'Chromium OS team'
NAME = 'tast.category-${c}'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:bvt-tast-cq-${c}'
MAX_RESULT_SIZE_KB = 256 * 1024
# tast.py uses binaries installed from autotest_server_package.tar.bz2.
REQUIRE_SSP = True
DOC = '''
Run the critical Tast tests in the "${c}" category.
Tast is an integration-testing framework analagous to the test-running portion
of Autotest. See https://chromium.googlesource.com/chromiumos/platform/tast/ for
more information.
This test runs Tast tests in the "${c}" category that are required to pass
against a remote DUT. It fails if any individual Tast tests fail.
See http://go/tast-failures for information about investigating failures.
'''
def run(machine):
job.run_test('tast',
host=hosts.create_host(machine),
test_exprs=['('
'"group:mainline" && '
'!informational && '
'"name:${c}.*"'
')'],
ignore_test_failures=False, max_run_sec=1800,
command_args=args,
clear_tpm=True)
parallel_simple(run, machines)
EOF
attributes+=( "suite:bvt-tast-cq-${c}" )
done
echo "Add the following attributes to attribute_allowlist.txt:"
printf "%s\n" "${attributes[@]}"