Browse Source

Unit test: first step of a small https example with additional security

bel2125 7 years ago
parent
commit
ddad4ea3f0
1 changed files with 96 additions and 5 deletions
  1. 96 5
      test/public_server.c

+ 96 - 5
test/public_server.c

@@ -4383,7 +4383,7 @@ END_TEST
 
 
 static void
-minimal_http_client_impl(const char *server, uint16_t port, const char *uri)
+minimal_http_https_client_impl(const char *server, uint16_t port, int use_ssl, const char *uri)
 {
 	/* Client var */
 	struct mg_connection *client;
@@ -4396,7 +4396,7 @@ minimal_http_client_impl(const char *server, uint16_t port, const char *uri)
 	mark_point();
 
 	client = mg_connect_client(
-	    server, port, 0, client_err_buf, sizeof(client_err_buf));
+            server, port, use_ssl, client_err_buf, sizeof(client_err_buf));
 
 	ck_assert(client != NULL);
 	ck_assert_str_eq(client_err_buf, "");
@@ -4435,6 +4435,20 @@ minimal_http_client_impl(const char *server, uint16_t port, const char *uri)
 }
 
 
+static void
+minimal_http_client_impl(const char *server, uint16_t port, int use_ssl, const char *uri)
+{
+    minimal_http_https_client_impl(server, port, 0, uri);
+}
+
+
+static void
+minimal_https_client_impl(const char *server, uint16_t port, int use_ssl, const char *uri)
+{
+    minimal_http_https_client_impl(server, port, 1, uri);
+}
+
+
 START_TEST(test_minimal_client)
 {
 	mark_point();
@@ -4482,7 +4496,7 @@ minimal_test_request_handler(struct mg_connection *conn, void *cbdata)
 }
 
 
-START_TEST(test_minimal_server_callback)
+START_TEST(test_minimal_http_server_callback)
 {
 	/* This test should ensure the minimum server example in
 	 * docs/Embedding.md is still running. */
@@ -4530,6 +4544,82 @@ START_TEST(test_minimal_server_callback)
 END_TEST
 
 
+START_TEST(test_minimal_https_server_callback)
+{
+        /* This test should ensure the minimum server example in
+         * docs/Embedding.md is still running. */
+
+        /* Server context handle */
+        struct mg_context *ctx;
+
+        /* Server start parameters for HTTPS */
+        const char *OPTIONS[32];
+        int opt_cnt = 0;
+
+        /* HTTPS port - required */
+        OPTIONS[opt_idx++] = "listening_ports";
+        OPTIONS[opt_idx++] = "8443s";
+
+        /* path to certificate file - required */
+        OPTIONS[opt_idx++] = "ssl_certificate";
+        OPTIONS[opt_idx++] = locate_ssl_cert();
+
+        /* set minimum SSL version to TLS 1.2 - recommended */
+        OPTIONS[opt_idx++] = "ssl_protocol_version";
+        OPTIONS[opt_idx++] = "4";
+
+        /* set some modern ciphers - recommended */
+        OPTIONS[opt_idx++] = "ssl_cipher_list";
+        OPTIONS[opt_idx++] = "ECDH+AESGCM+AES256:!aNULL:!MD5:!DSS";
+
+        /* set "HTTPS only" header - recommended */
+        OPTIONS[opt_idx++] = "strict_transport_security_max_age";
+        OPTIONS[opt_idx++] = "31622400";
+
+        /* end of options - required */
+        OPTIONS[opt_idx] = NULL;
+
+        mark_point();
+
+        /* Initialize the library */
+        mg_init_library(0);
+
+
+        /* Start the server */
+        ctx = test_mg_start(NULL, 0, OPTIONS);
+        ck_assert(ctx != NULL);
+
+        /* Add some handler */
+        mg_set_request_handler(ctx,
+                               "/hello",
+                               minimal_test_request_handler,
+                               (void *)"Hello world");
+        mg_set_request_handler(ctx,
+                               "/8",
+                               minimal_test_request_handler,
+                               (void *)"Number eight");
+
+        /* Run the server for 15 seconds */
+        test_sleep(10);
+
+        /* Call a test client */
+        minimal_https_client_impl("127.0.0.1", 8443, "/hello");
+
+        /* Run the server for 15 seconds */
+        test_sleep(5);
+
+
+        /* Stop the server */
+        test_mg_stop(ctx);
+
+        /* Un-initialize the library */
+        mg_exit_library();
+
+        mark_point();
+}
+END_TEST
+
+
 Suite *
 make_public_server_suite(void)
 {
@@ -4568,8 +4658,9 @@ make_public_server_suite(void)
 	tcase_set_timeout(tcase_startthreads, civetweb_min_test_timeout);
 	suite_add_tcase(suite, tcase_startthreads);
 
-	tcase_add_test(tcase_minimal_svr, test_minimal_server_callback);
-	tcase_set_timeout(tcase_minimal_svr, civetweb_min_server_test_timeout);
+        tcase_add_test(tcase_minimal_svr, test_minimal_http_server_callback);
+        tcase_add_test(tcase_minimal_svr, test_minimal_https_server_callback);
+        tcase_set_timeout(tcase_minimal_svr, civetweb_min_server_test_timeout);
 	suite_add_tcase(suite, tcase_minimal_svr);
 
 	tcase_add_test(tcase_minimal_cli, test_minimal_client);