xref: /aosp_15_r20/external/grpc-grpc/bazel/gevent_test.bzl (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2021 The gRPC Authors
2*cc02d7e2SAndroid Build Coastguard Worker#
3*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*cc02d7e2SAndroid Build Coastguard Worker#
7*cc02d7e2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*cc02d7e2SAndroid Build Coastguard Worker#
9*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License.
14*cc02d7e2SAndroid Build Coastguard Worker"""
15*cc02d7e2SAndroid Build Coastguard WorkerHouses py_grpc_gevent_test.
16*cc02d7e2SAndroid Build Coastguard Worker"""
17*cc02d7e2SAndroid Build Coastguard Worker
18*cc02d7e2SAndroid Build Coastguard Workerload("@grpc_python_dependencies//:requirements.bzl", "requirement")
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Worker_GRPC_LIB = "//src/python/grpcio/grpc:grpcio"
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard Worker_COPIED_MAIN_SUFFIX = ".gevent.main"
23*cc02d7e2SAndroid Build Coastguard Worker
24*cc02d7e2SAndroid Build Coastguard Workerdef py_grpc_gevent_test(
25*cc02d7e2SAndroid Build Coastguard Worker        name,
26*cc02d7e2SAndroid Build Coastguard Worker        srcs,
27*cc02d7e2SAndroid Build Coastguard Worker        main = None,
28*cc02d7e2SAndroid Build Coastguard Worker        deps = None,
29*cc02d7e2SAndroid Build Coastguard Worker        data = None,
30*cc02d7e2SAndroid Build Coastguard Worker        **kwargs):
31*cc02d7e2SAndroid Build Coastguard Worker    """Runs a Python test with gevent monkeypatched in.
32*cc02d7e2SAndroid Build Coastguard Worker
33*cc02d7e2SAndroid Build Coastguard Worker    Args:
34*cc02d7e2SAndroid Build Coastguard Worker      name: The name of the test.
35*cc02d7e2SAndroid Build Coastguard Worker      srcs: The source files.
36*cc02d7e2SAndroid Build Coastguard Worker      main: The main file of the test.
37*cc02d7e2SAndroid Build Coastguard Worker      deps: The dependencies of the test.
38*cc02d7e2SAndroid Build Coastguard Worker      data: The data dependencies of the test.
39*cc02d7e2SAndroid Build Coastguard Worker      **kwargs: Any other test arguments.
40*cc02d7e2SAndroid Build Coastguard Worker    """
41*cc02d7e2SAndroid Build Coastguard Worker    if main == None:
42*cc02d7e2SAndroid Build Coastguard Worker        if len(srcs) != 1:
43*cc02d7e2SAndroid Build Coastguard Worker            fail("When main is not provided, srcs must be of size 1.")
44*cc02d7e2SAndroid Build Coastguard Worker        main = srcs[0]
45*cc02d7e2SAndroid Build Coastguard Worker    deps = [] if deps == None else deps
46*cc02d7e2SAndroid Build Coastguard Worker    data = [] if data == None else data
47*cc02d7e2SAndroid Build Coastguard Worker    lib_name = name + ".gevent.lib"
48*cc02d7e2SAndroid Build Coastguard Worker    supplied_python_version = kwargs.pop("python_version", "")
49*cc02d7e2SAndroid Build Coastguard Worker    if supplied_python_version and supplied_python_version != "PY3":
50*cc02d7e2SAndroid Build Coastguard Worker        fail("py_grpc_gevent_test only supports python_version=PY3")
51*cc02d7e2SAndroid Build Coastguard Worker    native.py_library(
52*cc02d7e2SAndroid Build Coastguard Worker        name = lib_name,
53*cc02d7e2SAndroid Build Coastguard Worker        srcs = srcs,
54*cc02d7e2SAndroid Build Coastguard Worker    )
55*cc02d7e2SAndroid Build Coastguard Worker    augmented_deps = deps + [
56*cc02d7e2SAndroid Build Coastguard Worker        ":{}".format(lib_name),
57*cc02d7e2SAndroid Build Coastguard Worker        requirement("gevent"),
58*cc02d7e2SAndroid Build Coastguard Worker    ]
59*cc02d7e2SAndroid Build Coastguard Worker    if _GRPC_LIB not in augmented_deps:
60*cc02d7e2SAndroid Build Coastguard Worker        augmented_deps.append(_GRPC_LIB)
61*cc02d7e2SAndroid Build Coastguard Worker
62*cc02d7e2SAndroid Build Coastguard Worker    # The main file needs to be in the same package as the test file.
63*cc02d7e2SAndroid Build Coastguard Worker    copied_main_name = name + _COPIED_MAIN_SUFFIX
64*cc02d7e2SAndroid Build Coastguard Worker    copied_main_filename = copied_main_name + ".py"
65*cc02d7e2SAndroid Build Coastguard Worker    native.genrule(
66*cc02d7e2SAndroid Build Coastguard Worker        name = copied_main_name,
67*cc02d7e2SAndroid Build Coastguard Worker        srcs = ["//bazel:_gevent_test_main.py"],
68*cc02d7e2SAndroid Build Coastguard Worker        outs = [copied_main_filename],
69*cc02d7e2SAndroid Build Coastguard Worker        cmd = "cp $< $@",
70*cc02d7e2SAndroid Build Coastguard Worker    )
71*cc02d7e2SAndroid Build Coastguard Worker
72*cc02d7e2SAndroid Build Coastguard Worker    # TODO(https://github.com/grpc/grpc/issues/27542): Remove once gevent is deemed non-flaky.
73*cc02d7e2SAndroid Build Coastguard Worker    if "flaky" in kwargs:
74*cc02d7e2SAndroid Build Coastguard Worker        kwargs.pop("flaky")
75*cc02d7e2SAndroid Build Coastguard Worker
76*cc02d7e2SAndroid Build Coastguard Worker    native.py_test(
77*cc02d7e2SAndroid Build Coastguard Worker        name = name + ".gevent",
78*cc02d7e2SAndroid Build Coastguard Worker        args = [name],
79*cc02d7e2SAndroid Build Coastguard Worker        data = data,
80*cc02d7e2SAndroid Build Coastguard Worker        deps = augmented_deps,
81*cc02d7e2SAndroid Build Coastguard Worker        srcs = [copied_main_filename],
82*cc02d7e2SAndroid Build Coastguard Worker        main = copied_main_filename,
83*cc02d7e2SAndroid Build Coastguard Worker        python_version = "PY3",
84*cc02d7e2SAndroid Build Coastguard Worker        flaky = False,
85*cc02d7e2SAndroid Build Coastguard Worker        **kwargs
86*cc02d7e2SAndroid Build Coastguard Worker    )
87