binder_server_test.cc
Go to the documentation of this file.
1 // Copyright 2021 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 
16 
17 #include <memory>
18 #include <thread>
19 #include <vector>
20 
21 #include <gtest/gtest.h>
22 
23 #include "absl/memory/memory.h"
24 
25 #include <grpcpp/grpcpp.h>
29 
35 
36 namespace grpc {
37 namespace testing {
38 
39 namespace {
40 
41 class BinderServerCredentialsImpl final : public ServerCredentials {
42  public:
43  int AddPortToServer(const std::string& addr, grpc_server* server) override {
45  addr, server,
47  return absl::make_unique<
49  nullptr, std::move(transact_cb));
50  },
51  std::make_shared<
53  }
54 
55  void SetAuthMetadataProcessor(
56  const std::shared_ptr<AuthMetadataProcessor>& /*processor*/) override {
57  GPR_ASSERT(false);
58  }
59 
60  private:
61  bool IsInsecure() const override { return true; }
62 };
63 
64 } // namespace
65 
66 std::shared_ptr<ServerCredentials> BinderServerCredentials() {
67  return std::shared_ptr<ServerCredentials>(new BinderServerCredentialsImpl());
68 }
69 
70 std::shared_ptr<grpc::Channel> CreateBinderChannel(
71  std::unique_ptr<grpc_binder::Binder> endpoint_binder) {
73  init_lib.init();
74 
76  "",
78  std::move(endpoint_binder), nullptr,
79  std::make_shared<
81  std::vector<std::unique_ptr<
83 }
84 
85 } // namespace testing
86 } // namespace grpc
87 
88 namespace {
89 
90 class BinderServerTest : public ::testing::Test {
91  public:
92  BinderServerTest() {
95  }
96  ~BinderServerTest() override {
98  }
99  static void SetUpTestSuite() { grpc_init(); }
100  static void TearDownTestSuite() { grpc_shutdown(); }
101 };
102 
103 #ifndef GPR_SUPPORT_BINDER_TRANSPORT
104 TEST(BinderServerCredentialsTest,
105  FailedInEnvironmentsNotSupportingBinderTransport) {
106  grpc::ServerBuilder server_builder;
108  server_builder.RegisterService(&service);
109  server_builder.AddListeningPort(
110  "binder:fail",
112  std::make_shared<
114  EXPECT_EQ(server_builder.BuildAndStart(), nullptr);
115 }
116 #endif // !GPR_SUPPORT_BINDER_TRANSPORT
117 
118 TEST_F(BinderServerTest, BuildAndStart) {
119  grpc::ServerBuilder server_builder;
121  server_builder.RegisterService(&service);
122  server_builder.AddListeningPort("binder:example.service",
124  std::unique_ptr<grpc::Server> server = server_builder.BuildAndStart();
126  nullptr);
127  server->Shutdown();
129  nullptr);
130 }
131 
132 TEST_F(BinderServerTest, BuildAndStartFailed) {
133  grpc::ServerBuilder server_builder;
135  server_builder.RegisterService(&service);
136  // Error: binder address should begin with binder:
137  server_builder.AddListeningPort("localhost:12345",
139  std::unique_ptr<grpc::Server> server = server_builder.BuildAndStart();
140  EXPECT_EQ(server, nullptr);
141 }
142 
143 TEST_F(BinderServerTest, CreateChannelWithEndpointBinder) {
144  grpc::ServerBuilder server_builder;
146  server_builder.RegisterService(&service);
147  server_builder.AddListeningPort("binder:example.service",
149  std::unique_ptr<grpc::Server> server = server_builder.BuildAndStart();
150  void* raw_endpoint_binder =
152  std::unique_ptr<grpc_binder::Binder> endpoint_binder =
153  absl::make_unique<grpc_binder::end2end_testing::FakeBinder>(
155  raw_endpoint_binder));
156  std::shared_ptr<grpc::Channel> channel =
158  std::unique_ptr<grpc::testing::EchoTestService::Stub> stub =
159  grpc::testing::EchoTestService::NewStub(channel);
160  grpc::testing::EchoRequest request;
161  grpc::testing::EchoResponse response;
163  request.set_message("BinderServerBuilder");
165  EXPECT_TRUE(status.ok());
166  EXPECT_EQ(response.message(), "BinderServerBuilder");
167  server->Shutdown();
168 }
169 
170 TEST_F(BinderServerTest, CreateChannelWithEndpointBinderMultipleConnections) {
171  grpc::ServerBuilder server_builder;
173  server_builder.RegisterService(&service);
174  server_builder.AddListeningPort("binder:example.service.multiple.connections",
176  std::unique_ptr<grpc::Server> server = server_builder.BuildAndStart();
177  void* raw_endpoint_binder = grpc::experimental::binder::GetEndpointBinder(
178  "example.service.multiple.connections");
179  constexpr size_t kNumThreads = 128;
180 
181  auto thread_fn = [&](size_t id) {
182  std::unique_ptr<grpc_binder::Binder> endpoint_binder =
183  absl::make_unique<grpc_binder::end2end_testing::FakeBinder>(
185  raw_endpoint_binder));
186  std::shared_ptr<grpc::Channel> channel =
188  std::unique_ptr<grpc::testing::EchoTestService::Stub> stub =
189  grpc::testing::EchoTestService::NewStub(channel);
190  grpc::testing::EchoRequest request;
191  grpc::testing::EchoResponse response;
193  request.set_message(absl::StrFormat("BinderServerBuilder-%d", id));
195  EXPECT_TRUE(status.ok());
196  EXPECT_EQ(response.message(),
197  absl::StrFormat("BinderServerBuilder-%d", id));
198  };
199 
200  std::vector<std::thread> threads(kNumThreads);
201  for (size_t i = 0; i < kNumThreads; ++i) {
202  threads[i] = std::thread(thread_fn, i);
203  }
204  for (auto& thr : threads) {
205  thr.join();
206  }
207  server->Shutdown();
208 }
209 
210 TEST_F(BinderServerTest, CreateChannelWithEndpointBinderParallelRequests) {
211  grpc::ServerBuilder server_builder;
213  server_builder.RegisterService(&service);
214  server_builder.AddListeningPort("binder:example.service",
216  std::unique_ptr<grpc::Server> server = server_builder.BuildAndStart();
217  void* raw_endpoint_binder =
219  std::unique_ptr<grpc_binder::Binder> endpoint_binder =
220  absl::make_unique<grpc_binder::end2end_testing::FakeBinder>(
222  raw_endpoint_binder));
223  std::shared_ptr<grpc::Channel> channel =
225  std::unique_ptr<grpc::testing::EchoTestService::Stub> stub =
226  grpc::testing::EchoTestService::NewStub(channel);
227 
228  constexpr size_t kNumRequests = 128;
229 
230  auto thread_fn = [&](size_t id) {
231  grpc::testing::EchoRequest request;
232  std::string msg = absl::StrFormat("BinderServerBuilder-%d", id);
233  request.set_message(msg);
234  grpc::testing::EchoResponse response;
237  EXPECT_TRUE(status.ok());
238  EXPECT_EQ(response.message(), msg);
239  };
240  std::vector<std::thread> threads(kNumRequests);
241  for (size_t i = 0; i < kNumRequests; ++i) {
242  threads[i] = std::thread(thread_fn, i);
243  }
244  for (auto& thr : threads) {
245  thr.join();
246  }
247  server->Shutdown();
248 }
249 
250 } // namespace
251 
252 int main(int argc, char** argv) {
253  ::testing::InitGoogleTest(&argc, argv);
254  grpc::testing::TestEnvironment env(&argc, argv);
255  return RUN_ALL_TESTS();
256 }
grpc::CreateChannelInternal
std::shared_ptr< Channel > CreateChannelInternal(const std::string &host, grpc_channel *c_channel, std::vector< std::unique_ptr< experimental::ClientInterceptorFactoryInterface >> interceptor_creators)
testing
Definition: aws_request_signer_test.cc:25
generate.env
env
Definition: generate.py:37
absl::StrFormat
ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec< Args... > &format, const Args &... args)
Definition: abseil-cpp/absl/strings/str_format.h:338
grpc
Definition: grpcpp/alarm.h:33
grpc::ServerBuilder::BuildAndStart
virtual std::unique_ptr< grpc::Server > BuildAndStart()
Definition: server_builder.cc:275
grpc::testing::CreateBinderChannel
std::shared_ptr< grpc::Channel > CreateBinderChannel(std::unique_ptr< grpc_binder::Binder > endpoint_binder)
Definition: binder_server_test.cc:70
binder_server.h
grpc_core::AddBinderPort
bool AddBinderPort(const std::string &addr, grpc_server *server, BinderTxReceiverFactory factory, std::shared_ptr< grpc::experimental::binder::SecurityPolicy > security_policy)
Definition: binder_server.cc:232
grpc::experimental::binder::UntrustedSecurityPolicy
Definition: binder_security_policy.h:44
grpc::experimental::BinderServerCredentials
std::shared_ptr< grpc::ServerCredentials > BinderServerCredentials(std::shared_ptr< grpc::experimental::binder::SecurityPolicy > security_policy)
Definition: binder_server_credentials.cc:66
benchmark.request
request
Definition: benchmark.py:77
testing::Test::SetUpTestSuite
static void SetUpTestSuite()
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:417
grpc_binder::end2end_testing::FakeEndpoint
Definition: fake_binder.h:140
grpc::experimental::ClientInterceptorFactoryInterface
Definition: impl/codegen/client_interceptor.h:48
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc::experimental::binder::GetEndpointBinder
void * GetEndpointBinder(const std::string &service)
Definition: binder_server.cc:78
status
absl::Status status
Definition: rls.cc:251
absl::make_unique
memory_internal::MakeUniqueResult< T >::scalar make_unique(Args &&... args)
Definition: third_party/abseil-cpp/absl/memory/memory.h:168
async_greeter_client.stub
stub
Definition: hellostreamingworld/async_greeter_client.py:26
grpc::testing::TestServiceImpl
TestMultipleServiceImpl< grpc::testing::EchoTestService::Service > TestServiceImpl
Definition: test_service_impl.h:498
grpc::ServerBuilder::RegisterService
ServerBuilder & RegisterService(grpc::Service *service)
Definition: server_builder.cc:101
threads
static uv_thread_t * threads
Definition: threadpool.c:38
testing::Test
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:402
test_service_impl.h
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
grpc::ServerBuilder::AddListeningPort
ServerBuilder & AddListeningPort(const std::string &addr_uri, std::shared_ptr< grpc::ServerCredentials > creds, int *selected_port=nullptr)
Definition: server_builder.cc:222
binder_security_policy.h
grpc_binder::end2end_testing::FakeTransactionReceiver
Definition: fake_binder.h:161
channel
wrapped_grpc_channel * channel
Definition: src/php/ext/grpc/call.h:33
binder_credentials.h
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
main
int main(int argc, char **argv)
Definition: binder_server_test.cc:252
TEST
#define TEST(name, init_size,...)
Definition: arena_test.cc:75
grpc::ServerBuilder
A builder class for the creation and startup of grpc::Server instances.
Definition: grpcpp/server_builder.h:86
EXPECT_NE
#define EXPECT_NE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2028
grpcpp.h
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2471
grpc::internal::GrpcLibrary
Definition: grpcpp/impl/grpc_library.h:32
grpc_binder::end2end_testing::TransactionProcessor
Definition: fake_binder.h:230
msg
std::string msg
Definition: client_interceptors_end2end_test.cc:372
grpc::ClientContext
Definition: grpcpp/impl/codegen/client_context.h:195
test_config.h
grpc::testing::BinderServerCredentials
std::shared_ptr< ServerCredentials > BinderServerCredentials()
Definition: binder_server_test.cc:66
testing::InitGoogleTest
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:6106
testing::Test::TearDownTestSuite
static void TearDownTestSuite()
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:427
grpc_library.h
grpc_binder::TransactionReceiver::OnTransactCb
std::function< absl::Status(transaction_code_t, ReadableParcel *, int uid)> OnTransactCb
Definition: binder.h:80
server
Definition: examples/python/async_streaming/server.py:1
kNumThreads
const int kNumThreads
Definition: thread_stress_test.cc:46
channel_create_impl.h
asyncio_get_stats.response
response
Definition: asyncio_get_stats.py:28
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc::Status
Definition: include/grpcpp/impl/codegen/status.h:35
absl::Status::ok
ABSL_MUST_USE_RESULT bool ok() const
Definition: third_party/abseil-cpp/absl/status/status.h:802
grpc::internal::CreateDirectBinderChannelImplForTesting
grpc_channel * CreateDirectBinderChannelImplForTesting(std::unique_ptr< grpc_binder::Binder > endpoint_binder, const grpc_channel_args *args, std::shared_ptr< grpc::experimental::binder::SecurityPolicy > security_policy)
Definition: channel_create_impl.cc:43
grpc::internal::GrpcLibrary::init
void init() override
Definition: grpcpp/impl/grpc_library.h:34
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
grpc.beta.implementations.ServerCredentials
ServerCredentials
Definition: implementations.py:231
fake_binder.h
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
service
__attribute__((deprecated("Please use GRPCProtoMethod."))) @interface ProtoMethod NSString * service
Definition: ProtoMethod.h:25
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
addr
struct sockaddr_in addr
Definition: libuv/docs/code/tcp-echo-server/main.c:10
thread
static uv_thread_t thread
Definition: test-async-null-cb.c:29
grpc_binder::end2end_testing::g_transaction_processor
TransactionProcessor * g_transaction_processor
Definition: fake_binder.cc:25
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
id
uint32_t id
Definition: flow_control_fuzzer.cc:70
TEST_F
#define TEST_F(test_fixture, test_name)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2367


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:38