Port tcp_server_posix_test

pull/1888/head
Craig Tiller 10 years ago
parent 2be8de01ef
commit 451b4dfd8e
  1. 50
      test/core/iomgr/tcp_server_posix_test.c

@ -45,18 +45,17 @@
#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
static gpr_mu mu;
static gpr_cv cv;
static int nconnects = 0;
static grpc_pollset g_pollset;
static int g_nconnects = 0;
static void on_connect(void *arg, grpc_endpoint *tcp) {
grpc_endpoint_shutdown(tcp);
grpc_endpoint_destroy(tcp);
gpr_mu_lock(&mu);
nconnects++;
gpr_cv_broadcast(&cv);
gpr_mu_unlock(&mu);
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
g_nconnects++;
grpc_pollset_kick(&g_pollset);
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
}
static void test_no_op(void) {
@ -106,12 +105,11 @@ static void test_connect(int n) {
grpc_tcp_server *s = grpc_tcp_server_create();
int nconnects_before;
gpr_timespec deadline;
grpc_pollset *pollsets[1];
int i;
LOG_TEST();
gpr_log(GPR_INFO, "clients=%d", n);
gpr_mu_lock(&mu);
memset(&addr, 0, sizeof(addr));
addr.ss_family = AF_INET;
GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len));
@ -121,38 +119,43 @@ static void test_connect(int n) {
GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)&addr, &addr_len) == 0);
GPR_ASSERT(addr_len <= sizeof(addr));
grpc_tcp_server_start(s, NULL, 0, on_connect, NULL);
pollsets[0] = &g_pollset;
grpc_tcp_server_start(s, pollsets, 1, on_connect, NULL);
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
for (i = 0; i < n; i++) {
deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1);
deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(4000);
nconnects_before = nconnects;
nconnects_before = g_nconnects;
clifd = socket(addr.ss_family, SOCK_STREAM, 0);
GPR_ASSERT(clifd >= 0);
gpr_log(GPR_DEBUG, "start connect");
GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, addr_len) == 0);
while (nconnects == nconnects_before) {
GPR_ASSERT(gpr_cv_wait(&cv, &mu, deadline) == 0);
gpr_log(GPR_DEBUG, "wait");
while (g_nconnects == nconnects_before && gpr_time_cmp(deadline, gpr_now()) > 0) {
grpc_pollset_work(&g_pollset, deadline);
}
gpr_log(GPR_DEBUG, "wait done");
GPR_ASSERT(nconnects == nconnects_before + 1);
GPR_ASSERT(g_nconnects == nconnects_before + 1);
close(clifd);
if (i != n - 1) {
sleep(1);
}
}
gpr_mu_unlock(&mu);
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_tcp_server_destroy(s, NULL, NULL);
}
static void destroy_pollset(void *p) {
grpc_pollset_destroy(p);
}
int main(int argc, char **argv) {
grpc_test_init(argc, argv);
grpc_iomgr_init();
gpr_mu_init(&mu);
gpr_cv_init(&cv);
grpc_pollset_init(&g_pollset);
test_no_op();
test_no_op_with_start();
@ -161,8 +164,7 @@ int main(int argc, char **argv) {
test_connect(1);
test_connect(10);
grpc_pollset_shutdown(&g_pollset, destroy_pollset, &g_pollset);
grpc_iomgr_shutdown();
gpr_mu_destroy(&mu);
gpr_cv_destroy(&cv);
return 0;
}

Loading…
Cancel
Save