From 96d27634a4b53167a78a79aa201decd615afd485 Mon Sep 17 00:00:00 2001 From: Hannah Shi Date: Tue, 27 Sep 2022 14:49:38 -0700 Subject: [PATCH] run ios CronetTest from bazel (#30439) --- BUILD | 7 +++++ WORKSPACE | 29 +++++++++++++++++ src/objective-c/BUILD | 12 +++++++ .../grpc_objc_internal_library.bzl | 1 + src/objective-c/tests/BUILD | 31 ++++++++++++++++++- .../tests/CronetTests/CronetUnitTests.mm | 4 +++ .../InteropTestsRemoteWithCronet.m | 2 +- test/core/end2end/generate_tests.bzl | 3 ++ .../internal_ci/macos/grpc_objc_bazel_test.sh | 1 + tools/run_tests/run_tests.py | 8 ----- 10 files changed, 88 insertions(+), 10 deletions(-) diff --git a/BUILD b/BUILD index 53f0c32c660..4274b6a2bd7 100644 --- a/BUILD +++ b/BUILD @@ -706,6 +706,13 @@ grpc_cc_library( ], ) +grpc_cc_library( + name = "grpc_cronet_hdrs", + hdrs = [ + "include/grpc/grpc_cronet.h", + ], +) + grpc_cc_library( name = "tchar", srcs = [ diff --git a/WORKSPACE b/WORKSPACE index 782abc63b46..58ea71d6c8f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -88,3 +88,32 @@ pip_install( name = "grpc_python_dependencies", requirements = "@com_github_grpc_grpc//:requirements.bazel.txt", ) + +http_archive( + name = "build_bazel_rules_swift", + sha256 = "12057b7aa904467284eee640de5e33853e51d8e31aae50b3fb25d2823d51c6b8", + url = "https://github.com/bazelbuild/rules_swift/releases/download/1.0.0/rules_swift.1.0.0.tar.gz", +) + +http_archive( + name = "rules_pods", + urls = ["https://github.com/pinterest/PodToBUILD/releases/download/4.1.0-412495/PodToBUILD.zip"], +) + +load( + "@build_bazel_rules_swift//swift:repositories.bzl", + "swift_rules_dependencies", +) +load( + "@rules_pods//BazelExtensions:workspace.bzl", + "new_pod_repository", +) + +swift_rules_dependencies() + +new_pod_repository( + name = "CronetFramework", + is_dynamic_framework = True, + podspec_url = "https://raw.githubusercontent.com/CocoaPods/Specs/master/Specs/2/e/1/CronetFramework/0.0.5/CronetFramework.podspec.json", + url = "https://storage.googleapis.com/grpc-precompiled-binaries/cronet/Cronet.framework-v0.0.5.zip", +) diff --git a/src/objective-c/BUILD b/src/objective-c/BUILD index f75edc8adc1..0a9fdba7ad7 100644 --- a/src/objective-c/BUILD +++ b/src/objective-c/BUILD @@ -239,6 +239,18 @@ grpc_objc_library( ], ) +grpc_objc_library( + name = "grpc_objc_client_core_cronet_testing", + srcs = glob(["GRPCClient/private/GRPCCore/GRPCCoreCronet/*.m"]), + hdrs = glob(["GRPCClient/private/GRPCCore/GRPCCoreCronet/*.h"]), + deps = [ + ":grpc_objc_client_core_internal_testing", + "//:grpc_cronet_hdrs", + "//src/core/ext/transport/cronet:grpc_transport_cronet_client_secure", + "@CronetFramework", + ], +) + grpc_objc_library( name = "proto_objc_rpc_internal_testing", srcs = [ diff --git a/src/objective-c/grpc_objc_internal_library.bzl b/src/objective-c/grpc_objc_internal_library.bzl index 26ce7e59b0e..5d884867e20 100644 --- a/src/objective-c/grpc_objc_internal_library.bzl +++ b/src/objective-c/grpc_objc_internal_library.bzl @@ -163,6 +163,7 @@ def grpc_objc_testing_library( defines = defines, includes = includes, deps = deps + additional_deps, + testonly = 1, ) def local_objc_grpc_library(name, deps, testing = True, srcs = [], use_well_known_protos = False, **kwargs): diff --git a/src/objective-c/tests/BUILD b/src/objective-c/tests/BUILD index 1b359e8bde4..2b333441b94 100644 --- a/src/objective-c/tests/BUILD +++ b/src/objective-c/tests/BUILD @@ -22,6 +22,7 @@ load( "local_objc_grpc_library", "proto_library_objc_wrapper", ) +load("//test/core/end2end:generate_tests.bzl", "grpc_end2end_tests") load("@build_bazel_rules_apple//apple:resources.bzl", "apple_resource_bundle") load("@build_bazel_rules_apple//apple:macos.bzl", "macos_unit_test") load("@build_bazel_rules_apple//apple:tvos.bzl", "tvos_application", "tvos_unit_test") @@ -32,6 +33,8 @@ package(default_visibility = ["//visibility:public"]) exports_files(["LICENSE"]) +grpc_end2end_tests() + proto_library_objc_wrapper( name = "messages_proto", srcs = ["RemoteTestClient/messages.proto"], @@ -171,7 +174,26 @@ grpc_objc_testing_library( hdrs = ["MacTests/StressTests.h"], ) -grpc_objc_ios_unit_test( +grpc_objc_testing_library( + name = "CronetTests-lib", + srcs = [ + "ConfigureCronet.m", + ] + glob([ + "CronetTests/*.m", + "CronetTests/*.mm", + ]), + hdrs = [ + "ConfigureCronet.h", + ], + deps = [ + "InteropTests-lib", + "//src/objective-c:grpc_objc_client_core_cronet_testing", + "//test/core/end2end:end2end_tests", + "//third_party/objective_c/Cronet:cronet_c_for_grpc", + ], +) + +grpc_objc_testing_library( name = "UnitTests", deps = [ ":APIv2Tests-lib", @@ -205,6 +227,13 @@ grpc_objc_ios_unit_test( ], ) +grpc_objc_ios_unit_test( + name = "CronetTests", + deps = [ + "CronetTests-lib", + ], +) + macos_unit_test( name = "MacTests", minimum_os_version = "10.10", diff --git a/src/objective-c/tests/CronetTests/CronetUnitTests.mm b/src/objective-c/tests/CronetTests/CronetUnitTests.mm index 6bbb75ac550..fa56f442006 100644 --- a/src/objective-c/tests/CronetTests/CronetUnitTests.mm +++ b/src/objective-c/tests/CronetTests/CronetUnitTests.mm @@ -39,7 +39,11 @@ #import "test/core/end2end/data/ssl_test_data.h" #import "test/core/util/test_config.h" +#if COCOAPODS #import +#else +#import +#endif static void drain_cq(grpc_completion_queue *cq) { grpc_event ev; diff --git a/src/objective-c/tests/CronetTests/InteropTestsRemoteWithCronet.m b/src/objective-c/tests/CronetTests/InteropTestsRemoteWithCronet.m index 2861311b229..4d86d583987 100644 --- a/src/objective-c/tests/CronetTests/InteropTestsRemoteWithCronet.m +++ b/src/objective-c/tests/CronetTests/InteropTestsRemoteWithCronet.m @@ -23,7 +23,7 @@ #import #import "../ConfigureCronet.h" -#import "InteropTests.h" +#import "../InteropTests/InteropTests.h" // The server address is derived from preprocessor macro, which is // in turn derived from environment variable of the same name. diff --git a/test/core/end2end/generate_tests.bzl b/test/core/end2end/generate_tests.bzl index d0d50f2bdeb..0671601d658 100755 --- a/test/core/end2end/generate_tests.bzl +++ b/test/core/end2end/generate_tests.bzl @@ -441,6 +441,9 @@ def grpc_end2end_tests(): "//:grpc_http_filters", "//:event_log", ], + visibility = [ + "//src/objective-c/tests:__subpackages__", + ], ) for f, fopt in END2END_FIXTURES.items(): bin_name = "%s_test" % f diff --git a/tools/internal_ci/macos/grpc_objc_bazel_test.sh b/tools/internal_ci/macos/grpc_objc_bazel_test.sh index 08e73fe7718..ef1abdc4818 100755 --- a/tools/internal_ci/macos/grpc_objc_bazel_test.sh +++ b/tools/internal_ci/macos/grpc_objc_bazel_test.sh @@ -57,6 +57,7 @@ TEST_TARGETS=( //src/objective-c/tests:InteropTestsRemote //src/objective-c/tests:MacTests //src/objective-c/tests:UnitTests + //src/objective-c/tests:CronetTests # codegen plugin tests //src/objective-c/tests:objc_codegen_plugin_test //src/objective-c/tests:objc_codegen_plugin_option_test diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 5e635a8f5fd..30803241251 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -1013,14 +1013,6 @@ class ObjCLanguage(object): shortname='ios-test-cfstream-tests', cpu_cost=1e6, environ=_FORCE_ENVIRON_FOR_WRAPPERS)) - # TODO(jtattermusch): Create bazel target for the test and remove the test from here - # (how does one add the cronet dependency in bazel?) - out.append( - self.config.job_spec(['src/objective-c/tests/run_one_test.sh'], - timeout_seconds=60 * 60, - shortname='ios-test-cronettests', - cpu_cost=1e6, - environ={'SCHEME': 'CronetTests'})) # TODO(jtattermusch): Create bazel target for the test and remove the test from here. out.append( self.config.job_spec(['src/objective-c/tests/run_one_test.sh'],