surface/server_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <string>
20 
21 #include "absl/strings/str_cat.h"
22 
23 #include <grpc/grpc.h>
24 #include <grpc/grpc_security.h>
25 #include <grpc/support/alloc.h>
26 #include <grpc/support/log.h>
27 
31 #include "test/core/util/port.h"
33 
35  grpc_server* server = grpc_server_create(nullptr, nullptr);
36  void* method;
37  void* method_old;
38  method = grpc_server_register_method(server, nullptr, nullptr,
40  GPR_ASSERT(method == nullptr);
41  method_old =
43  GPR_ASSERT(method_old != nullptr);
46  GPR_ASSERT(method == nullptr);
48 }
49 
52  grpc_server* server = grpc_server_create(nullptr, nullptr);
54  grpc_server_request_call(server, nullptr, nullptr, nullptr, cc, cc,
55  nullptr));
58  nullptr, nullptr, nullptr, cc,
59  cc, nullptr));
62 }
63 
66  const_cast<char*>(GRPC_ARG_ALLOW_REUSEPORT), 0);
67  grpc_channel_args args = {1, &a};
68 
69  grpc_server* server1 = grpc_server_create(&args, nullptr);
70  grpc_server* server2 = grpc_server_create(&args, nullptr);
73  std::string addr = absl::StrCat("[::]:", port);
74  grpc_server_register_completion_queue(server1, cq, nullptr);
75  grpc_server_register_completion_queue(server2, cq, nullptr);
76  GPR_ASSERT(0 == grpc_server_add_http2_port(server2, addr.c_str(), nullptr));
77  grpc_server_credentials* insecure_creds =
79  GPR_ASSERT(port ==
80  grpc_server_add_http2_port(server1, addr.c_str(), insecure_creds));
81  grpc_server_credentials_release(insecure_creds);
82  grpc_server_credentials* another_insecure_creds =
84  GPR_ASSERT(0 == grpc_server_add_http2_port(server2, addr.c_str(),
85  another_insecure_creds));
86  grpc_server_credentials_release(another_insecure_creds);
87  grpc_server_credentials* fake_creds =
89  GPR_ASSERT(0 ==
90  grpc_server_add_http2_port(server2, addr.c_str(), fake_creds));
92  grpc_server_shutdown_and_notify(server1, cq, nullptr);
93  grpc_server_shutdown_and_notify(server2, cq, nullptr);
96  grpc_server_destroy(server1);
97  grpc_server_destroy(server2);
99 }
100 
101 void test_bind_server_to_addr(const char* host, bool secure) {
104  gpr_log(GPR_INFO, "Test bind to %s", addr.c_str());
105 
106  grpc_server* server = grpc_server_create(nullptr, nullptr);
107  if (secure) {
108  grpc_server_credentials* fake_creds =
110  GPR_ASSERT(grpc_server_add_http2_port(server, addr.c_str(), fake_creds));
112  } else {
113  grpc_server_credentials* insecure_creds =
115  GPR_ASSERT(
116  grpc_server_add_http2_port(server, addr.c_str(), insecure_creds));
117  grpc_server_credentials_release(insecure_creds);
118  }
126 }
127 
128 static bool external_dns_works(const char* host) {
129  return grpc_core::GetDNSResolver()->ResolveNameBlocking(host, "80").ok();
130 }
131 
132 static void test_bind_server_to_addrs(const char** addrs, size_t n) {
133  for (size_t i = 0; i < n; i++) {
134  test_bind_server_to_addr(addrs[i], false);
135  test_bind_server_to_addr(addrs[i], true);
136  }
137 }
138 
139 int main(int argc, char** argv) {
140  grpc::testing::TestEnvironment env(&argc, argv);
141  grpc_init();
145 
146  static const char* addrs[] = {
147  "::1", "127.0.0.1", "::ffff:127.0.0.1", "localhost", "0.0.0.0", "::",
148  };
150 
151  if (external_dns_works("loopback46.unittest.grpc.io")) {
152  static const char* dns_addrs[] = {
153  "loopback46.unittest.grpc.io",
154  "loopback4.unittest.grpc.io",
155  };
156  test_bind_server_to_addrs(dns_addrs, GPR_ARRAY_SIZE(dns_addrs));
157  }
158 
159  grpc_shutdown();
160  return 0;
161 }
grpc_arg
Definition: grpc_types.h:103
main
int main(int argc, char **argv)
Definition: surface/server_test.cc:139
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
GRPC_SRM_PAYLOAD_NONE
@ GRPC_SRM_PAYLOAD_NONE
Definition: grpc.h:398
fake_credentials.h
log.h
port.h
generate.env
env
Definition: generate.py:37
absl::StrCat
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
Definition: abseil-cpp/absl/strings/str_cat.cc:98
resolve_address.h
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
test_bind_server_to_addrs
static void test_bind_server_to_addrs(const char **addrs, size_t n)
Definition: surface/server_test.cc:132
grpc_server_create
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
Definition: src/core/lib/surface/server.cc:1456
grpc_server_register_completion_queue
GRPCAPI void grpc_server_register_completion_queue(grpc_server *server, grpc_completion_queue *cq, void *reserved)
Definition: src/core/lib/surface/server.cc:1466
gpr_inf_future
GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type)
Definition: src/core/lib/gpr/time.cc:55
grpc_server_request_registered_call
GRPCAPI grpc_call_error grpc_server_request_registered_call(grpc_server *server, void *registered_method, grpc_call **call, gpr_timespec *deadline, grpc_metadata_array *request_metadata, grpc_byte_buffer **optional_payload, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new)
Definition: src/core/lib/surface/server.cc:1546
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
grpc_security.h
grpc_channel_args
Definition: grpc_types.h:132
GRPC_ARG_ALLOW_REUSEPORT
#define GRPC_ARG_ALLOW_REUSEPORT
Definition: grpc_types.h:295
grpc_insecure_server_credentials_create
GRPCAPI grpc_server_credentials * grpc_insecure_server_credentials_create()
Definition: core/lib/security/credentials/insecure/insecure_credentials.cc:71
grpc_server_request_call
GRPCAPI grpc_call_error grpc_server_request_call(grpc_server *server, grpc_call **call, grpc_call_details *details, grpc_metadata_array *request_metadata, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new)
Definition: src/core/lib/surface/server.cc:1526
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_server_credentials_release
GRPCAPI void grpc_server_credentials_release(grpc_server_credentials *creds)
Definition: credentials.cc:95
grpc_server_add_http2_port
GRPCAPI int grpc_server_add_http2_port(grpc_server *server, const char *addr, grpc_server_credentials *creds)
Definition: chttp2_server.cc:1029
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc_completion_queue
Definition: completion_queue.cc:347
grpc.h
grpc_core::JoinHostPort
std::string JoinHostPort(absl::string_view host, int port)
Definition: host_port.cc:32
GPR_CLOCK_MONOTONIC
@ GPR_CLOCK_MONOTONIC
Definition: gpr_types.h:36
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
test_register_method_fail
void test_register_method_fail(void)
Definition: surface/server_test.cc:34
grpc_fake_transport_security_server_credentials_create
grpc_server_credentials * grpc_fake_transport_security_server_credentials_create()
Definition: fake_credentials.cc:84
grpc_server_destroy
GRPCAPI void grpc_server_destroy(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1519
host_port.h
grpc_pick_unused_port_or_die
int grpc_pick_unused_port_or_die(void)
n
int n
Definition: abseil-cpp/absl/container/btree_test.cc:1080
test_bind_server_twice
void test_bind_server_twice(void)
Definition: surface/server_test.cc:64
tests.unit._exit_scenarios.port
port
Definition: _exit_scenarios.py:179
test_config.h
grpc_server_credentials
Definition: src/core/lib/security/credentials/credentials.h:259
absl::StatusOr::ok
ABSL_MUST_USE_RESULT bool ok() const
Definition: abseil-cpp/absl/status/statusor.h:491
GPR_ARRAY_SIZE
#define GPR_ARRAY_SIZE(array)
Definition: useful.h:129
grpc_channel_arg_integer_create
grpc_arg grpc_channel_arg_integer_create(char *name, int value)
Definition: channel_args.cc:484
server
Definition: examples/python/async_streaming/server.py:1
grpc_completion_queue_destroy
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
Definition: completion_queue.cc:1424
grpc_core::GetDNSResolver
DNSResolver * GetDNSResolver()
Definition: resolve_address.cc:38
test_bind_server_to_addr
void test_bind_server_to_addr(const char *host, bool secure)
Definition: surface/server_test.cc:101
alloc.h
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc_server_shutdown_and_notify
GRPCAPI void grpc_server_shutdown_and_notify(grpc_server *server, grpc_completion_queue *cq, void *tag)
Definition: src/core/lib/surface/server.cc:1503
grpc_completion_queue_next
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
Definition: completion_queue.cc:1133
GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
@ GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
Definition: grpc.h:400
grpc_completion_queue_create_for_next
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
Definition: completion_queue_factory.cc:62
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_server_start
GRPCAPI void grpc_server_start(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1497
method
NSString * method
Definition: ProtoMethod.h:28
test_request_call_on_no_server_cq
void test_request_call_on_no_server_cq(void)
Definition: surface/server_test.cc:50
GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE
@ GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE
Definition: grpc_types.h:492
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_core::DNSResolver::ResolveNameBlocking
virtual absl::StatusOr< std::vector< grpc_resolved_address > > ResolveNameBlocking(absl::string_view name, absl::string_view default_port)=0
addr
struct sockaddr_in addr
Definition: libuv/docs/code/tcp-echo-server/main.c:10
cq
static grpc_completion_queue * cq
Definition: test/core/fling/client.cc:37
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
grpc_server_register_method
GRPCAPI void * grpc_server_register_method(grpc_server *server, const char *method, const char *host, grpc_server_register_method_payload_handling payload_handling, uint32_t flags)
Definition: src/core/lib/surface/server.cc:1485
external_dns_works
static bool external_dns_works(const char *host)
Definition: surface/server_test.cc:128


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:17