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.
pull/28894/head
AJ Heller 3 years ago committed by GitHub
parent 5f67cd07f4
commit 5ef1585070
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      test/core/event_engine/BUILD
  2. 84
      test/core/event_engine/test_suite/BUILD
  3. 42
      test/core/event_engine/test_suite/README.md
  4. 20
      test/core/event_engine/test_suite/client_test.cc
  5. 20
      test/core/event_engine/test_suite/dns_test.cc
  6. 20
      test/core/event_engine/test_suite/server_test.cc

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # 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"]) 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( grpc_cc_test(
name = "smoke_test", name = "smoke_test",
srcs = ["smoke_test.cc"], srcs = ["smoke_test.cc"],

@ -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",
],
)

@ -1,14 +1,28 @@
A reusable test suite for EventEngine implementations. A reusable test suite for EventEngine implementations.
To exercise a custom EventEngine, simply link against `:event_engine_test_suite` To exercise a custom EventEngine, create a new bazel test target that links
and provide a testing `main` function that sets a custom EventEngine factory: 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 "path/to/my_custom_event_engine.h"
#include "src/core/event_engine/test_suite/event_engine_test.h" #include "src/core/event_engine/test_suite/event_engine_test.h"
int main(int argc, char** argv) { int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv); testing::InitGoogleTest(&argc, argv);
SetEventEngineFactory( SetEventEngineFactory(
[]() { return absl::make_unique<MyCustomEventEngine>(); }); []() { return absl::make_unique<MyCustomEventEngine>(); });
auto result = RUN_ALL_TESTS(); 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:
``` * `//test/core/event_engine/test_suite:timer`
grpc_cc_test( * `//test/core/event_engine/test_suite:dns`
name = "my_custom_event_engine_test", * `//test/core/event_engine/test_suite:client`
srcs = ["test_suite/my_custom_event_engine_test.cc"], * `//test/core/event_engine/test_suite:server`
external_deps = [
"gtest",
],
language = "C++",
uses_polling = False,
deps = [
":event_engine_test_suite",
"//:grpc",
],
)
```

@ -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) {}

@ -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) {}

@ -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) {}
Loading…
Cancel
Save