diff options
Diffstat (limited to 'test/core/httpcli/httpcli_test.c')
-rw-r--r-- | test/core/httpcli/httpcli_test.c | 101 |
1 files changed, 75 insertions, 26 deletions
diff --git a/test/core/httpcli/httpcli_test.c b/test/core/httpcli/httpcli_test.c index 404121a210..b6e4c0fd0a 100644 --- a/test/core/httpcli/httpcli_test.c +++ b/test/core/httpcli/httpcli_test.c @@ -35,12 +35,16 @@ #include <string.h> +#include <grpc/grpc.h> #include "src/core/iomgr/iomgr.h" +#include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/subprocess.h> #include <grpc/support/sync.h> +#include "test/core/util/port.h" #include "test/core/util/test_config.h" -static gpr_mu g_mu; static int g_done = 0; static grpc_httpcli_context g_context; static grpc_pollset g_pollset; @@ -50,69 +54,114 @@ static gpr_timespec n_seconds_time(int seconds) { } static void on_finish(void *arg, const grpc_httpcli_response *response) { + const char *expect = + "<html><head><title>Hello world!</title></head>" + "<body><p>This is a test</p></body></html>"; GPR_ASSERT(arg == (void *)42); GPR_ASSERT(response); GPR_ASSERT(response->status == 200); - gpr_mu_lock(&g_mu); + GPR_ASSERT(response->body_length == strlen(expect)); + GPR_ASSERT(0 == memcmp(expect, response->body, response->body_length)); + gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset)); g_done = 1; - gpr_mu_unlock(&g_mu); + grpc_pollset_kick(&g_pollset); + gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); } -static void test_get(int use_ssl) { +static void test_get(int use_ssl, int port) { grpc_httpcli_request req; + char* host; g_done = 0; gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_get", use_ssl); + gpr_asprintf(&host, "localhost:%d", port); + gpr_log(GPR_INFO, "requesting from %s", host); + memset(&req, 0, sizeof(req)); - req.host = "www.google.com"; - req.path = "/"; + req.host = host; + req.path = "/get"; req.use_ssl = use_ssl; grpc_httpcli_get(&g_context, &g_pollset, &req, n_seconds_time(15), on_finish, (void *)42); - gpr_mu_lock(&g_mu); + gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset)); while (!g_done) { grpc_pollset_work(&g_pollset, n_seconds_time(20)); } - gpr_mu_unlock(&g_mu); + gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); + gpr_free(host); } -/* -static void test_post(int use_ssl) { +static void test_post(int use_ssl, int port) { grpc_httpcli_request req; + char* host; + g_done = 0; gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_post", (int)use_ssl); - gpr_event_init(&g_done); + gpr_asprintf(&host, "localhost:%d", port); + gpr_log(GPR_INFO, "posting to %s", host); + memset(&req, 0, sizeof(req)); - req.host = "requestb.in"; - req.path = "/1eamwr21"; + req.host = host; + req.path = "/post"; req.use_ssl = use_ssl; - grpc_httpcli_post(&req, NULL, 0, n_seconds_time(15), on_finish, + grpc_httpcli_post(&g_context, &g_pollset, &req, "hello", 5, n_seconds_time(15), on_finish, (void *)42); - GPR_ASSERT(gpr_event_wait(&g_done, n_seconds_time(20))); + gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset)); + while (!g_done) { + grpc_pollset_work(&g_pollset, n_seconds_time(20)); + } + gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); + gpr_free(host); +} + +static void destroy_pollset(void* ignored) { + grpc_pollset_destroy(&g_pollset); } -*/ int main(int argc, char **argv) { + gpr_subprocess* server; + char *me = argv[0]; + char *lslash = strrchr(me, '/'); + char* args[4]; + char root[1024]; + int port = grpc_pick_unused_port_or_die(); + + /* figure out where we are */ + if (lslash) { + memcpy(root, me, lslash - me); + root[lslash - me] = 0; + } else { + strcpy(root, "."); + } + + /* start the server */ + gpr_asprintf(&args[0], "%s/../../test/core/httpcli/test_server.py", root); + args[1] = "--port"; + gpr_asprintf(&args[2], "%d", port); + server = gpr_subprocess_create(3, (const char**)args); + GPR_ASSERT(server); + gpr_free(args[0]); + gpr_free(args[2]); + + gpr_sleep_until(gpr_time_add(gpr_now(), gpr_time_from_seconds(5))); + grpc_test_init(argc, argv); - grpc_iomgr_init(); + grpc_init(); grpc_httpcli_context_init(&g_context); grpc_pollset_init(&g_pollset); - gpr_mu_init(&g_mu); - - test_get(0); - test_get(1); - /* test_post(0); */ - /* test_post(1); */ + test_get(0, port); + test_post(0, port); grpc_httpcli_context_destroy(&g_context); - grpc_pollset_destroy(&g_pollset); - grpc_iomgr_shutdown(); - gpr_mu_destroy(&g_mu); + grpc_pollset_shutdown(&g_pollset, destroy_pollset, NULL); + grpc_shutdown(); + + gpr_subprocess_destroy(server); return 0; } |