Forráskód Böngészése

Add new unit test

bel 9 éve
szülő
commit
8be52568e8
2 módosított fájl, 88 hozzáadás és 5 törlés
  1. 1 0
      test/CMakeLists.txt
  2. 87 5
      test/public_server.c

+ 1 - 0
test/CMakeLists.txt

@@ -159,6 +159,7 @@ civetweb_add_test(PublicServer "TLS Server Client")
 civetweb_add_test(PublicServer "Server Requests")
 civetweb_add_test(PublicServer "Server Requests")
 civetweb_add_test(PublicServer "Handle Form")
 civetweb_add_test(PublicServer "Handle Form")
 civetweb_add_test(PublicServer "HTTP Authentication")
 civetweb_add_test(PublicServer "HTTP Authentication")
+civetweb_add_test(PublicServer "HTTP Keep Alive")
 
 
 # Tests with main.c
 # Tests with main.c
 #civetweb_add_test(EXE "Helper funcs")
 #civetweb_add_test(EXE "Helper funcs")

+ 87 - 5
test/public_server.c

@@ -2783,6 +2783,82 @@ START_TEST(test_http_auth)
 END_TEST
 END_TEST
 
 
 
 
+START_TEST(test_keep_alive)
+{
+	struct mg_context *ctx;
+	const char *OPTIONS[] =
+	{ "listening_ports",
+	  "8080",
+	  "request_timeout_ms",
+	  "10000",
+	  "enable_keep_alive",
+	  "yes",
+#if !defined(NO_FILES)
+	  "document_root",
+	  ".",
+	  "enable_directory_listing",
+	  "no",
+#endif
+	  NULL };
+
+	struct mg_connection *client_conn;
+	char client_err[256];
+	const struct mg_request_info *client_ri;
+	int client_res, i;
+	const char *connection_header;
+
+	mark_point();
+	ctx = mg_start(NULL, NULL, OPTIONS);
+	ck_assert(ctx != NULL);
+
+	test_sleep(1);
+
+	/* HTTP 1.1 GET request */
+	memset(client_err, 0, sizeof(client_err));
+	client_conn =
+	    mg_connect_client("127.0.0.1", 8080, 0, client_err, sizeof(client_err));
+	ck_assert(client_conn != NULL);
+	ck_assert_str_eq(client_err, "");
+	mg_printf(client_conn,
+	          "GET / HTTP/1.1\r\nHost: "
+	          "localhost:8080\r\nConnection: keep-alive\r\n\r\n");
+	client_res =
+	    mg_get_response(client_conn, client_err, sizeof(client_err), 10000);
+	ck_assert_int_ge(client_res, 0);
+	ck_assert_str_eq(client_err, "");
+	client_ri = mg_get_request_info(client_conn);
+	ck_assert(client_ri != NULL);
+
+#if defined(NO_FILES)
+	ck_assert_str_eq(client_ri->uri, "404");
+#else
+	ck_assert_str_eq(client_ri->uri, "403");
+#endif
+
+	connection_header = 0;
+	for (i = 0; i < client_ri->num_headers; i++) {
+		if (!mg_strcasecmp(client_ri->http_headers[i].name, "Connection")) {
+			ck_assert_ptr_eq(connection_header, NULL);
+			connection_header = client_ri->http_headers[i].value;
+			ck_assert_ptr_ne(connection_header, NULL);
+		}
+	}
+	/* Error replies will close the connection, even if keep-alive is set. */
+	ck_assert_ptr_ne(connection_header, NULL);
+	ck_assert_str_eq(connection_header, "close");
+	mg_close_connection(client_conn);
+
+	test_sleep(1);
+
+	/* TODO: request a file and keep alive
+	 * (will only work if NO_FILES is not set). */
+
+	/* Stop the server and clean up */
+	mg_stop(ctx);
+}
+END_TEST
+
+
 Suite *
 Suite *
 make_public_server_suite(void)
 make_public_server_suite(void)
 {
 {
@@ -2796,6 +2872,7 @@ make_public_server_suite(void)
 	TCase *const tcase_serverrequests = tcase_create("Server Requests");
 	TCase *const tcase_serverrequests = tcase_create("Server Requests");
 	TCase *const tcase_handle_form = tcase_create("Handle Form");
 	TCase *const tcase_handle_form = tcase_create("Handle Form");
 	TCase *const tcase_http_auth = tcase_create("HTTP Authentication");
 	TCase *const tcase_http_auth = tcase_create("HTTP Authentication");
+	TCase *const tcase_keep_alive = tcase_create("HTTP Keep Alive");
 
 
 	tcase_add_test(tcase_checktestenv, test_the_test_environment);
 	tcase_add_test(tcase_checktestenv, test_the_test_environment);
 	tcase_set_timeout(tcase_checktestenv, civetweb_min_test_timeout);
 	tcase_set_timeout(tcase_checktestenv, civetweb_min_test_timeout);
@@ -2829,6 +2906,10 @@ make_public_server_suite(void)
 	tcase_set_timeout(tcase_http_auth, 60);
 	tcase_set_timeout(tcase_http_auth, 60);
 	suite_add_tcase(suite, tcase_http_auth);
 	suite_add_tcase(suite, tcase_http_auth);
 
 
+	tcase_add_test(tcase_keep_alive, test_keep_alive);
+	tcase_set_timeout(tcase_keep_alive, 300);
+	suite_add_tcase(suite, tcase_keep_alive);
+
 	return suite;
 	return suite;
 }
 }
 
 
@@ -2846,11 +2927,12 @@ MAIN_PUBLIC_SERVER(void)
 	test_the_test_environment(0);
 	test_the_test_environment(0);
 	test_threading(0);
 	test_threading(0);
 	test_mg_start_stop_http_server(0);
 	test_mg_start_stop_http_server(0);
-	test_mg_start_stop_https_server(0);
-	test_request_handlers(0);
-	test_mg_server_and_client_tls(0);
-	test_handle_form(0);
-	test_http_auth(0);
+	// test_mg_start_stop_https_server(0);
+	// test_request_handlers(0);
+	// test_mg_server_and_client_tls(0);
+	// test_handle_form(0);
+	// test_http_auth(0);
+	test_keep_alive(0);
 
 
 	printf("\nok: %i\nfailed: %i\n\n", chk_ok, chk_failed);
 	printf("\nok: %i\nfailed: %i\n\n", chk_ok, chk_failed);
 }
 }