diff --git a/test/unit_test.c b/test/unit_test.c index 5d4f38964ae43733400efa0399ea0edb5efe5b35..149d5655287fbb2778d85729a5212b1488119ffc 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -539,24 +539,39 @@ static void test_request_replies(void) { mg_stop(ctx); } -static int user_data_callback(struct mg_connection *conn) { - ASSERT(mg_get_request_info(conn)->user_data == (void *) 123); - mg_printf(conn, "HTTP/1.0 200 OK\r\n\r\nhi"); +static int api_callback(struct mg_connection *conn) { + struct mg_request_info *ri = mg_get_request_info(conn); + char post_data[100] = ""; + + ASSERT(ri->user_data == (void *) 123); + ASSERT(ri->num_headers == 2); + ASSERT(strcmp(mg_get_header(conn, "host"), "blah.com") == 0); + ASSERT(mg_read(conn, post_data, sizeof(post_data)) == 3); + ASSERT(memcmp(post_data, "b=1", 3) == 0); + ASSERT(ri->query_string != NULL); + ASSERT(ri->remote_ip > 0); + ASSERT(ri->remote_port > 0); + ASSERT(strcmp(ri->http_version, "1.0") == 0); + + mg_printf(conn, "HTTP/1.0 200 OK\r\n\r\n"); return 1; } -static void test_user_data(void) { +static void test_api_calls(void) { char ebuf[100]; struct mg_callbacks callbacks; struct mg_connection *conn; struct mg_context *ctx; + static const char *request = "POST /?a=%20&b=&c=xx HTTP/1.0\r\n" + "Host: blah.com\n" // More spaces before + "content-length: 3\r\n" // Lower case header name + "\r\nb=123456"; // Content size > content-length, test for mg_read() memset(&callbacks, 0, sizeof(callbacks)); - callbacks.begin_request = user_data_callback; + callbacks.begin_request = api_callback; ASSERT((ctx = mg_start(&callbacks, (void *) 123, OPTIONS)) != NULL); ASSERT((conn = mg_download("localhost", atoi(HTTPS_PORT), 1, - ebuf, sizeof(ebuf), - "%s", "GET / HTTP/1.0\r\n\r\n")) != NULL); + ebuf, sizeof(ebuf), "%s", request)) != NULL); mg_close_connection(conn); mg_stop(ctx); } @@ -576,7 +591,7 @@ int __cdecl main(void) { test_skip_quoted(); test_mg_upload(); test_request_replies(); - test_user_data(); + test_api_calls(); #ifdef USE_LUA test_lua(); #endif