From 5ef1585070f73e8424ca4d77d73f8937572fd2c1 Mon Sep 17 00:00:00 2001 From: AJ Heller Date: Tue, 15 Feb 2022 15:32:14 -0800 Subject: [PATCH] A more granular EventEngine conformance test suite (#28889) This allows implementers to select which subset of the conformance test suite they wish to exercise with their implementation. This was a request from the fuchsia team, and may be useful for partial implementations that are composed into a complete EventEngine solution. --- test/core/event_engine/BUILD | 22 +---- test/core/event_engine/test_suite/BUILD | 84 +++++++++++++++++++ test/core/event_engine/test_suite/README.md | 42 +++++----- .../event_engine/test_suite/client_test.cc | 20 +++++ test/core/event_engine/test_suite/dns_test.cc | 20 +++++ .../event_engine/test_suite/server_test.cc | 20 +++++ 6 files changed, 168 insertions(+), 40 deletions(-) create mode 100644 test/core/event_engine/test_suite/BUILD create mode 100644 test/core/event_engine/test_suite/client_test.cc create mode 100644 test/core/event_engine/test_suite/dns_test.cc create mode 100644 test/core/event_engine/test_suite/server_test.cc diff --git a/test/core/event_engine/BUILD b/test/core/event_engine/BUILD index 913530518de..c38e2cd36fb 100644 --- a/test/core/event_engine/BUILD +++ b/test/core/event_engine/BUILD @@ -12,7 +12,7 @@ # 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") +load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_package") licenses(["notice"]) @@ -30,26 +30,6 @@ grpc_cc_test( ], ) -grpc_cc_library( - name = "event_engine_test_suite", - testonly = 1, - srcs = [ - "test_suite/event_engine_test.cc", - "test_suite/timer_test.cc", - ], - hdrs = ["test_suite/event_engine_test.h"], - external_deps = [ - "gtest", - ], - language = "C++", - deps = [ - "//:grpc", - "//test/core/util:grpc_test_util", - ], - # Ensure the linker doesn't throw away test cases. - alwayslink = 1, -) - grpc_cc_test( name = "smoke_test", srcs = ["smoke_test.cc"], diff --git a/test/core/event_engine/test_suite/BUILD b/test/core/event_engine/test_suite/BUILD new file mode 100644 index 00000000000..eff948f7d82 --- /dev/null +++ b/test/core/event_engine/test_suite/BUILD @@ -0,0 +1,84 @@ +# 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_library", "grpc_package") + +licenses(["notice"]) + +grpc_package(name = "test/core/event_engine/test_suite") + +COMMON_HEADERS = ["event_engine_test.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"], + alwayslink = 1, +) + +grpc_cc_library( + name = "server", + testonly = True, + srcs = ["server_test.cc"], + hdrs = COMMON_HEADERS, + deps = [":conformance_test_base_lib"], + alwayslink = 1, +) + +grpc_cc_library( + name = "complete", + testonly = 1, + hdrs = COMMON_HEADERS, + deps = [ + ":client", + ":dns", + ":server", + ":timer", + ], + alwayslink = 1, +) + +# -- Internal targets -- + +grpc_cc_library( + name = "conformance_test_base_lib", + testonly = True, + srcs = ["event_engine_test.cc"], + hdrs = COMMON_HEADERS, + external_deps = ["gtest"], + deps = [ + "//:grpc", + "//test/core/util:grpc_test_util", + ], +) diff --git a/test/core/event_engine/test_suite/README.md b/test/core/event_engine/test_suite/README.md index 8931a0cfcb2..cb756c44fbe 100644 --- a/test/core/event_engine/test_suite/README.md +++ b/test/core/event_engine/test_suite/README.md @@ -1,14 +1,28 @@ A reusable test suite for EventEngine implementations. -To exercise a custom EventEngine, simply link against `:event_engine_test_suite` -and provide a testing `main` function that sets a custom EventEngine factory: +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. + +Your custom test target will look something like: + +``` +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"], +) +``` + +And the main function will be similar to: ``` #include "path/to/my_custom_event_engine.h" #include "src/core/event_engine/test_suite/event_engine_test.h" int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); + testing::InitGoogleTest(&argc, argv); SetEventEngineFactory( []() { return absl::make_unique(); }); auto result = RUN_ALL_TESTS(); @@ -16,20 +30,10 @@ int main(int argc, char** argv) { } ``` -And add a target to the `BUILD` file: +Alternatively, if you only want to exercise a subset of the conformance tests, +you could depend on any subset of the following: -``` -grpc_cc_test( - name = "my_custom_event_engine_test", - srcs = ["test_suite/my_custom_event_engine_test.cc"], - external_deps = [ - "gtest", - ], - language = "C++", - uses_polling = False, - deps = [ - ":event_engine_test_suite", - "//:grpc", - ], -) -``` +* `//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` diff --git a/test/core/event_engine/test_suite/client_test.cc b/test/core/event_engine/test_suite/client_test.cc new file mode 100644 index 00000000000..663f62a3339 --- /dev/null +++ b/test/core/event_engine/test_suite/client_test.cc @@ -0,0 +1,20 @@ +// 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 "test/core/event_engine/test_suite/event_engine_test.h" + +class EventEngineClientTest : public EventEngineTest {}; + +// TODO(hork): establish meaningful tests +TEST_F(EventEngineClientTest, TODO) {} diff --git a/test/core/event_engine/test_suite/dns_test.cc b/test/core/event_engine/test_suite/dns_test.cc new file mode 100644 index 00000000000..5b11cd697e7 --- /dev/null +++ b/test/core/event_engine/test_suite/dns_test.cc @@ -0,0 +1,20 @@ +// 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 "test/core/event_engine/test_suite/event_engine_test.h" + +class EventEngineDNSTest : public EventEngineTest {}; + +// TODO(hork): establish meaningful tests +TEST_F(EventEngineDNSTest, TODO) {} diff --git a/test/core/event_engine/test_suite/server_test.cc b/test/core/event_engine/test_suite/server_test.cc new file mode 100644 index 00000000000..9689c7af882 --- /dev/null +++ b/test/core/event_engine/test_suite/server_test.cc @@ -0,0 +1,20 @@ +// 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 "test/core/event_engine/test_suite/event_engine_test.h" + +class EventEngineServerTest : public EventEngineTest {}; + +// TODO(hork): establish meaningful tests +TEST_F(EventEngineServerTest, TODO) {}