# Copyright 2020 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. """ USAGE: python generate_control_files.py Generates all the control files required to run the Tast-based storage qual full test. In particular, following test blocks are generated: - 00_setup_benchmarks: initial test benchmarks - 01-40_stress: 40 universal test blocks - 99_teardown_benchmarks: final test benchmarks Generated tests are executed by one of the four test suites, according to the required test length: storage_qual_v2_xs, storage_qual_v2_s, storage_qual_v2_m, storage_qual_v2_l and storage_qual_v2_xl for extra small, small, medium, large and extra-large test length. The difference is number of universal test blocks: 2, 10, 20, 30 or 40 respectively. """ import os STORAGE_QUAL_VERSION = 2 HOUR_IN_SECS = 60 * 60 SUITE = 'storage_qual_v2' TEST_PREFIX = 'storage.FullQualificationStress.' TEMPLATE_FILE = 'template.control.storage_qual' TESTS = [{ 'test': 'setup', 'tast_name': 'setup_benchmarks', 'iterations': 1, 'duration': 1 * HOUR_IN_SECS, 'priority': 200, 'length': 'lengthy' }, { 'test': 'stress_{index:02n}', 'tast_name': 'stress', 'iterations': 40, 'duration': 5 * HOUR_IN_SECS, 'priority': 100, 'length': 'long' }, { 'test': 'teardown', 'tast_name': 'teardown_benchmarks', 'iterations': 1, 'duration': 1 * HOUR_IN_SECS, 'priority': 50, 'length': 'lengthy' }] def _get_suite_attributes(iteration): attrs = ['suite:%s_xl' % SUITE] if iteration < 30: attrs += ['suite:%s_l' % SUITE] if iteration < 20: attrs += ['suite:%s_m' % SUITE] if iteration < 10: attrs += ['suite:%s_s' % SUITE] if iteration < 2: attrs += ['suite:%s_xs' % SUITE] return attrs def _write_control_file(name, contents): f = open(name, 'w') f.write(contents) f.close() def _read_template_file(filename): f = open(filename) d = f.read() f.close() return d template = _read_template_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), TEMPLATE_FILE)) for test in TESTS: for i in range(int(test['iterations'])): test_name = test['test'].format(index=i + 1) control_file = template.format( name='_'.join([SUITE, test_name]), priority=int(test['priority'] - i), duration=int(test['duration']), test_exprs=TEST_PREFIX + test['tast_name'], length=test['length'], version=STORAGE_QUAL_VERSION, attributes=", ".join(_get_suite_attributes(i)), ) control_file_name = 'control.' + '_'.join([SUITE, test_name]) _write_control_file(control_file_name, control_file)