# 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. load("@proto//chromiumos/config/api/test/metadata/v1/metadata.proto", metadata_pb = "chromiumos.config.api.test.metadata.v1" ) load("@proto//google/protobuf/struct.proto", google_pb = "google.protobuf") _TEST_NAME_PREFIX = "remoteTestDrivers/tauto/tests/" _COMMON_DEPS = { "bluetooth": "scope.hardware_topology.bluetooth == scope.hardware_features.PRESENT", } def _define_test( name, *, suites = [], main_package = 'NOT SET', main_args = [], ): """Define a single Tauto test. Args: name: The globally unique name of the test, as known to the scheduling infrastructure. suites: A list of test suites this test belongs to, without the 'suite:' prefix. main_package: Python package that contains the entry function. e.g. autotest_lib.client.site_tests.dummy_Pass.dummy_Pass main_args: A list of arguments to the entry function. """ test_args = google_pb.ListValue(values = [ google_pb.Value(string_value = a) for a in main_args ]) informational = metadata_pb.Informational( details = google_pb.Struct(fields = { "main": google_pb.Value(struct_value = google_pb.Struct(fields = { "python_package": google_pb.Value(string_value = main_package), "test_args": google_pb.Value(list_value = test_args), })), }), ) return metadata_pb.Test( name = _TEST_NAME_PREFIX + name, attributes = [metadata_pb.Attribute(name = "suite:" + s) for s in suites], informational = informational, ) def _define_client_test( test_name, purpose, doc, owner_emails = [], owner_groups = [], suites = [], common_deps = [], dep_expressions = [], named_args = {}, ): attrs = [metadata_pb.Attribute(name = "suite:" + s) for s in suites] contacts = ([metadata_pb.Contact(email = e) for e in owner_emails] + [metadata_pb.Contact(mdb_group = g) for g in owner_groups]) details = google_pb.Struct(fields = { "purpose": google_pb.Value(string_value = purpose), "doc": google_pb.Value(string_value = doc), "named_args": google_pb.Value(string_value = to_json(named_args)) }) info = metadata_pb.Informational( authors = contacts, details = details, ) missing = [dep for dep in common_deps if dep not in _COMMON_DEPS] if missing: fail(str(missing) + " are not known common dependencies! " + "Please add to test_common.star or check spelling.") dep_strs = dep_expressions + [_COMMON_DEPS[dep] for dep in common_deps] expression = " && ".join(dep_strs) deps = [metadata_pb.DUTCondition(expression = expression)] return metadata_pb.Test( name = _TEST_NAME_PREFIX + test_name, attributes = attrs, informational = info, dut_constraint = metadata_pb.DUTConstraint( config = metadata_pb.DUTConfigConstraint( expression = expression, ) ), ) test_common = struct( define_client_test = _define_client_test, define_test = _define_test, )