Merge pull request #1955 from ctiller/critical-code-needs-at-least-some-sort-of-test

Add working tests for httpcli
pull/1974/head
Nicolas Noble 10 years ago
commit 4ac6b88a13
  1. 2
      Makefile
  2. 1
      build.json
  3. 69
      test/core/httpcli/httpcli_test.c
  4. 31
      test/core/httpcli/test_server.py
  5. 9
      tools/run_tests/tests.json

@ -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"

@ -1351,7 +1351,6 @@
{
"name": "httpcli_test",
"build": "test",
"run": false,
"language": "c",
"src": [
"test/core/httpcli/httpcli_test.c"

@ -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;
@ -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;
}

@ -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()

@ -348,6 +348,15 @@
"posix"
]
},
{
"flaky": false,
"language": "c",
"name": "httpcli_test",
"platforms": [
"windows",
"posix"
]
},
{
"flaky": false,
"language": "c",

Loading…
Cancel
Save