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