event_engine_test_utils.h
Go to the documentation of this file.
1 // Copyright 2022 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_UTILS_H_
16 #define GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_UTILS_H_
17 
18 #include <functional>
19 #include <map>
20 #include <memory>
21 #include <string>
22 #include <utility>
23 
24 #include "absl/status/status.h"
25 #include "absl/status/statusor.h"
26 
29 
32 
34  std::unique_ptr<grpc_event_engine::experimental::EventEngine>()>;
35 
36 namespace grpc_event_engine {
37 namespace experimental {
38 
39 void AppendStringToSliceBuffer(SliceBuffer* buf, std::string data);
40 
42 
43 EventEngine::ResolvedAddress URIToResolvedAddress(std::string address_str);
44 
45 // A helper method to exchange data between two endpoints. It is assumed that
46 // both endpoints are connected. The data (specified as a string) is written by
47 // the sender_endpoint and read by the receiver_endpoint. It returns OK
48 // status only if data written == data read. It also blocks the calling thread
49 // until said Write and Read operations are complete.
51  EventEngine::Endpoint* send_endpoint,
52  EventEngine::Endpoint* receive_endpoint);
53 
54 // A helper class to create clients/listeners and connections between them.
55 // The clients and listeners can be created by the oracle event engine
56 // or the event engine under test. The class provides handles into the
57 // connections that are created. Inidividual tests can test expected behavior by
58 // exchanging arbitrary data over these connections.
60  public:
61  ConnectionManager(std::unique_ptr<EventEngine> test_event_engine,
62  std::unique_ptr<EventEngine> oracle_event_engine)
63  : memory_quota_(std::make_unique<grpc_core::MemoryQuota>("foo")),
64  test_event_engine_(std::move(test_event_engine)),
65  oracle_event_engine_(std::move(oracle_event_engine)) {}
66  ~ConnectionManager() = default;
67 
68  // It creates and starts a listener bound to all the specified list of
69  // addresses. If successful, return OK status. The type of the listener is
70  // determined by the 2nd argument.
71  absl::Status BindAndStartListener(std::vector<std::string> addrs,
72  bool listener_type_oracle = true);
73 
74  // If connection is successful, returns a tuple containing:
75  // 1. a pointer to the client side endpoint of the connection.
76  // 2. a pointer to the server side endpoint of the connection.
77  // If un-successful it returns a non-OK status containing the error
78  // encountered.
80  std::unique_ptr<EventEngine::Endpoint>>>
82  bool client_type_oracle);
83 
84  private:
85  class Connection {
86  public:
87  Connection() = default;
88  ~Connection() = default;
89 
91  std::unique_ptr<EventEngine::Endpoint>&& client_endpoint) {
92  client_endpoint_promise_.Set(std::move(client_endpoint));
93  }
95  std::unique_ptr<EventEngine::Endpoint>&& server_endpoint) {
96  server_endpoint_promise_.Set(std::move(server_endpoint));
97  }
98  std::unique_ptr<EventEngine::Endpoint> GetClientEndpoint() {
99  auto client_endpoint = std::move(client_endpoint_promise_.Get());
100  client_endpoint_promise_.Reset();
101  return client_endpoint;
102  }
103  std::unique_ptr<EventEngine::Endpoint> GetServerEndpoint() {
104  auto server_endpoint = std::move(server_endpoint_promise_.Get());
105  server_endpoint_promise_.Reset();
106  return server_endpoint;
107  }
108 
109  private:
112  };
113 
115  std::unique_ptr<grpc_core::MemoryQuota> memory_quota_;
118  std::map<std::string, std::shared_ptr<EventEngine::Listener>> listeners_;
119  std::unique_ptr<EventEngine> test_event_engine_;
120  std::unique_ptr<EventEngine> oracle_event_engine_;
121 };
122 
123 } // namespace experimental
124 } // namespace grpc_event_engine
125 
126 #endif // GRPC_TEST_CORE_EVENT_ENGINE_TEST_SUITE_EVENT_ENGINE_TEST_UTILS_H_
grpc_event_engine::experimental::ConnectionManager::last_in_progress_connection_
Connection last_in_progress_connection_
Definition: event_engine_test_utils.h:117
grpc_event_engine::experimental::ConnectionManager::Connection::GetServerEndpoint
std::unique_ptr< EventEngine::Endpoint > GetServerEndpoint()
Definition: event_engine_test_utils.h:103
grpc_event_engine::experimental::ConnectionManager::Connection::Connection
Connection()=default
grpc_event_engine::experimental::ConnectionManager::Connection::server_endpoint_promise_
Promise< std::unique_ptr< EventEngine::Endpoint > > server_endpoint_promise_
Definition: event_engine_test_utils.h:111
grpc_core
Definition: call_metric_recorder.h:31
event_engine.h
grpc_event_engine::experimental::URIToResolvedAddress
EventEngine::ResolvedAddress URIToResolvedAddress(std::string address_str)
Definition: event_engine_test_utils.cc:47
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
grpc_event_engine::experimental::ConnectionManager::CreateConnection
absl::StatusOr< std::tuple< std::unique_ptr< EventEngine::Endpoint >, std::unique_ptr< EventEngine::Endpoint > > > CreateConnection(std::string target_addr, EventEngine::Duration timeout, bool client_type_oracle)
Definition: event_engine_test_utils.cc:168
grpc_event_engine::experimental::ConnectionManager::ConnectionManager
ConnectionManager(std::unique_ptr< EventEngine > test_event_engine, std::unique_ptr< EventEngine > oracle_event_engine)
Definition: event_engine_test_utils.h:61
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
EventEngineFactory
std::function< std::unique_ptr< grpc_event_engine::experimental::EventEngine >()> EventEngineFactory
Definition: event_engine_test_utils.h:34
grpc_event_engine::experimental::EventEngine::Duration
std::chrono::duration< int64_t, std::nano > Duration
Definition: event_engine.h:80
grpc_event_engine::experimental::ConnectionManager::memory_quota_
std::unique_ptr< grpc_core::MemoryQuota > memory_quota_
Definition: event_engine_test_utils.h:115
grpc_event_engine::experimental::ConnectionManager::BindAndStartListener
absl::Status BindAndStartListener(std::vector< std::string > addrs, bool listener_type_oracle=true)
Definition: event_engine_test_utils.cc:117
grpc_event_engine::experimental::ConnectionManager::listeners_
std::map< std::string, std::shared_ptr< EventEngine::Listener > > listeners_
Definition: event_engine_test_utils.h:118
absl::make_unique
memory_internal::MakeUniqueResult< T >::scalar make_unique(Args &&... args)
Definition: third_party/abseil-cpp/absl/memory/memory.h:168
grpc_event_engine::experimental::ConnectionManager::Connection::SetClientEndpoint
void SetClientEndpoint(std::unique_ptr< EventEngine::Endpoint > &&client_endpoint)
Definition: event_engine_test_utils.h:90
grpc_event_engine::experimental::ConnectionManager::test_event_engine_
std::unique_ptr< EventEngine > test_event_engine_
Definition: event_engine_test_utils.h:119
grpc_event_engine::experimental::ConnectionManager::mu_
grpc_core::Mutex mu_
Definition: event_engine_test_utils.h:114
grpc_event_engine::experimental::ConnectionManager::Connection::SetServerEndpoint
void SetServerEndpoint(std::unique_ptr< EventEngine::Endpoint > &&server_endpoint)
Definition: event_engine_test_utils.h:94
grpc_event_engine::experimental::ConnectionManager::num_processed_connections_
int num_processed_connections_
Definition: event_engine_test_utils.h:116
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
grpc_event_engine::experimental::ConnectionManager
Definition: event_engine_test_utils.h:59
promise.h
grpc_event_engine::experimental::ConnectionManager::Connection::GetClientEndpoint
std::unique_ptr< EventEngine::Endpoint > GetClientEndpoint()
Definition: event_engine_test_utils.h:98
grpc_event_engine::experimental::Promise
Definition: event_engine/promise.h:31
grpc_event_engine::experimental::AppendStringToSliceBuffer
void AppendStringToSliceBuffer(SliceBuffer *buf, std::string data)
Definition: event_engine_test_utils.cc:60
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
Endpoint
::grpc_event_engine::experimental::EventEngine::Endpoint Endpoint
Definition: event_engine_test_utils.cc:41
grpc_event_engine::experimental::ConnectionManager::oracle_event_engine_
std::unique_ptr< EventEngine > oracle_event_engine_
Definition: event_engine_test_utils.h:120
grpc_event_engine::experimental::SendValidatePayload
absl::Status SendValidatePayload(std::string data, Endpoint *send_endpoint, Endpoint *receive_endpoint)
Definition: event_engine_test_utils.cc:75
grpc_event_engine::experimental::ConnectionManager::Connection::~Connection
~Connection()=default
grpc_core::Mutex
Definition: src/core/lib/gprpp/sync.h:61
absl::Status
Definition: third_party/abseil-cpp/absl/status/status.h:424
std
Definition: grpcpp/impl/codegen/async_unary_call.h:407
grpc_event_engine
Definition: endpoint_config.h:24
grpc_event_engine::experimental::ConnectionManager::Connection
Definition: event_engine_test_utils.h:85
grpc_event_engine::experimental::ExtractSliceBufferIntoString
std::string ExtractSliceBufferIntoString(SliceBuffer *buf)
Definition: event_engine_test_utils.cc:64
memory_quota.h
memory_allocator.h
grpc_event_engine::experimental::ConnectionManager::Connection::client_endpoint_promise_
Promise< std::unique_ptr< EventEngine::Endpoint > > client_endpoint_promise_
Definition: event_engine_test_utils.h:110
absl::StatusOr
Definition: abseil-cpp/absl/status/statusor.h:187
function
std::function< bool(GrpcTool *, int, const char **, const CliCredentials &, GrpcToolOutputCallback)> function
Definition: grpc_tool.cc:250
grpc_event_engine::experimental::ConnectionManager::~ConnectionManager
~ConnectionManager()=default
timeout
uv_timer_t timeout
Definition: libuv/docs/code/uvwget/main.c:9


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:16