diff --git a/test/unit_test.c b/test/unit_test.c index 452189f4..2c425555 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -916,16 +916,31 @@ static void f4(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { } } +static void f4c(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { + if (ev == MG_EV_CONNECT) { + mg_printf(c, "GET /foo/bar HTTP/1.0\n\n"); + } else if (ev == MG_EV_HTTP_MSG) { + struct mg_http_message *hm = (struct mg_http_message *) ev_data; + ASSERT(mg_strcmp(hm->body, mg_str("/foo/bar/abcdef")) == 0); + strcat((char *) fn_data, "m"); + } else if (ev == MG_EV_HTTP_CHUNK) { + strcat((char *) fn_data, "f"); + } else if (ev == MG_EV_CLOSE) { + strcat((char *) fn_data, "c"); + } +} + static void test_http_no_content_length(void) { - char messages[10] = {0}; + char buf1[10] = {0}, buf2[10] = {0}; struct mg_mgr mgr; const char *url = "http://127.0.0.1:12348"; - char buf[FETCH_BUF_SIZE]; + int i; mg_mgr_init(&mgr); - mg_http_listen(&mgr, url, f4, (void *) messages); - ASSERT(fetch(&mgr, buf, url, "GET /foo/bar HTTP/1.0\r\n\n") == 200); - ASSERT(cmpbody(buf, "/foo/bar/abcdef") == 0); - ASSERT(strcmp(messages, "mc") == 0); // Check that EV_CLOSE comes last + mg_http_listen(&mgr, url, f4, (void *) buf1); + mg_http_connect(&mgr, url, f4c, (void *) buf2); + for (i = 0; i < 100 && strchr(buf2, 'c') == NULL; i++) mg_mgr_poll(&mgr, 1); + ASSERT(strcmp(buf1, "mc") == 0); + ASSERT(strcmp(buf2, "fcm") == 0); // See #1475 mg_mgr_free(&mgr); ASSERT(mgr.conns == NULL); }