Skip to content

Commit

Permalink
Add working tests for httpcli
Browse files Browse the repository at this point in the history
  • Loading branch information
ctiller committed Jun 5, 2015
1 parent b15d37a commit b5075e3
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 15 deletions.
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 0 additions & 1 deletion build.json
Original file line number Diff line number Diff line change
Expand Up @@ -1351,7 +1351,6 @@
{
"name": "httpcli_test",
"build": "test",
"run": false,
"language": "c",
"src": [
"test/core/httpcli/httpcli_test.c"
Expand Down
69 changes: 55 additions & 14 deletions test/core/httpcli/httpcli_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,12 @@
#include <string.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_event g_done;
Expand All @@ -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 =
"<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_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;
}
31 changes: 31 additions & 0 deletions test/core/httpcli/test_server.py
Original file line number Diff line number Diff line change
@@ -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('<html><head><title>Hello world!</title></head>')
self.wfile.write('<body><p>This is a test</p></body></html>')

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()
9 changes: 9 additions & 0 deletions tools/run_tests/tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,15 @@
"posix"
]
},
{
"flaky": false,
"language": "c",
"name": "httpcli_test",
"platforms": [
"windows",
"posix"
]
},
{
"flaky": false,
"language": "c",
Expand Down

0 comments on commit b5075e3

Please sign in to comment.