1# Copyright 2020 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5load("@proto//chromiumos/config/api/test/metadata/v1/metadata.proto", 6 metadata_pb = "chromiumos.config.api.test.metadata.v1" 7) 8load("@proto//google/protobuf/struct.proto", google_pb = "google.protobuf") 9 10 11 12_TEST_NAME_PREFIX = "remoteTestDrivers/tauto/tests/" 13 14_COMMON_DEPS = { 15 "bluetooth": "scope.hardware_topology.bluetooth == scope.hardware_features.PRESENT", 16} 17 18 19 20def _define_test( 21 name, 22 *, 23 suites = [], 24 main_package = 'NOT SET', 25 main_args = [], 26): 27 """Define a single Tauto test. 28 29 Args: 30 name: The globally unique name of the test, as known to the scheduling 31 infrastructure. 32 suites: A list of test suites this test belongs to, without the 'suite:' 33 prefix. 34 main_package: Python package that contains the entry function. 35 e.g. autotest_lib.client.site_tests.dummy_Pass.dummy_Pass 36 main_args: A list of arguments to the entry function. 37 """ 38 test_args = google_pb.ListValue(values = [ 39 google_pb.Value(string_value = a) for a in main_args 40 ]) 41 informational = metadata_pb.Informational( 42 details = google_pb.Struct(fields = { 43 "main": google_pb.Value(struct_value = google_pb.Struct(fields = { 44 "python_package": google_pb.Value(string_value = main_package), 45 "test_args": google_pb.Value(list_value = test_args), 46 })), 47 }), 48 ) 49 return metadata_pb.Test( 50 name = _TEST_NAME_PREFIX + name, 51 attributes = [metadata_pb.Attribute(name = "suite:" + s) 52 for s in suites], 53 informational = informational, 54 ) 55 56 57def _define_client_test( 58 test_name, 59 purpose, 60 doc, 61 owner_emails = [], 62 owner_groups = [], 63 suites = [], 64 common_deps = [], 65 dep_expressions = [], 66 named_args = {}, 67): 68 69 attrs = [metadata_pb.Attribute(name = "suite:" + s) for s in suites] 70 71 contacts = ([metadata_pb.Contact(email = e) for e in owner_emails] 72 + [metadata_pb.Contact(mdb_group = g) for g in owner_groups]) 73 74 details = google_pb.Struct(fields = { 75 "purpose": google_pb.Value(string_value = purpose), 76 "doc": google_pb.Value(string_value = doc), 77 "named_args": google_pb.Value(string_value = to_json(named_args)) 78 }) 79 80 info = metadata_pb.Informational( 81 authors = contacts, 82 details = details, 83 ) 84 85 missing = [dep for dep in common_deps if dep not in _COMMON_DEPS] 86 if missing: 87 fail(str(missing) + " are not known common dependencies! " + 88 "Please add to test_common.star or check spelling.") 89 90 dep_strs = dep_expressions + [_COMMON_DEPS[dep] for dep in common_deps] 91 expression = " && ".join(dep_strs) 92 deps = [metadata_pb.DUTCondition(expression = expression)] 93 94 return metadata_pb.Test( 95 name = _TEST_NAME_PREFIX + test_name, 96 attributes = attrs, 97 informational = info, 98 dut_constraint = metadata_pb.DUTConstraint( 99 config = metadata_pb.DUTConfigConstraint( 100 expression = expression, 101 ) 102 ), 103 ) 104 105 106test_common = struct( 107 define_client_test = _define_client_test, 108 define_test = _define_test, 109) 110