aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/httpcli/httpcli_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/core/httpcli/httpcli_test.c')
-rw-r--r--test/core/httpcli/httpcli_test.c101
1 files changed, 74 insertions, 27 deletions
diff --git a/test/core/httpcli/httpcli_test.c b/test/core/httpcli/httpcli_test.c
index 404121a210..6e579bc045 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,112 @@ 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,
- (void *)42);
- GPR_ASSERT(gpr_event_wait(&g_done, n_seconds_time(20)));
+ grpc_httpcli_post(&g_context, &g_pollset, &req, "hello", 5,
+ n_seconds_time(15), on_finish, (void *)42);
+ 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;
}