From b5075e3754954c6644ee6b54b9755c38cec3902f Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 5 Jun 2015 13:00:46 -0700 Subject: [PATCH] Add working tests for httpcli --- Makefile | 2 + build.json | 1 - test/core/httpcli/httpcli_test.c | 69 +++++++++++++++++++++++++------- test/core/httpcli/test_server.py | 31 ++++++++++++++ tools/run_tests/tests.json | 9 +++++ 5 files changed, 97 insertions(+), 15 deletions(-) create mode 100755 test/core/httpcli/test_server.py diff --git a/Makefile b/Makefile index 13170c7227a..a45eee96ce2 100644 --- a/Makefile +++ b/Makefile @@ -1328,6 +1328,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/httpcli_format_request_test || ( echo test httpcli_format_request_test failed ; exit 1 ) $(E) "[RUN] Testing httpcli_parser_test" $(Q) $(BINDIR)/$(CONFIG)/httpcli_parser_test || ( echo test httpcli_parser_test failed ; exit 1 ) + $(E) "[RUN] Testing httpcli_test" + $(Q) $(BINDIR)/$(CONFIG)/httpcli_test || ( echo test httpcli_test failed ; exit 1 ) $(E) "[RUN] Testing json_rewrite_test" $(Q) $(BINDIR)/$(CONFIG)/json_rewrite_test || ( echo test json_rewrite_test failed ; exit 1 ) $(E) "[RUN] Testing json_test" diff --git a/build.json b/build.json index 084645937b7..d7050d56235 100644 --- a/build.json +++ b/build.json @@ -1351,7 +1351,6 @@ { "name": "httpcli_test", "build": "test", - "run": false, "language": "c", "src": [ "test/core/httpcli/httpcli_test.c" diff --git a/test/core/httpcli/httpcli_test.c b/test/core/httpcli/httpcli_test.c index fb2dbc00ce8..76820916a18 100644 --- a/test/core/httpcli/httpcli_test.c +++ b/test/core/httpcli/httpcli_test.c @@ -36,8 +36,12 @@ #include #include "src/core/iomgr/iomgr.h" +#include #include +#include +#include #include +#include "test/core/util/port.h" #include "test/core/util/test_config.h" static gpr_event g_done; @@ -47,56 +51,93 @@ static gpr_timespec n_seconds_time(int seconds) { } static void on_finish(void *arg, const grpc_httpcli_response *response) { + const char *expect = + "Hello world!" + "

This is a test

"; GPR_ASSERT(arg == (void *)42); GPR_ASSERT(response); GPR_ASSERT(response->status == 200); + GPR_ASSERT(response->body_length == strlen(expect)); + GPR_ASSERT(0 == memcmp(expect, response->body, response->body_length)); gpr_event_set(&g_done, (void *)1); } -static void test_get(int use_ssl) { +static void test_get(int use_ssl, int port) { grpc_httpcli_request req; + char* host; 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); + gpr_event_init(&g_done); 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(&req, n_seconds_time(15), on_finish, (void *)42); + gpr_free(host); GPR_ASSERT(gpr_event_wait(&g_done, n_seconds_time(20))); } -/* -static void test_post(int use_ssl) { +static void test_post(int use_ssl, int port) { grpc_httpcli_request req; + char* host; gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_post", (int)use_ssl); + gpr_asprintf(&host, "localhost:%d", port); + gpr_log(GPR_INFO, "posting to %s", host); + gpr_event_init(&g_done); 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(&req, "hello", 5, n_seconds_time(15), on_finish, (void *)42); GPR_ASSERT(gpr_event_wait(&g_done, n_seconds_time(20))); } -*/ 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(); - test_get(0); - test_get(1); - - /* test_post(0); */ - /* test_post(1); */ + test_get(0, port); + test_post(0, port); grpc_iomgr_shutdown(); + gpr_subprocess_destroy(server); + return 0; } diff --git a/test/core/httpcli/test_server.py b/test/core/httpcli/test_server.py new file mode 100755 index 00000000000..babfe84ddca --- /dev/null +++ b/test/core/httpcli/test_server.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +"""Server for httpcli_test""" + +import argparse +import BaseHTTPServer + +argp = argparse.ArgumentParser(description='Server for httpcli_test') +argp.add_argument('-p', '--port', default=10080, type=int) +args = argp.parse_args() + +print 'server running on port %d' % args.port + +class Handler(BaseHTTPServer.BaseHTTPRequestHandler): + def good(self): + self.send_response(200) + self.send_header('Content-Type', 'text/html') + self.end_headers() + self.wfile.write('Hello world!') + self.wfile.write('

This is a test

') + + def do_GET(self): + if self.path == '/get': + self.good() + + def do_POST(self): + content = self.rfile.read(int(self.headers.getheader('content-length'))) + if self.path == '/post' and content == 'hello': + self.good() + +BaseHTTPServer.HTTPServer(('', args.port), Handler).serve_forever() diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 4aafdea46fd..7a38e03f81f 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -348,6 +348,15 @@ "posix" ] }, + { + "flaky": false, + "language": "c", + "name": "httpcli_test", + "platforms": [ + "windows", + "posix" + ] + }, { "flaky": false, "language": "c",