|
|
|
@ -23,6 +23,13 @@ |
|
|
|
|
|
|
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
#include <vector> |
|
|
|
|
|
|
|
|
|
#include "absl/strings/str_format.h" |
|
|
|
|
#include "absl/strings/str_join.h" |
|
|
|
|
#include "absl/strings/str_split.h" |
|
|
|
|
#include "absl/strings/string_view.h" |
|
|
|
|
|
|
|
|
|
#include <grpc/grpc.h> |
|
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
|
#include <grpc/support/log.h> |
|
|
|
@ -51,8 +58,6 @@ static void drain_cq(grpc_completion_queue* cq) { |
|
|
|
|
} while (ev.type != GRPC_QUEUE_SHUTDOWN); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_nothing(void* /*ignored*/) {} |
|
|
|
|
|
|
|
|
|
static void log_resolved_addrs(const char* label, const char* hostname) { |
|
|
|
|
grpc_resolved_addresses* res = nullptr; |
|
|
|
|
grpc_error* error = grpc_blocking_resolve_address(hostname, "80", &res); |
|
|
|
@ -97,8 +102,7 @@ void test_connect(const char* server_host, const char* client_host, int port, |
|
|
|
|
picked_port = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
grpc_core::UniquePtr<char> server_hostport; |
|
|
|
|
grpc_core::JoinHostPort(&server_hostport, server_host, port); |
|
|
|
|
std::string server_hostport = grpc_core::JoinHostPort(server_host, port); |
|
|
|
|
|
|
|
|
|
grpc_metadata_array_init(&initial_metadata_recv); |
|
|
|
|
grpc_metadata_array_init(&trailing_metadata_recv); |
|
|
|
@ -110,7 +114,7 @@ void test_connect(const char* server_host, const char* client_host, int port, |
|
|
|
|
server = grpc_server_create(nullptr, nullptr); |
|
|
|
|
grpc_server_register_completion_queue(server, cq, nullptr); |
|
|
|
|
GPR_ASSERT((got_port = grpc_server_add_insecure_http2_port( |
|
|
|
|
server, server_hostport.get())) > 0); |
|
|
|
|
server, server_hostport.c_str())) > 0); |
|
|
|
|
if (port == 0) { |
|
|
|
|
port = got_port; |
|
|
|
|
} else { |
|
|
|
@ -120,41 +124,25 @@ void test_connect(const char* server_host, const char* client_host, int port, |
|
|
|
|
cqv = cq_verifier_create(cq); |
|
|
|
|
|
|
|
|
|
/* Create client. */ |
|
|
|
|
grpc_core::UniquePtr<char> client_hostport; |
|
|
|
|
std::string client_hostport; |
|
|
|
|
if (client_host[0] == 'i') { |
|
|
|
|
/* for ipv4:/ipv6: addresses, concatenate the port to each of the parts */ |
|
|
|
|
size_t i; |
|
|
|
|
grpc_slice uri_slice; |
|
|
|
|
grpc_slice_buffer uri_parts; |
|
|
|
|
char** hosts_with_port; |
|
|
|
|
|
|
|
|
|
uri_slice = grpc_slice_new(const_cast<char*>(client_host), |
|
|
|
|
strlen(client_host), do_nothing); |
|
|
|
|
grpc_slice_buffer_init(&uri_parts); |
|
|
|
|
grpc_slice_split(uri_slice, ",", &uri_parts); |
|
|
|
|
hosts_with_port = |
|
|
|
|
static_cast<char**>(gpr_malloc(sizeof(char*) * uri_parts.count)); |
|
|
|
|
for (i = 0; i < uri_parts.count; i++) { |
|
|
|
|
char* uri_part_str = grpc_slice_to_c_string(uri_parts.slices[i]); |
|
|
|
|
gpr_asprintf(&hosts_with_port[i], "%s:%d", uri_part_str, port); |
|
|
|
|
gpr_free(uri_part_str); |
|
|
|
|
} |
|
|
|
|
client_hostport.reset(gpr_strjoin_sep((const char**)hosts_with_port, |
|
|
|
|
uri_parts.count, ",", nullptr)); |
|
|
|
|
for (i = 0; i < uri_parts.count; i++) { |
|
|
|
|
gpr_free(hosts_with_port[i]); |
|
|
|
|
std::vector<absl::string_view> uri_parts = |
|
|
|
|
absl::StrSplit(client_host, ",", absl::SkipEmpty()); |
|
|
|
|
std::vector<std::string> hosts_with_port; |
|
|
|
|
hosts_with_port.reserve(uri_parts.size()); |
|
|
|
|
for (const absl::string_view& uri_part : uri_parts) { |
|
|
|
|
hosts_with_port.push_back(absl::StrFormat("%s:%d", uri_part, port)); |
|
|
|
|
} |
|
|
|
|
gpr_free(hosts_with_port); |
|
|
|
|
grpc_slice_buffer_destroy(&uri_parts); |
|
|
|
|
grpc_slice_unref(uri_slice); |
|
|
|
|
client_hostport = absl::StrJoin(hosts_with_port, ","); |
|
|
|
|
} else { |
|
|
|
|
grpc_core::JoinHostPort(&client_hostport, client_host, port); |
|
|
|
|
client_hostport = grpc_core::JoinHostPort(client_host, port); |
|
|
|
|
} |
|
|
|
|
client = |
|
|
|
|
grpc_insecure_channel_create(client_hostport.get(), nullptr, nullptr); |
|
|
|
|
grpc_insecure_channel_create(client_hostport.c_str(), nullptr, nullptr); |
|
|
|
|
|
|
|
|
|
gpr_log(GPR_INFO, "Testing with server=%s client=%s (expecting %s)", |
|
|
|
|
server_hostport.get(), client_hostport.get(), |
|
|
|
|
server_hostport.c_str(), client_hostport.c_str(), |
|
|
|
|
expect_ok ? "success" : "failure"); |
|
|
|
|
log_resolved_addrs("server resolved addr", server_host); |
|
|
|
|
log_resolved_addrs("client resolved addr", client_host); |
|
|
|
|