From 3980ed706a5ad43abbe5ac5e4a3c7843188ca630 Mon Sep 17 00:00:00 2001 From: AJ Heller Date: Tue, 24 Jan 2023 09:54:40 -0800 Subject: [PATCH] [EventEngine] Refactoring the EventEngine Test Suite: Part 1 (#32127) * Add back EventEngine test suite tools (echo binary) This reverts commit d5c12195a26e82b4f48d96333c8be5a570111792. * more refactoring * fix * Automated change: Fix sanity tests * fix * fix posix oracle build def * fix FuzzingEventEngine includes * sanitize * tidy and rm DNS * fix cfstream includes * header guards * format & fix deps * fix * fix * iwyu * fix * remove redundant code * reviewer feedback Co-authored-by: drfloob --- CMakeLists.txt | 54 +++--- bazel/grpc_build_system.bzl | 2 +- build_autogenerated.yaml | 93 +++++----- test/core/event_engine/BUILD | 22 +++ .../event_engine_test_utils.cc | 14 +- .../event_engine_test_utils.h | 39 ++++- test/core/event_engine/posix/BUILD | 8 +- .../event_engine/posix/posix_endpoint_test.cc | 4 +- .../posix/posix_event_engine_connect_test.cc | 2 +- test/core/event_engine/test_suite/BUILD | 141 +++------------- test/core/event_engine/test_suite/README.md | 48 +++++- .../test_suite/cf_event_engine_test.cc | 4 +- ...test.cc => event_engine_test_framework.cc} | 2 +- ...e_test.h => event_engine_test_framework.h} | 6 +- .../test_suite/fuzzing_event_engine_test.cc | 4 +- test/core/event_engine/test_suite/posix/BUILD | 61 +++++++ .../{ => posix}/oracle_event_engine_posix.cc | 2 +- .../{ => posix}/oracle_event_engine_posix.h | 8 +- .../oracle_event_engine_posix_test.cc | 4 +- .../test_suite/posix_event_engine_test.cc | 10 +- test/core/event_engine/test_suite/tests/BUILD | 88 ++++++++++ .../test_suite/{ => tests}/client_test.cc | 19 ++- .../test_suite/tests/client_test.h | 25 +++ .../test_suite/{ => tests}/dns_test.cc | 10 +- .../event_engine/test_suite/tests/dns_test.h | 25 +++ .../test_suite/{ => tests}/server_test.cc | 12 +- .../test_suite/tests/server_test.h | 25 +++ .../test_suite/{ => tests}/timer_test.cc | 10 +- .../test_suite/tests/timer_test.h | 25 +++ test/core/event_engine/test_suite/tools/BUILD | 70 ++++++++ .../test_suite/tools/echo_client.cc | 159 ++++++++++++++++++ .../tools/posix_event_engine_factory.cc | 46 +++++ .../tools/windows_event_engine_factory.cc | 45 +++++ .../test_suite/windows_event_engine_test.cc | 4 +- test/core/iomgr/endpoint_pair_test.cc | 1 - 35 files changed, 852 insertions(+), 240 deletions(-) rename test/core/event_engine/{test_suite => }/event_engine_test_utils.cc (95%) rename test/core/event_engine/{test_suite => }/event_engine_test_utils.h (82%) rename test/core/event_engine/test_suite/{event_engine_test.cc => event_engine_test_framework.cc} (94%) rename test/core/event_engine/test_suite/{event_engine_test.h => event_engine_test_framework.h} (98%) create mode 100644 test/core/event_engine/test_suite/posix/BUILD rename test/core/event_engine/test_suite/{ => posix}/oracle_event_engine_posix.cc (99%) rename test/core/event_engine/test_suite/{ => posix}/oracle_event_engine_posix.h (95%) rename test/core/event_engine/test_suite/{ => posix}/oracle_event_engine_posix_test.cc (87%) create mode 100644 test/core/event_engine/test_suite/tests/BUILD rename test/core/event_engine/test_suite/{ => tests}/client_test.cc (96%) create mode 100644 test/core/event_engine/test_suite/tests/client_test.h rename test/core/event_engine/test_suite/{ => tests}/dns_test.cc (79%) create mode 100644 test/core/event_engine/test_suite/tests/dns_test.h rename test/core/event_engine/test_suite/{ => tests}/server_test.cc (97%) create mode 100644 test/core/event_engine/test_suite/tests/server_test.h rename test/core/event_engine/test_suite/{ => tests}/timer_test.cc (97%) create mode 100644 test/core/event_engine/test_suite/tests/timer_test.h create mode 100644 test/core/event_engine/test_suite/tools/BUILD create mode 100644 test/core/event_engine/test_suite/tools/echo_client.cc create mode 100644 test/core/event_engine/test_suite/tools/posix_event_engine_factory.cc create mode 100644 test/core/event_engine/test_suite/tools/windows_event_engine_factory.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 614534c9a71..d0c685e470b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7638,10 +7638,10 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(cf_event_engine_test src/core/lib/event_engine/cf_engine/cf_engine.cc + test/core/event_engine/event_engine_test_utils.cc test/core/event_engine/test_suite/cf_event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test_utils.cc - test/core/event_engine/test_suite/timer_test.cc + test/core/event_engine/test_suite/event_engine_test_framework.cc + test/core/event_engine/test_suite/tests/timer_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) @@ -7670,6 +7670,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_unsecure grpc_test_util ) @@ -11631,11 +11632,11 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.h ${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.grpc.pb.h + test/core/event_engine/event_engine_test_utils.cc test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.cc - test/core/event_engine/test_suite/event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test_utils.cc + test/core/event_engine/test_suite/event_engine_test_framework.cc test/core/event_engine/test_suite/fuzzing_event_engine_test.cc - test/core/event_engine/test_suite/timer_test.cc + test/core/event_engine/test_suite/tests/timer_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) @@ -11664,6 +11665,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_unsecure grpc_test_util ) @@ -15495,12 +15497,12 @@ if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(oracle_event_engine_posix_test - test/core/event_engine/test_suite/client_test.cc - test/core/event_engine/test_suite/event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test_utils.cc - test/core/event_engine/test_suite/oracle_event_engine_posix.cc - test/core/event_engine/test_suite/oracle_event_engine_posix_test.cc - test/core/event_engine/test_suite/server_test.cc + test/core/event_engine/event_engine_test_utils.cc + test/core/event_engine/test_suite/event_engine_test_framework.cc + test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc + test/core/event_engine/test_suite/posix/oracle_event_engine_posix_test.cc + test/core/event_engine/test_suite/tests/client_test.cc + test/core/event_engine/test_suite/tests/server_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) @@ -15529,6 +15531,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_unsecure grpc_test_util ) @@ -16276,11 +16279,11 @@ if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(posix_endpoint_test + test/core/event_engine/event_engine_test_utils.cc test/core/event_engine/posix/posix_endpoint_test.cc test/core/event_engine/posix/posix_engine_test_utils.cc - test/core/event_engine/test_suite/event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test_utils.cc - test/core/event_engine/test_suite/oracle_event_engine_posix.cc + test/core/event_engine/test_suite/event_engine_test_framework.cc + test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) @@ -16309,6 +16312,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_unsecure grpc_test_util ) @@ -16358,10 +16362,10 @@ if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(posix_event_engine_connect_test + test/core/event_engine/event_engine_test_utils.cc test/core/event_engine/posix/posix_event_engine_connect_test.cc - test/core/event_engine/test_suite/event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test_utils.cc - test/core/event_engine/test_suite/oracle_event_engine_posix.cc + test/core/event_engine/test_suite/event_engine_test_framework.cc + test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) @@ -16390,6 +16394,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_unsecure grpc_test_util ) @@ -16400,13 +16405,13 @@ if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(posix_event_engine_test - test/core/event_engine/test_suite/client_test.cc - test/core/event_engine/test_suite/event_engine_test.cc - test/core/event_engine/test_suite/event_engine_test_utils.cc - test/core/event_engine/test_suite/oracle_event_engine_posix.cc + test/core/event_engine/event_engine_test_utils.cc + test/core/event_engine/test_suite/event_engine_test_framework.cc + test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc test/core/event_engine/test_suite/posix_event_engine_test.cc - test/core/event_engine/test_suite/server_test.cc - test/core/event_engine/test_suite/timer_test.cc + test/core/event_engine/test_suite/tests/client_test.cc + test/core/event_engine/test_suite/tests/server_test.cc + test/core/event_engine/test_suite/tests/timer_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) @@ -16435,6 +16440,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_unsecure grpc_test_util ) diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl index bf98e744077..e4354df2b9b 100644 --- a/bazel/grpc_build_system.bzl +++ b/bazel/grpc_build_system.bzl @@ -459,7 +459,7 @@ def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data "linkstatic": linkstatic, } - if "grpc-fuzzer" not in tags: + if "grpc-fuzzer" not in tags and "no_test_ios" not in tags: ios_cc_test( name = name, srcs = srcs, diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index 8a7edda8556..60aba34bd64 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -5491,15 +5491,17 @@ targets: language: c++ headers: - src/core/lib/event_engine/cf_engine/cf_engine.h - - test/core/event_engine/test_suite/event_engine_test.h - - test/core/event_engine/test_suite/event_engine_test_utils.h + - test/core/event_engine/event_engine_test_utils.h + - test/core/event_engine/test_suite/event_engine_test_framework.h + - test/core/event_engine/test_suite/tests/timer_test.h src: - src/core/lib/event_engine/cf_engine/cf_engine.cc + - test/core/event_engine/event_engine_test_utils.cc - test/core/event_engine/test_suite/cf_event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test_utils.cc - - test/core/event_engine/test_suite/timer_test.cc + - test/core/event_engine/test_suite/event_engine_test_framework.cc + - test/core/event_engine/test_suite/tests/timer_test.cc deps: + - grpc_unsecure - grpc_test_util platforms: - linux @@ -7799,17 +7801,19 @@ targets: build: test language: c++ headers: + - test/core/event_engine/event_engine_test_utils.h - test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.h - - test/core/event_engine/test_suite/event_engine_test.h - - test/core/event_engine/test_suite/event_engine_test_utils.h + - test/core/event_engine/test_suite/event_engine_test_framework.h + - test/core/event_engine/test_suite/tests/timer_test.h src: - test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.proto + - test/core/event_engine/event_engine_test_utils.cc - test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.cc - - test/core/event_engine/test_suite/event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test_utils.cc + - test/core/event_engine/test_suite/event_engine_test_framework.cc - test/core/event_engine/test_suite/fuzzing_event_engine_test.cc - - test/core/event_engine/test_suite/timer_test.cc + - test/core/event_engine/test_suite/tests/timer_test.cc deps: + - grpc_unsecure - grpc_test_util platforms: - linux @@ -9491,17 +9495,20 @@ targets: build: test language: c++ headers: - - test/core/event_engine/test_suite/event_engine_test.h - - test/core/event_engine/test_suite/event_engine_test_utils.h - - test/core/event_engine/test_suite/oracle_event_engine_posix.h + - test/core/event_engine/event_engine_test_utils.h + - test/core/event_engine/test_suite/event_engine_test_framework.h + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h + - test/core/event_engine/test_suite/tests/client_test.h + - test/core/event_engine/test_suite/tests/server_test.h src: - - test/core/event_engine/test_suite/client_test.cc - - test/core/event_engine/test_suite/event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test_utils.cc - - test/core/event_engine/test_suite/oracle_event_engine_posix.cc - - test/core/event_engine/test_suite/oracle_event_engine_posix_test.cc - - test/core/event_engine/test_suite/server_test.cc + - test/core/event_engine/event_engine_test_utils.cc + - test/core/event_engine/test_suite/event_engine_test_framework.cc + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix_test.cc + - test/core/event_engine/test_suite/tests/client_test.cc + - test/core/event_engine/test_suite/tests/server_test.cc deps: + - grpc_unsecure - grpc_test_util platforms: - linux @@ -9873,17 +9880,18 @@ targets: build: test language: c++ headers: + - test/core/event_engine/event_engine_test_utils.h - test/core/event_engine/posix/posix_engine_test_utils.h - - test/core/event_engine/test_suite/event_engine_test.h - - test/core/event_engine/test_suite/event_engine_test_utils.h - - test/core/event_engine/test_suite/oracle_event_engine_posix.h + - test/core/event_engine/test_suite/event_engine_test_framework.h + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h src: + - test/core/event_engine/event_engine_test_utils.cc - test/core/event_engine/posix/posix_endpoint_test.cc - test/core/event_engine/posix/posix_engine_test_utils.cc - - test/core/event_engine/test_suite/event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test_utils.cc - - test/core/event_engine/test_suite/oracle_event_engine_posix.cc + - test/core/event_engine/test_suite/event_engine_test_framework.cc + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc deps: + - grpc_unsecure - grpc_test_util platforms: - linux @@ -9907,15 +9915,16 @@ targets: build: test language: c++ headers: - - test/core/event_engine/test_suite/event_engine_test.h - - test/core/event_engine/test_suite/event_engine_test_utils.h - - test/core/event_engine/test_suite/oracle_event_engine_posix.h + - test/core/event_engine/event_engine_test_utils.h + - test/core/event_engine/test_suite/event_engine_test_framework.h + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h src: + - test/core/event_engine/event_engine_test_utils.cc - test/core/event_engine/posix/posix_event_engine_connect_test.cc - - test/core/event_engine/test_suite/event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test_utils.cc - - test/core/event_engine/test_suite/oracle_event_engine_posix.cc + - test/core/event_engine/test_suite/event_engine_test_framework.cc + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc deps: + - grpc_unsecure - grpc_test_util platforms: - linux @@ -9926,18 +9935,22 @@ targets: build: test language: c++ headers: - - test/core/event_engine/test_suite/event_engine_test.h - - test/core/event_engine/test_suite/event_engine_test_utils.h - - test/core/event_engine/test_suite/oracle_event_engine_posix.h + - test/core/event_engine/event_engine_test_utils.h + - test/core/event_engine/test_suite/event_engine_test_framework.h + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h + - test/core/event_engine/test_suite/tests/client_test.h + - test/core/event_engine/test_suite/tests/server_test.h + - test/core/event_engine/test_suite/tests/timer_test.h src: - - test/core/event_engine/test_suite/client_test.cc - - test/core/event_engine/test_suite/event_engine_test.cc - - test/core/event_engine/test_suite/event_engine_test_utils.cc - - test/core/event_engine/test_suite/oracle_event_engine_posix.cc + - test/core/event_engine/event_engine_test_utils.cc + - test/core/event_engine/test_suite/event_engine_test_framework.cc + - test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc - test/core/event_engine/test_suite/posix_event_engine_test.cc - - test/core/event_engine/test_suite/server_test.cc - - test/core/event_engine/test_suite/timer_test.cc + - test/core/event_engine/test_suite/tests/client_test.cc + - test/core/event_engine/test_suite/tests/server_test.cc + - test/core/event_engine/test_suite/tests/timer_test.cc deps: + - grpc_unsecure - grpc_test_util platforms: - linux diff --git a/test/core/event_engine/BUILD b/test/core/event_engine/BUILD index 80c3219099f..38575054f59 100644 --- a/test/core/event_engine/BUILD +++ b/test/core/event_engine/BUILD @@ -189,3 +189,25 @@ grpc_cc_test( "//src/core:iomgr_port", ], ) + +grpc_cc_library( + name = "event_engine_test_utils", + testonly = True, + srcs = ["event_engine_test_utils.cc"], + hdrs = ["event_engine_test_utils.h"], + external_deps = [ + "absl/status", + "absl/status:statusor", + "absl/strings", + "absl/time", + ], + deps = [ + "//:gpr", + "//:grpc_unsecure", + "//src/core:channel_args_endpoint_config", + "//src/core:event_engine_tcp_socket_utils", + "//src/core:memory_quota", + "//src/core:notification", + "//src/core:time", + ], +) diff --git a/test/core/event_engine/test_suite/event_engine_test_utils.cc b/test/core/event_engine/event_engine_test_utils.cc similarity index 95% rename from test/core/event_engine/test_suite/event_engine_test_utils.cc rename to test/core/event_engine/event_engine_test_utils.cc index 79aa00c07e5..f26bd80e926 100644 --- a/test/core/event_engine/test_suite/event_engine_test_utils.cc +++ b/test/core/event_engine/event_engine_test_utils.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "test/core/event_engine/test_suite/event_engine_test_utils.h" +#include "test/core/event_engine/event_engine_test_utils.h" #include @@ -38,6 +38,7 @@ #include "src/core/lib/event_engine/channel_args_endpoint_config.h" #include "src/core/lib/event_engine/tcp_socket_utils.h" #include "src/core/lib/gprpp/notification.h" +#include "src/core/lib/gprpp/time.h" #include "src/core/lib/resource_quota/memory_quota.h" // IWYU pragma: no_include @@ -46,10 +47,8 @@ namespace grpc_event_engine { namespace experimental { namespace { - constexpr int kMinMessageSize = 1024; constexpr int kMaxMessageSize = 4096; - } // namespace // Returns a random message with bounded length. @@ -78,11 +77,12 @@ std::string GetNextSendMessage() { void WaitForSingleOwner(std::shared_ptr&& engine) { while (engine.use_count() > 1) { + GRPC_LOG_EVERY_N_SEC(2, "engine.use_count() = %ld", engine.use_count()); absl::SleepFor(absl::Milliseconds(100)); } } -void AppendStringToSliceBuffer(SliceBuffer* buf, std::string data) { +void AppendStringToSliceBuffer(SliceBuffer* buf, absl::string_view data) { buf->Append(Slice::FromCopiedString(data)); } @@ -97,7 +97,7 @@ std::string ExtractSliceBufferIntoString(SliceBuffer* buf) { return tmp; } -absl::Status SendValidatePayload(std::string data, +absl::Status SendValidatePayload(absl::string_view data, EventEngine::Endpoint* send_endpoint, EventEngine::Endpoint* receive_endpoint) { GPR_ASSERT(receive_endpoint != nullptr && send_endpoint != nullptr); @@ -145,7 +145,7 @@ absl::Status SendValidatePayload(std::string data, // Check if data written == data read std::string data_read = ExtractSliceBufferIntoString(&read_store_buf); if (data != data_read) { - gpr_log(GPR_INFO, "Data written = %s", data.c_str()); + gpr_log(GPR_INFO, "Data written = %s", data.data()); gpr_log(GPR_INFO, "Data read = %s", data_read.c_str()); return absl::CancelledError("Data read != Data written"); } @@ -153,7 +153,7 @@ absl::Status SendValidatePayload(std::string data, } absl::Status ConnectionManager::BindAndStartListener( - std::vector addrs, bool listener_type_oracle) { + const std::vector& addrs, bool listener_type_oracle) { grpc_core::MutexLock lock(&mu_); if (addrs.empty()) { return absl::InvalidArgumentError( diff --git a/test/core/event_engine/test_suite/event_engine_test_utils.h b/test/core/event_engine/event_engine_test_utils.h similarity index 82% rename from test/core/event_engine/test_suite/event_engine_test_utils.h rename to test/core/event_engine/event_engine_test_utils.h index 2da9acfacb4..c64b8a0b864 100644 --- a/test/core/event_engine/test_suite/event_engine_test_utils.h +++ b/test/core/event_engine/event_engine_test_utils.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_UTILS_H -#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_UTILS_H +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_EVENT_ENGINE_TEST_UTILS_H +#define GRPC_TEST_CORE_EVENT_ENGINE_EVENT_ENGINE_TEST_UTILS_H #include #include @@ -25,6 +25,7 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" +#include "absl/strings/string_view.h" #include #include @@ -39,8 +40,6 @@ using EventEngineFactory = std::function< namespace grpc_event_engine { namespace experimental { -void AppendStringToSliceBuffer(SliceBuffer* buf, std::string data); - std::string ExtractSliceBufferIntoString(SliceBuffer* buf); // Returns a random message with bounded length. @@ -55,7 +54,7 @@ void WaitForSingleOwner(std::shared_ptr&& engine); // written by the sender_endpoint and read by the receiver_endpoint. It // returns OK status only if data written == data read. It also blocks the // calling thread until said Write and Read operations are complete. -absl::Status SendValidatePayload(std::string data, +absl::Status SendValidatePayload(absl::string_view data, EventEngine::Endpoint* send_endpoint, EventEngine::Endpoint* receive_endpoint); @@ -76,7 +75,7 @@ class ConnectionManager { // It creates and starts a listener bound to all the specified list of // addresses. If successful, return OK status. The type of the listener is // determined by the 2nd argument. - absl::Status BindAndStartListener(std::vector addrs, + absl::Status BindAndStartListener(const std::vector& addrs, bool listener_type_oracle = true); // If connection is successful, returns a tuple containing: @@ -132,7 +131,33 @@ class ConnectionManager { std::unique_ptr oracle_event_engine_; }; +void AppendStringToSliceBuffer(SliceBuffer* buf, absl::string_view data); + +class NotifyOnDelete { + public: + explicit NotifyOnDelete(grpc_core::Notification* signal) : signal_(signal) {} + NotifyOnDelete(const NotifyOnDelete&) = delete; + NotifyOnDelete& operator=(const NotifyOnDelete&) = delete; + NotifyOnDelete(NotifyOnDelete&& other) noexcept { + signal_ = other.signal_; + other.signal_ = nullptr; + } + NotifyOnDelete& operator=(NotifyOnDelete&& other) noexcept { + signal_ = other.signal_; + other.signal_ = nullptr; + return *this; + } + ~NotifyOnDelete() { + if (signal_ != nullptr) { + signal_->Notify(); + } + } + + private: + grpc_core::Notification* signal_; +}; + } // namespace experimental } // namespace grpc_event_engine -#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_UTILS_H +#endif // GRPC_TEST_CORE_EVENT_ENGINE_EVENT_ENGINE_TEST_UTILS_H diff --git a/test/core/event_engine/posix/BUILD b/test/core/event_engine/posix/BUILD index b62ff58b611..a08236e0548 100644 --- a/test/core/event_engine/posix/BUILD +++ b/test/core/event_engine/posix/BUILD @@ -192,9 +192,9 @@ grpc_cc_test( "//src/core:posix_event_engine_endpoint", "//src/core:posix_event_engine_event_poller", "//src/core:posix_event_engine_poller_posix_default", + "//test/core/event_engine:event_engine_test_utils", "//test/core/event_engine/posix:posix_engine_test_utils", - "//test/core/event_engine/test_suite:conformance_test_base_lib", - "//test/core/event_engine/test_suite:oracle_event_engine_posix", + "//test/core/event_engine/test_suite/posix:oracle_event_engine_posix", "//test/core/util:grpc_test_util", ], ) @@ -236,8 +236,8 @@ grpc_cc_test( "//src/core:posix_event_engine_endpoint", "//src/core:posix_event_engine_event_poller", "//src/core:posix_event_engine_poller_posix_default", - "//test/core/event_engine/test_suite:conformance_test_base_lib", - "//test/core/event_engine/test_suite:oracle_event_engine_posix", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite/posix:oracle_event_engine_posix", "//test/core/util:grpc_test_util", ], ) diff --git a/test/core/event_engine/posix/posix_endpoint_test.cc b/test/core/event_engine/posix/posix_endpoint_test.cc index 8dabaf402dc..a2f5ce380c5 100644 --- a/test/core/event_engine/posix/posix_endpoint_test.cc +++ b/test/core/event_engine/posix/posix_endpoint_test.cc @@ -48,9 +48,9 @@ #include "src/core/lib/gprpp/notification.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" #include "src/core/lib/resource_quota/resource_quota.h" +#include "test/core/event_engine/event_engine_test_utils.h" #include "test/core/event_engine/posix/posix_engine_test_utils.h" -#include "test/core/event_engine/test_suite/event_engine_test_utils.h" -#include "test/core/event_engine/test_suite/oracle_event_engine_posix.h" +#include "test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h" #include "test/core/util/port.h" GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_poll_strategy); diff --git a/test/core/event_engine/posix/posix_event_engine_connect_test.cc b/test/core/event_engine/posix/posix_event_engine_connect_test.cc index 8dc6a48dfae..4213295c721 100644 --- a/test/core/event_engine/posix/posix_event_engine_connect_test.cc +++ b/test/core/event_engine/posix/posix_event_engine_connect_test.cc @@ -48,7 +48,7 @@ #include "src/core/lib/gprpp/notification.h" #include "src/core/lib/resource_quota/memory_quota.h" #include "src/core/lib/resource_quota/resource_quota.h" -#include "test/core/event_engine/test_suite/event_engine_test_utils.h" +#include "test/core/event_engine/event_engine_test_utils.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" diff --git a/test/core/event_engine/test_suite/BUILD b/test/core/event_engine/test_suite/BUILD index 0e733816896..ae623c3d2d8 100644 --- a/test/core/event_engine/test_suite/BUILD +++ b/test/core/event_engine/test_suite/BUILD @@ -16,66 +16,22 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_p licenses(["notice"]) -grpc_package(name = "test/core/event_engine/test_suite") - -COMMON_HEADERS = [ - "event_engine_test.h", - "event_engine_test_utils.h", -] - -grpc_cc_library( - name = "timer", - testonly = True, - srcs = ["timer_test.cc"], - hdrs = COMMON_HEADERS, - deps = [":conformance_test_base_lib"], - alwayslink = 1, -) - -grpc_cc_library( - name = "dns", - testonly = True, - srcs = ["dns_test.cc"], - hdrs = COMMON_HEADERS, - deps = [":conformance_test_base_lib"], - alwayslink = 1, -) - -grpc_cc_library( - name = "client", - testonly = True, - srcs = ["client_test.cc"], - hdrs = COMMON_HEADERS, - deps = [ - ":conformance_test_base_lib", - "//src/core:channel_args", - ], - alwayslink = 1, +grpc_package( + name = "test/core/event_engine/test_suite", + visibility = "public", ) grpc_cc_library( - name = "server", + name = "event_engine_test_framework", testonly = True, - srcs = ["server_test.cc"], - hdrs = COMMON_HEADERS, - deps = [ - ":conformance_test_base_lib", - "//src/core:channel_args", - ], - alwayslink = 1, -) - -grpc_cc_library( - name = "complete", - testonly = 1, - hdrs = COMMON_HEADERS, + srcs = ["event_engine_test_framework.cc"], + hdrs = ["event_engine_test_framework.h"], + external_deps = ["gtest"], deps = [ - ":client", - ":dns", - ":server", - ":timer", + "//:grpc", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/util:grpc_test_util", ], - alwayslink = 1, ) # -- EventEngine implementations -- @@ -89,11 +45,12 @@ grpc_cc_test( uses_event_engine = True, uses_polling = True, deps = [ - ":client", - ":oracle_event_engine_posix", - ":server", "//src/core:posix_event_engine", - "//test/core/event_engine/test_suite:timer", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite/posix:oracle_event_engine_posix", + "//test/core/event_engine/test_suite/tests:client", + "//test/core/event_engine/test_suite/tests:server", + "//test/core/event_engine/test_suite/tests:timer", ], ) @@ -107,8 +64,11 @@ grpc_cc_test( ], uses_polling = False, deps = [ + # TODO(hork): enable when the listener (or an oracle) is available + # "//test/core/event_engine/test_suite/tests:client", + "//test/core/event_engine/test_suite/tests:timer", "//src/core:windows_event_engine", - "//test/core/event_engine/test_suite:timer", + "//test/core/event_engine:event_engine_test_utils", ], ) @@ -121,8 +81,8 @@ grpc_cc_test( ], uses_polling = False, deps = [ - ":timer", "//src/core:cf_event_engine", + "//test/core/event_engine/test_suite/tests:timer", ], ) @@ -136,65 +96,6 @@ grpc_cc_test( uses_polling = False, deps = [ "//test/core/event_engine/fuzzing_event_engine", - "//test/core/event_engine/test_suite:timer", - ], -) - -# -- Internal targets -- - -grpc_cc_library( - name = "oracle_event_engine_posix", - testonly = True, - srcs = ["oracle_event_engine_posix.cc"], - hdrs = ["oracle_event_engine_posix.h"], - tags = [ - "cpu:10", - "no_windows", - ], - visibility = ["//test:__subpackages__"], - deps = [ - ":conformance_test_base_lib", - "//:grpc", - "//test/core/util:grpc_test_util", - ], -) - -grpc_cc_test( - name = "oracle_event_engine_posix_test", - srcs = ["oracle_event_engine_posix_test.cc"], - external_deps = ["gtest"], - language = "C++", - tags = [ - "no_test_ios", - "no_windows", - ], - # TODO(vignesbabu): This is required because the oracle event engine uses - # poll syscall. If uses_polling is set to False, there will be an attempt - # to run this test with GRPC_POLL_STRATEGY=none which will hijack the poll - # c-wrapper causing the test to fail. A more generic posix oracle event - # engine design which doesn't rely on poll is required. - uses_polling = True, - deps = [ - ":client", - ":oracle_event_engine_posix", - ":server", - "//:grpc", - "//test/core/util:grpc_test_util", - ], -) - -grpc_cc_library( - name = "conformance_test_base_lib", - testonly = True, - srcs = [ - "event_engine_test.cc", - "event_engine_test_utils.cc", - ], - hdrs = COMMON_HEADERS, - external_deps = ["gtest"], - visibility = ["@grpc:public"], - deps = [ - "//:grpc", - "//test/core/util:grpc_test_util", + "//test/core/event_engine/test_suite/tests:timer", ], ) diff --git a/test/core/event_engine/test_suite/README.md b/test/core/event_engine/test_suite/README.md index fd428aee290..cb4c7706e94 100644 --- a/test/core/event_engine/test_suite/README.md +++ b/test/core/event_engine/test_suite/README.md @@ -1,8 +1,10 @@ A reusable test suite for EventEngine implementations. +# Customizing tests for your EventEngine implementation + To exercise a custom EventEngine, create a new bazel test target that links -against the `//test/core/event_engine/test_suite:complete` library, and provide -a testing `main` function that sets a custom EventEngine factory. +against some set of targets in the `//test/core/event_engine/test_suite/tests/...` +folder, and provide a testing `main` function that sets a custom EventEngine factory. Your custom test target will look something like: @@ -11,7 +13,7 @@ grpc_cc_test( name = "my_custom_event_engine_test", srcs = ["my_custom_event_engine_test.cc"], uses_polling = False, - deps = ["//test/core/event_engine/test_suite:complete"], + deps = ["//test/core/event_engine/test_suite/tests:timer"], ) ``` @@ -19,7 +21,7 @@ And the main function will be similar to: ``` #include "path/to/my_custom_event_engine.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); @@ -33,7 +35,37 @@ int main(int argc, char** argv) { Alternatively, if you only want to exercise a subset of the conformance tests, you could depend on any subset of the following: -* `//test/core/event_engine/test_suite:timer` -* `//test/core/event_engine/test_suite:dns` -* `//test/core/event_engine/test_suite:client` -* `//test/core/event_engine/test_suite:server` +* `//test/core/event_engine/test_suite/tests:timer` +* `//test/core/event_engine/test_suite/tests:dns` +* `//test/core/event_engine/test_suite/tests:client` +* `//test/core/event_engine/test_suite/tests:server` + +# Useful testing tools + +The suite also provides [tools](tools/) that let you exercise your custom EventEngine in other ways. +For example, the `echo_client` library allows you to prop up a TCP echo client based on your EventEngine::Connect and ::Endpoint implementations, and communicate with a remote TCP listener of your choosing. + +You'll need to provide the following code + +``` +# tools/BUILD: +grpc_cc_binary( + name = "my_event_engine_echo_client", + srcs = ["my_event_engine_factory.cc"], + deps = ["echo_client"], +) + +# tools/my_event_engine_factory.cc: an implementation of CustomEventEngineFactory +absl::AnyInvocable< + std::unique_ptr(void)> +CustomEventEngineFactory() { + return []() { + return std::make_unique< + grpc_event_engine::experimental::WindowsEventEngine>(); + }; +} +``` + +To exercise the echo client, run `bazel run //test/core/event_engine/test_suite/tools:my_event_engine_echo_client`, and in a separate terminal, open something like netcat to run a TCP listener and communicate with the client. + +Each tool is documented more fully in its source file. diff --git a/test/core/event_engine/test_suite/cf_event_engine_test.cc b/test/core/event_engine/test_suite/cf_event_engine_test.cc index 447d8f3e3fb..1f3c800902c 100644 --- a/test/core/event_engine/test_suite/cf_event_engine_test.cc +++ b/test/core/event_engine/test_suite/cf_event_engine_test.cc @@ -18,7 +18,8 @@ #include #include "src/core/lib/event_engine/cf_engine/cf_engine.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" +#include "test/core/event_engine/test_suite/tests/timer_test.h" #include "test/core/util/test_config.h" int main(int argc, char** argv) { @@ -28,6 +29,7 @@ int main(int argc, char** argv) { return std::make_unique(); }; SetEventEngineFactories(factory, factory); + grpc_event_engine::experimental::InitTimerTests(); // TODO(ctiller): EventEngine temporarily needs grpc to be initialized first // until we clear out the iomgr shutdown code. grpc_init(); diff --git a/test/core/event_engine/test_suite/event_engine_test.cc b/test/core/event_engine/test_suite/event_engine_test_framework.cc similarity index 94% rename from test/core/event_engine/test_suite/event_engine_test.cc rename to test/core/event_engine/test_suite/event_engine_test_framework.cc index c852067b79e..70048cd2d9b 100644 --- a/test/core/event_engine/test_suite/event_engine_test.cc +++ b/test/core/event_engine/test_suite/event_engine_test_framework.cc @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" #include diff --git a/test/core/event_engine/test_suite/event_engine_test.h b/test/core/event_engine/test_suite/event_engine_test_framework.h similarity index 98% rename from test/core/event_engine/test_suite/event_engine_test.h rename to test/core/event_engine/test_suite/event_engine_test_framework.h index 60b00982b36..eed6dff007a 100644 --- a/test/core/event_engine/test_suite/event_engine_test.h +++ b/test/core/event_engine/test_suite/event_engine_test_framework.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_H -#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_H +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_FRAMEWORK_H +#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_FRAMEWORK_H #include #include @@ -89,4 +89,4 @@ void SetEventEngineFactories( std::unique_ptr()> oracle_ee_factory); -#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_H +#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_FRAMEWORK_H diff --git a/test/core/event_engine/test_suite/fuzzing_event_engine_test.cc b/test/core/event_engine/test_suite/fuzzing_event_engine_test.cc index 8f01ca1ea6f..d1e1283c7ef 100644 --- a/test/core/event_engine/test_suite/fuzzing_event_engine_test.cc +++ b/test/core/event_engine/test_suite/fuzzing_event_engine_test.cc @@ -24,7 +24,8 @@ #include "absl/time/time.h" #include "test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" +#include "test/core/event_engine/test_suite/tests/timer_test.h" namespace grpc_event_engine { namespace experimental { @@ -72,5 +73,6 @@ int main(int argc, char** argv) { grpc_event_engine::experimental::ThreadedFuzzingEventEngine>(); }, nullptr); + grpc_event_engine::experimental::InitTimerTests(); return RUN_ALL_TESTS(); } diff --git a/test/core/event_engine/test_suite/posix/BUILD b/test/core/event_engine/test_suite/posix/BUILD new file mode 100644 index 00000000000..5215fa07ae9 --- /dev/null +++ b/test/core/event_engine/test_suite/posix/BUILD @@ -0,0 +1,61 @@ +# Copyright 2023 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_package") + +licenses(["notice"]) + +grpc_package(name = "test/core/event_engine/test_suite/posix") + +grpc_cc_library( + name = "oracle_event_engine_posix", + testonly = True, + srcs = ["oracle_event_engine_posix.cc"], + hdrs = ["oracle_event_engine_posix.h"], + tags = [ + "cpu:10", + "no_windows", + ], + visibility = ["//test:__subpackages__"], + deps = [ + "//:grpc", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite:event_engine_test_framework", + "//test/core/util:grpc_test_util", + ], +) + +grpc_cc_test( + name = "oracle_event_engine_posix_test", + srcs = ["oracle_event_engine_posix_test.cc"], + external_deps = ["gtest"], + language = "C++", + tags = [ + "no_test_ios", + "no_windows", + ], + # TODO(vignesbabu): This is required because the oracle event engine uses + # poll syscall. If uses_polling is set to False, there will be an attempt + # to run this test with GRPC_POLL_STRATEGY=none which will hijack the poll + # c-wrapper causing the test to fail. A more generic posix oracle event + # engine design which doesn't rely on poll is required. + uses_polling = True, + deps = [ + "oracle_event_engine_posix", + "//:grpc", + "//test/core/event_engine/test_suite/tests:client", + "//test/core/event_engine/test_suite/tests:server", + "//test/core/util:grpc_test_util", + ], +) diff --git a/test/core/event_engine/test_suite/oracle_event_engine_posix.cc b/test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc similarity index 99% rename from test/core/event_engine/test_suite/oracle_event_engine_posix.cc rename to test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc index 422af16cfaa..e5bf4f4bb88 100644 --- a/test/core/event_engine/test_suite/oracle_event_engine_posix.cc +++ b/test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "test/core/event_engine/test_suite/oracle_event_engine_posix.h" +#include "test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h" #include #include diff --git a/test/core/event_engine/test_suite/oracle_event_engine_posix.h b/test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h similarity index 95% rename from test/core/event_engine/test_suite/oracle_event_engine_posix.h rename to test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h index 0e23d09fa31..b8bba9584c0 100644 --- a/test/core/event_engine/test_suite/oracle_event_engine_posix.h +++ b/test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_ORACLE_EVENT_ENGINE_POSIX_H -#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_ORACLE_EVENT_ENGINE_POSIX_H +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_POSIX_ORACLE_EVENT_ENGINE_POSIX_H +#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_POSIX_ORACLE_EVENT_ENGINE_POSIX_H #include #include @@ -34,7 +34,7 @@ #include "src/core/lib/gprpp/notification.h" #include "src/core/lib/gprpp/sync.h" #include "src/core/lib/gprpp/thd.h" -#include "test/core/event_engine/test_suite/event_engine_test_utils.h" +#include "test/core/event_engine/event_engine_test_utils.h" namespace grpc_event_engine { namespace experimental { @@ -195,4 +195,4 @@ class PosixOracleEventEngine final : public EventEngine { } // namespace experimental } // namespace grpc_event_engine -#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_ORACLE_EVENT_ENGINE_POSIX_H +#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_POSIX_ORACLE_EVENT_ENGINE_POSIX_H diff --git a/test/core/event_engine/test_suite/oracle_event_engine_posix_test.cc b/test/core/event_engine/test_suite/posix/oracle_event_engine_posix_test.cc similarity index 87% rename from test/core/event_engine/test_suite/oracle_event_engine_posix_test.cc rename to test/core/event_engine/test_suite/posix/oracle_event_engine_posix_test.cc index fb45e1b6471..74bc62cb4b9 100644 --- a/test/core/event_engine/test_suite/oracle_event_engine_posix_test.cc +++ b/test/core/event_engine/test_suite/posix/oracle_event_engine_posix_test.cc @@ -11,11 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "test/core/event_engine/test_suite/oracle_event_engine_posix.h" +#include "test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h" #include -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" #include "test/core/util/test_config.h" int main(int argc, char** argv) { diff --git a/test/core/event_engine/test_suite/posix_event_engine_test.cc b/test/core/event_engine/test_suite/posix_event_engine_test.cc index f8e8001eae5..2e5204b57c4 100644 --- a/test/core/event_engine/test_suite/posix_event_engine_test.cc +++ b/test/core/event_engine/test_suite/posix_event_engine_test.cc @@ -20,8 +20,11 @@ #include "src/core/lib/event_engine/posix_engine/posix_engine.h" #include "src/core/lib/experiments/config.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" -#include "test/core/event_engine/test_suite/oracle_event_engine_posix.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" +#include "test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h" +#include "test/core/event_engine/test_suite/tests/client_test.h" +#include "test/core/event_engine/test_suite/tests/server_test.h" +#include "test/core/event_engine/test_suite/tests/timer_test.h" #include "test/core/util/test_config.h" int main(int argc, char** argv) { @@ -36,6 +39,9 @@ int main(int argc, char** argv) { return std::make_unique< grpc_event_engine::experimental::PosixOracleEventEngine>(); }); + grpc_event_engine::experimental::InitTimerTests(); + grpc_event_engine::experimental::InitClientTests(); + grpc_event_engine::experimental::InitServerTests(); // TODO(vigneshbabu): remove when the experiment is over grpc_core::ForceEnableExperiment("event_engine_client", true); // TODO(ctiller): EventEngine temporarily needs grpc to be initialized first diff --git a/test/core/event_engine/test_suite/tests/BUILD b/test/core/event_engine/test_suite/tests/BUILD new file mode 100644 index 00000000000..ece7abf8cfb --- /dev/null +++ b/test/core/event_engine/test_suite/tests/BUILD @@ -0,0 +1,88 @@ +# Copyright 2023 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_package") + +licenses(["notice"]) + +grpc_package( + name = "test/core/event_engine/test_suite/tests", + visibility = "public", +) + +# TODO(hork): A single InitTestSuite() call should initialize all tests. +# This can be done after each test suite specialization can explicitly opt in or out +# of tests declaratively. +# grpc_cc_library( +# name = "init", +# testonly = True, +# hdrs = ["init.h"], +# deps = [ +# "client", +# "dns", +# "server", +# "timer", +# ], +# alwayslink = 1, +# ) + +grpc_cc_library( + name = "timer", + testonly = True, + srcs = ["timer_test.cc"], + hdrs = ["timer_test.h"], + deps = [ + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite:event_engine_test_framework", + ], + alwayslink = 1, +) + +grpc_cc_library( + name = "dns", + testonly = True, + srcs = ["dns_test.cc"], + hdrs = ["dns_test.h"], + deps = [ + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite:event_engine_test_framework", + ], + alwayslink = 1, +) + +grpc_cc_library( + name = "client", + testonly = True, + srcs = ["client_test.cc"], + hdrs = ["client_test.h"], + deps = [ + "//src/core:channel_args", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite:event_engine_test_framework", + ], + alwayslink = 1, +) + +grpc_cc_library( + name = "server", + testonly = True, + srcs = ["server_test.cc"], + hdrs = ["server_test.h"], + deps = [ + "//src/core:channel_args", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/event_engine/test_suite:event_engine_test_framework", + ], + alwayslink = 1, +) diff --git a/test/core/event_engine/test_suite/client_test.cc b/test/core/event_engine/test_suite/tests/client_test.cc similarity index 96% rename from test/core/event_engine/test_suite/client_test.cc rename to test/core/event_engine/test_suite/tests/client_test.cc index 6a39da640e2..f466868fb8f 100644 --- a/test/core/event_engine/test_suite/client_test.cc +++ b/test/core/event_engine/test_suite/tests/client_test.cc @@ -44,10 +44,18 @@ #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/resource_quota/memory_quota.h" #include "src/core/lib/resource_quota/resource_quota.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" -#include "test/core/event_engine/test_suite/event_engine_test_utils.h" +#include "test/core/event_engine/event_engine_test_utils.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" #include "test/core/util/port.h" +namespace grpc_event_engine { +namespace experimental { + +void InitClientTests() {} + +} // namespace experimental +} // namespace grpc_event_engine + class EventEngineClientTest : public EventEngineTest {}; using namespace std::chrono_literals; @@ -60,6 +68,7 @@ using ::grpc_event_engine::experimental::URIToResolvedAddress; using Endpoint = ::grpc_event_engine::experimental::EventEngine::Endpoint; using Listener = ::grpc_event_engine::experimental::EventEngine::Listener; using ::grpc_event_engine::experimental::GetNextSendMessage; +using ::grpc_event_engine::experimental::NotifyOnDelete; using ::grpc_event_engine::experimental::WaitForSingleOwner; constexpr int kNumExchangedMessages = 100; @@ -79,10 +88,10 @@ TEST_F(EventEngineClientTest, ConnectToNonExistentListenerTest) { // listener. ChannelArgsEndpointConfig config; test_ee->Connect( - [&signal](absl::StatusOr> status) { + [_ = NotifyOnDelete(&signal)]( + absl::StatusOr> status) { // Connect should fail. - ASSERT_FALSE(status.ok()); - signal.Notify(); + EXPECT_FALSE(status.ok()); }, *URIToResolvedAddress(target_addr), config, memory_quota->CreateMemoryAllocator("conn-1"), 24h); diff --git a/test/core/event_engine/test_suite/tests/client_test.h b/test/core/event_engine/test_suite/tests/client_test.h new file mode 100644 index 00000000000..e35d63bc11d --- /dev/null +++ b/test/core/event_engine/test_suite/tests/client_test.h @@ -0,0 +1,25 @@ +// Copyright 2023 The gRPC Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_CLIENT_TEST_H +#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_CLIENT_TEST_H + +namespace grpc_event_engine { +namespace experimental { + +void InitClientTests(); + +} // namespace experimental +} // namespace grpc_event_engine + +#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_CLIENT_TEST_H diff --git a/test/core/event_engine/test_suite/dns_test.cc b/test/core/event_engine/test_suite/tests/dns_test.cc similarity index 79% rename from test/core/event_engine/test_suite/dns_test.cc rename to test/core/event_engine/test_suite/tests/dns_test.cc index a9bed9adf17..798a1871efb 100644 --- a/test/core/event_engine/test_suite/dns_test.cc +++ b/test/core/event_engine/test_suite/tests/dns_test.cc @@ -15,7 +15,15 @@ #include #include "src/core/lib/iomgr/exec_ctx.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" + +namespace grpc_event_engine { +namespace experimental { + +void InitDNSTests() {} + +} // namespace experimental +} // namespace grpc_event_engine class EventEngineDNSTest : public EventEngineTest {}; diff --git a/test/core/event_engine/test_suite/tests/dns_test.h b/test/core/event_engine/test_suite/tests/dns_test.h new file mode 100644 index 00000000000..6fce8041e51 --- /dev/null +++ b/test/core/event_engine/test_suite/tests/dns_test.h @@ -0,0 +1,25 @@ +// Copyright 2023 The gRPC Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_DNS_TEST_H +#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_DNS_TEST_H + +namespace grpc_event_engine { +namespace experimental { + +void InitDNSTests(); + +} // namespace experimental +} // namespace grpc_event_engine + +#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_DNS_TEST_H diff --git a/test/core/event_engine/test_suite/server_test.cc b/test/core/event_engine/test_suite/tests/server_test.cc similarity index 97% rename from test/core/event_engine/test_suite/server_test.cc rename to test/core/event_engine/test_suite/tests/server_test.cc index ae0636b1384..cf15b4a1097 100644 --- a/test/core/event_engine/test_suite/server_test.cc +++ b/test/core/event_engine/test_suite/tests/server_test.cc @@ -44,10 +44,18 @@ #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/resource_quota/memory_quota.h" #include "src/core/lib/resource_quota/resource_quota.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" -#include "test/core/event_engine/test_suite/event_engine_test_utils.h" +#include "test/core/event_engine/event_engine_test_utils.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" #include "test/core/util/port.h" +namespace grpc_event_engine { +namespace experimental { + +void InitServerTests() {} + +} // namespace experimental +} // namespace grpc_event_engine + class EventEngineServerTest : public EventEngineTest {}; using namespace std::chrono_literals; diff --git a/test/core/event_engine/test_suite/tests/server_test.h b/test/core/event_engine/test_suite/tests/server_test.h new file mode 100644 index 00000000000..a4bb1bd2fff --- /dev/null +++ b/test/core/event_engine/test_suite/tests/server_test.h @@ -0,0 +1,25 @@ +// Copyright 2023 The gRPC Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_SERVER_TEST_H +#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_SERVER_TEST_H + +namespace grpc_event_engine { +namespace experimental { + +void InitServerTests(); + +} // namespace experimental +} // namespace grpc_event_engine + +#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_SERVER_TEST_H diff --git a/test/core/event_engine/test_suite/timer_test.cc b/test/core/event_engine/test_suite/tests/timer_test.cc similarity index 97% rename from test/core/event_engine/test_suite/timer_test.cc rename to test/core/event_engine/test_suite/tests/timer_test.cc index 4e9f49d0f82..e5865851a08 100644 --- a/test/core/event_engine/test_suite/timer_test.cc +++ b/test/core/event_engine/test_suite/tests/timer_test.cc @@ -36,11 +36,19 @@ #include #include "src/core/lib/gprpp/sync.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" using ::testing::ElementsAre; using namespace std::chrono_literals; +namespace grpc_event_engine { +namespace experimental { + +void InitTimerTests() {} + +} // namespace experimental +} // namespace grpc_event_engine + class EventEngineTimerTest : public EventEngineTest { public: void ScheduleCheckCB(std::chrono::steady_clock::time_point when, diff --git a/test/core/event_engine/test_suite/tests/timer_test.h b/test/core/event_engine/test_suite/tests/timer_test.h new file mode 100644 index 00000000000..e4f9b65428e --- /dev/null +++ b/test/core/event_engine/test_suite/tests/timer_test.h @@ -0,0 +1,25 @@ +// Copyright 2023 The gRPC Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_TIMER_TEST_H +#define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_TIMER_TEST_H + +namespace grpc_event_engine { +namespace experimental { + +void InitTimerTests(); + +} // namespace experimental +} // namespace grpc_event_engine + +#endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_TESTS_TIMER_TEST_H diff --git a/test/core/event_engine/test_suite/tools/BUILD b/test/core/event_engine/test_suite/tools/BUILD new file mode 100644 index 00000000000..1dd379407e5 --- /dev/null +++ b/test/core/event_engine/test_suite/tools/BUILD @@ -0,0 +1,70 @@ +# Copyright 2022 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//bazel:grpc_build_system.bzl", "grpc_cc_binary", "grpc_cc_library", "grpc_package") + +licenses(["notice"]) + +grpc_package(name = "test/core/event_engine/test_suite/tools") + +# -- Implementations -- + +grpc_cc_binary( + name = "windows_event_engine_echo_client", + testonly = True, + srcs = ["windows_event_engine_factory.cc"], + tags = [ + "bazel_only", + "no_linux", + "no_mac", + ], + deps = [ + "echo_client", + "//src/core:windows_event_engine", + ], +) + +# TODO(hork): this needs to reuse the same configuration in the test suite. +grpc_cc_binary( + name = "posix_event_engine_echo_client", + testonly = True, + srcs = ["posix_event_engine_factory.cc"], + tags = [ + "bazel_only", + "no_windows", + ], + deps = [ + "echo_client", + "//src/core:posix_event_engine", + ], +) + +# -- Testing tools -- + +grpc_cc_library( + name = "echo_client", + testonly = True, + srcs = ["echo_client.cc"], + external_deps = [ + "absl/flags:flag", + "absl/flags:parse", + ], + language = "C++", + deps = [ + "//:gpr_platform", + "//src/core:common_event_engine_closures", + "//test/core/event_engine:event_engine_test_utils", + "//test/core/util:grpc_test_util", + ], +) diff --git a/test/core/event_engine/test_suite/tools/echo_client.cc b/test/core/event_engine/test_suite/tools/echo_client.cc new file mode 100644 index 00000000000..a597e2c07d0 --- /dev/null +++ b/test/core/event_engine/test_suite/tools/echo_client.cc @@ -0,0 +1,159 @@ +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include + +#include +#include + +#include + +// The echo client wraps an EventEngine::Connect and EventEngine::Endpoint +// implementations, allowing third-party TCP listeners to interact with your +// EventEngine client. Example usage: +// +// # in one shell +// choco install nmap +// ncat -klp 32000 +// # wait for a connection, than send data (e.g., keyboard input) +// +// # in a separate shell +// bazel run +// //test/core/event_engine/test_suite/tools:my_event_engine_echo_client + +#include +#include +#include +#include +#include + +#include "absl/flags/flag.h" +#include "absl/flags/parse.h" +#include "absl/functional/any_invocable.h" +#include "absl/status/status.h" +#include "absl/status/statusor.h" +#include "absl/strings/str_format.h" +#include "absl/strings/string_view.h" + +#include +#include +#include +#include + +#include "src/core/lib/channel/channel_args_preconditioning.h" +#include "src/core/lib/config/core_configuration.h" +#include "src/core/lib/event_engine/channel_args_endpoint_config.h" +#include "src/core/lib/event_engine/default_event_engine.h" +#include "src/core/lib/event_engine/tcp_socket_utils.h" +#include "src/core/lib/gprpp/notification.h" +#include "src/core/lib/resolver/resolver_registry.h" +#include "src/core/lib/resource_quota/memory_quota.h" + +extern absl::AnyInvocable< + std::unique_ptr(void)> +CustomEventEngineFactory(); + +ABSL_FLAG(std::string, target, "ipv4:127.0.0.1:50051", "Target string"); + +namespace { +using namespace std::chrono_literals; + +using ::grpc_event_engine::experimental::ChannelArgsEndpointConfig; +using ::grpc_event_engine::experimental::EventEngine; +using ::grpc_event_engine::experimental::GetDefaultEventEngine; +using ::grpc_event_engine::experimental::Slice; +using ::grpc_event_engine::experimental::SliceBuffer; +using ::grpc_event_engine::experimental::URIToResolvedAddress; + +void SendMessage(EventEngine::Endpoint* endpoint, int message_id) { + SliceBuffer buf; + buf.Append(Slice::FromCopiedString( + absl::StrFormat("Waiting for message %d ... \n", message_id))); + grpc_core::Notification write_done; + endpoint->Write( + [&](absl::Status status) { + GPR_ASSERT(status.ok()); + write_done.Notify(); + }, + &buf, nullptr); + write_done.WaitForNotification(); +} + +void ReceiveAndEchoMessage(EventEngine::Endpoint* endpoint, int message_id) { + SliceBuffer buf; + grpc_core::Notification read_done; + endpoint->Read( + [&](absl::Status status) { + if (!status.ok()) { + gpr_log(GPR_ERROR, "Error reading from endpoint: %s", + status.ToString().c_str()); + exit(1); + } + Slice received = buf.TakeFirst(); + gpr_log(GPR_ERROR, "Received message %d: %.*s", message_id, + static_cast(received.as_string_view().length()), + received.as_string_view().data()); + read_done.Notify(); + }, + &buf, nullptr); + read_done.WaitForNotification(); +} + +void RunUntilInterrupted() { + auto engine = GetDefaultEventEngine(); + std::unique_ptr endpoint; + grpc_core::Notification connected; + auto memory_quota = std::make_unique("bar"); + ChannelArgsEndpointConfig config{grpc_core::CoreConfiguration::Get() + .channel_args_preconditioning() + .PreconditionChannelArgs(nullptr)}; + std::string canonical_target = + grpc_core::CoreConfiguration::Get() + .resolver_registry() + .AddDefaultPrefixIfNeeded(absl::GetFlag(FLAGS_target)); + auto addr = URIToResolvedAddress(canonical_target); + GPR_ASSERT(addr.ok()); + engine->Connect( + [&](absl::StatusOr> ep) { + if (!ep.ok()) { + gpr_log(GPR_ERROR, "Error connecting: %s", + ep.status().ToString().c_str()); + exit(1); + } + endpoint = std::move(*ep); + connected.Notify(); + }, + *addr, config, memory_quota->CreateMemoryAllocator("client"), 2h); + connected.WaitForNotification(); + GPR_ASSERT(endpoint.get() != nullptr); + gpr_log(GPR_DEBUG, "peer addr: %s", + ResolvedAddressToString(endpoint->GetPeerAddress())->c_str()); + gpr_log(GPR_DEBUG, "local addr: %s", + ResolvedAddressToString(endpoint->GetLocalAddress())->c_str()); + int message_id = 0; + while (true) { + SendMessage(endpoint.get(), message_id++); + ReceiveAndEchoMessage(endpoint.get(), message_id); + } +} +} // namespace + +int main(int argc, char** argv) { + absl::ParseCommandLine(argc, argv); + grpc_event_engine::experimental::SetEventEngineFactory( + CustomEventEngineFactory()); + grpc_init(); + RunUntilInterrupted(); + grpc_shutdown(); + return 0; +} diff --git a/test/core/event_engine/test_suite/tools/posix_event_engine_factory.cc b/test/core/event_engine/test_suite/tools/posix_event_engine_factory.cc new file mode 100644 index 00000000000..05cf8ea2bad --- /dev/null +++ b/test/core/event_engine/test_suite/tools/posix_event_engine_factory.cc @@ -0,0 +1,46 @@ +// Copyright 2023 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +#include "absl/functional/any_invocable.h" + +#include + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_POSIX_SOCKET_TCP + +#include "src/core/lib/event_engine/posix_engine/posix_engine.h" + +absl::AnyInvocable< + std::unique_ptr(void)> +CustomEventEngineFactory() { + return []() { + return std::make_unique< + grpc_event_engine::experimental::PosixEventEngine>(); + }; +} + +#else + +absl::AnyInvocable< + std::unique_ptr(void)> +CustomEventEngineFactory() { + GPR_ASSERT(false && "This tool was not built for Posix environments."); +} + +#endif diff --git a/test/core/event_engine/test_suite/tools/windows_event_engine_factory.cc b/test/core/event_engine/test_suite/tools/windows_event_engine_factory.cc new file mode 100644 index 00000000000..b890f9396b0 --- /dev/null +++ b/test/core/event_engine/test_suite/tools/windows_event_engine_factory.cc @@ -0,0 +1,45 @@ +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +#include "absl/functional/any_invocable.h" + +#include +#include + +#ifdef GPR_WINDOWS + +#include "src/core/lib/event_engine/windows/windows_engine.h" + +absl::AnyInvocable< + std::unique_ptr(void)> +CustomEventEngineFactory() { + return []() { + return std::make_unique< + grpc_event_engine::experimental::WindowsEventEngine>(); + }; +} + +#else + +absl::AnyInvocable< + std::unique_ptr(void)> +CustomEventEngineFactory() { + GPR_ASSERT(false && "This tool was not built for Windows."); +} + +#endif diff --git a/test/core/event_engine/test_suite/windows_event_engine_test.cc b/test/core/event_engine/test_suite/windows_event_engine_test.cc index 644f4c0ad7c..d99ffa28a33 100644 --- a/test/core/event_engine/test_suite/windows_event_engine_test.cc +++ b/test/core/event_engine/test_suite/windows_event_engine_test.cc @@ -18,7 +18,8 @@ #include #include "src/core/lib/event_engine/windows/windows_engine.h" -#include "test/core/event_engine/test_suite/event_engine_test.h" +#include "test/core/event_engine/test_suite/event_engine_test_framework.h" +#include "test/core/event_engine/test_suite/tests/timer_test.h" #include "test/core/util/test_config.h" int main(int argc, char** argv) { @@ -29,6 +30,7 @@ int main(int argc, char** argv) { grpc_event_engine::experimental::WindowsEventEngine>(); }; SetEventEngineFactories(factory, factory); + grpc_event_engine::experimental::InitTimerTests(); // TODO(ctiller): EventEngine temporarily needs grpc to be initialized first // until we clear out the iomgr shutdown code. grpc_init(); diff --git a/test/core/iomgr/endpoint_pair_test.cc b/test/core/iomgr/endpoint_pair_test.cc index d454fa24992..40943d06642 100644 --- a/test/core/iomgr/endpoint_pair_test.cc +++ b/test/core/iomgr/endpoint_pair_test.cc @@ -34,7 +34,6 @@ #include "src/core/lib/event_engine/shim.h" #include "src/core/lib/event_engine/tcp_socket_utils.h" #include "src/core/lib/gpr/useful.h" -#include "src/core/lib/gprpp/crash.h" #include "src/core/lib/gprpp/notification.h" #include "src/core/lib/iomgr/event_engine_shims/endpoint.h" #include "src/core/lib/resource_quota/memory_quota.h"