Go to the documentation of this file.
22 #ifdef GRPC_POSIX_SOCKET_EV
28 #include "absl/strings/str_format.h"
29 #include "absl/strings/str_join.h"
30 #include "absl/strings/str_split.h"
31 #include "absl/strings/string_view.h"
53 static void*
tag(
intptr_t t) {
return reinterpret_cast<void*
>(
t); }
63 static void log_resolved_addrs(
const char*
label,
const char* hostname) {
66 if (!addresses_or.
ok()) {
71 for (
const auto&
addr : *addresses_or) {
76 void test_connect(
const char*
server_host,
const char* client_host,
int port,
118 server, server_hostport.c_str(), server_creds)) > 0);
130 if (client_host[0] ==
'i') {
132 std::vector<absl::string_view> uri_parts =
134 std::vector<std::string> hosts_with_port;
135 hosts_with_port.reserve(uri_parts.size());
148 server_hostport.c_str(), client_hostport.c_str(),
149 expect_ok ?
"success" :
"failure");
150 log_resolved_addrs(
"server resolved addr",
server_host);
151 log_resolved_addrs(
"client resolved addr", client_host);
285 if (!addresses_or.ok()) {
289 for (
const auto&
addr : *addresses_or) {
296 "ipv6:%5B64:ff9b::7f00:1%5D:80") {
299 "Detected DNS64 server response. Tests that depend on "
300 "*.unittest.grpc.io. will be skipped as they won't work with DNS64.");
308 int main(
int argc,
char** argv) {
324 test_connect(
"::",
"127.0.0.1", 0, 1);
325 test_connect(
"::",
"::ffff:127.0.0.1", 0, 1);
326 test_connect(
"::",
"ipv4:127.0.0.1", 0, 1);
327 test_connect(
"::",
"ipv6:[::ffff:127.0.0.1]", 0, 1);
328 test_connect(
"::",
"localhost", 0, 1);
329 test_connect(
"0.0.0.0",
"127.0.0.1", 0, 1);
330 test_connect(
"0.0.0.0",
"::ffff:127.0.0.1", 0, 1);
331 test_connect(
"0.0.0.0",
"ipv4:127.0.0.1", 0, 1);
332 test_connect(
"0.0.0.0",
"ipv4:127.0.0.1,127.0.0.2,127.0.0.3", 0, 1);
333 test_connect(
"0.0.0.0",
"ipv6:[::ffff:127.0.0.1],[::ffff:127.0.0.2]", 0, 1);
334 test_connect(
"0.0.0.0",
"localhost", 0, 1);
336 test_connect(
"::",
"::1", 0, 1);
337 test_connect(
"0.0.0.0",
"::1", 0, 1);
338 test_connect(
"::",
"ipv6:[::1]", 0, 1);
339 test_connect(
"0.0.0.0",
"ipv6:[::1]", 0, 1);
343 test_connect(
"127.0.0.1",
"127.0.0.1", 0, 1);
344 test_connect(
"127.0.0.1",
"ipv4:127.0.0.1", 0, 1);
346 test_connect(
"::1",
"::1", 0, 1);
347 test_connect(
"::1",
"127.0.0.1", 0, 0);
348 test_connect(
"127.0.0.1",
"::1", 0, 0);
349 test_connect(
"::1",
"ipv6:[::1]", 0, 1);
350 test_connect(
"::1",
"ipv4:127.0.0.1", 0, 0);
351 test_connect(
"127.0.0.1",
"ipv6:[::1]", 0, 0);
356 gpr_log(
GPR_INFO,
"Skipping tests that depend on *.unittest.grpc.io.");
358 test_connect(
"loopback46.unittest.grpc.io",
"loopback4.unittest.grpc.io",
360 test_connect(
"loopback4.unittest.grpc.io",
"loopback46.unittest.grpc.io",
363 test_connect(
"loopback46.unittest.grpc.io",
364 "loopback6.unittest.grpc.io", 0, 1);
365 test_connect(
"loopback6.unittest.grpc.io",
366 "loopback46.unittest.grpc.io", 0, 1);
367 test_connect(
"loopback4.unittest.grpc.io",
"loopback6.unittest.grpc.io",
369 test_connect(
"loopback6.unittest.grpc.io",
"loopback4.unittest.grpc.io",
382 int main(
int argc,
char** argv) {
return 1; }
strings_internal::Splitter< typename strings_internal::SelectDelimiter< Delimiter >::type, AllowEmpty, absl::string_view > StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d)
GPRAPI void grpc_slice_unref(grpc_slice s)
GRPCAPI void grpc_call_details_destroy(grpc_call_details *details)
GRPCAPI void grpc_call_details_init(grpc_call_details *details)
int main(int argc, char **argv)
grpc_metadata_array * trailing_metadata
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
grpc_status_code * status
@ GRPC_STATUS_UNAVAILABLE
return memset(p, 0, total)
ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec< Args... > &format, const Args &... args)
struct grpc_op::grpc_op_data::grpc_op_send_initial_metadata send_initial_metadata
GRPCAPI char * grpc_call_get_peer(grpc_call *call)
GPRAPI void gpr_free(void *ptr)
void grpc_recycle_unused_port(int port)
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
GRPCAPI void grpc_server_register_completion_queue(grpc_server *server, grpc_completion_queue *cq, void *reserved)
#define GRPC_LOG_IF_ERROR(what, error)
union grpc_op::grpc_op_data data
GRPCAPI grpc_server_credentials * grpc_insecure_server_credentials_create()
int grpc_ipv6_loopback_available(void)
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
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)
static grpc_metadata_array trailing_metadata_recv
std::unique_ptr< Server > server
#define GRPC_INITIAL_METADATA_WAIT_FOR_READY
@ GRPC_OP_RECV_INITIAL_METADATA
std::string StrJoin(Iterator start, Iterator end, absl::string_view sep, Formatter &&fmt)
@ GRPC_OP_SEND_STATUS_FROM_SERVER
def c_str(s, encoding='ascii')
static void * tag(intptr_t t)
GRPCAPI void grpc_server_credentials_release(grpc_server_credentials *creds)
GRPCAPI int grpc_server_add_http2_port(grpc_server *server, const char *addr, grpc_server_credentials *creds)
GRPCAPI void grpc_call_unref(grpc_call *call)
gpr_timespec grpc_timeout_milliseconds_to_deadline(int64_t time_ms)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
void cq_verifier_destroy(cq_verifier *v)
struct grpc_call grpc_call
std::string JoinHostPort(absl::string_view host, int port)
GRPCAPI grpc_channel_credentials * grpc_insecure_credentials_create()
GPRAPI grpc_slice grpc_slice_from_static_string(const char *source)
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
struct grpc_server grpc_server
static grpc_metadata_array request_metadata_recv
GRPCAPI void grpc_server_destroy(grpc_server *server)
#define CQ_EXPECT_COMPLETION(v, tag, success)
int grpc_pick_unused_port_or_die(void)
grpc_slice * status_details
static grpc_slice details
int grpc_forbid_dualstack_sockets_for_testing
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
GRPCAPI grpc_call * grpc_channel_create_call(grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask, grpc_completion_queue *completion_queue, grpc_slice method, const grpc_slice *host, gpr_timespec deadline, void *reserved)
struct grpc_op::grpc_op_data::grpc_op_recv_close_on_server recv_close_on_server
ABSL_MUST_USE_RESULT bool ok() const
GRPCAPI grpc_channel * grpc_channel_create(const char *target, grpc_channel_credentials *creds, const grpc_channel_args *args)
grpc_error_handle absl_status_to_grpc_error(absl::Status status)
#define GRPC_PROPAGATE_DEFAULTS
struct grpc_op::grpc_op_data::grpc_op_send_status_from_server send_status_from_server
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
@ GRPC_OP_SEND_INITIAL_METADATA
DNSResolver * GetDNSResolver()
struct grpc_op::grpc_op_data::grpc_op_recv_status_on_client recv_status_on_client
size_t trailing_metadata_count
GRPCAPI void grpc_server_shutdown_and_notify(grpc_server *server, grpc_completion_queue *cq, void *tag)
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
void cq_verify(cq_verifier *v, int timeout_sec)
GRPCAPI void grpc_completion_queue_shutdown(grpc_completion_queue *cq)
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
struct grpc_channel grpc_channel
@ GRPC_OP_RECV_CLOSE_ON_SERVER
@ GRPC_STATUS_UNIMPLEMENTED
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
struct grpc_op::grpc_op_data::grpc_op_recv_initial_metadata recv_initial_metadata
grpc_slice * status_details
grpc_completion_type type
GRPCAPI void grpc_init(void)
GRPCAPI void grpc_server_start(grpc_server *server)
@ GRPC_OP_RECV_STATUS_ON_CLIENT
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b)
absl::StatusOr< std::string > grpc_sockaddr_to_uri(const grpc_resolved_address *resolved_addr)
static grpc_metadata_array initial_metadata_recv
GRPCAPI grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops, size_t nops, void *tag, void *reserved)
GRPCAPI void grpc_shutdown(void)
virtual absl::StatusOr< std::vector< grpc_resolved_address > > ResolveNameBlocking(absl::string_view name, absl::string_view default_port)=0
static void drain_cq(grpc_completion_queue *cq)
static grpc_completion_queue * cq
@ GRPC_OP_SEND_CLOSE_FROM_CLIENT
static grpc_call_details call_details
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
const Status & status() const &
static bool external_dns_works(const char *host)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:13