xref: /aosp_15_r20/external/autotest/metadata/test_common.star (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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