From e31f3058fa141f751d63ddb0918e0703850e261b Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Mon, 27 Jan 2014 11:03:44 +0000
Subject: [PATCH] Added test for rewrites

---
 mongoose.c  |  9 +++++----
 unit_test.c | 41 +++++++++++++++++++++++++++++++----------
 2 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/mongoose.c b/mongoose.c
index e3bf97081..2fb165dab 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1542,10 +1542,10 @@ static int must_hide_file(struct connection *conn, const char *path) {
 static int convert_uri_to_file_name(struct connection *conn, char *buf,
                                     size_t buf_len, file_stat_t *st) {
   struct vec a, b;
-  const char *rewrites = conn->server->config_options[URL_REWRITES],
-        *root = conn->server->config_options[DOCUMENT_ROOT],
-        *cgi_pat = conn->server->config_options[CGI_PATTERN],
-        *uri = conn->mg_conn.uri;
+  const char *rewrites = conn->server->config_options[URL_REWRITES];
+  const char *root = conn->server->config_options[DOCUMENT_ROOT];
+  const char *cgi_pat = conn->server->config_options[CGI_PATTERN];
+  const char *uri = conn->mg_conn.uri;
   char *p;
   int match_len;
 
@@ -3639,6 +3639,7 @@ int mg_connect(struct mg_server *server, const char *host, int port,
     return 0;
   }
 
+  conn->server = server;
   conn->client_sock = sock;
   conn->endpoint_type = EP_CLIENT;
   conn->handler = handler;
diff --git a/unit_test.c b/unit_test.c
index 53ff20851..03b7b43f2 100644
--- a/unit_test.c
+++ b/unit_test.c
@@ -538,31 +538,32 @@ static const char *test_parse_multipart(void) {
   return NULL;
 }
 
-#ifdef MONGOOSE_USE_SSL
 static int us1(struct mg_connection *conn) {
   static const char *file_name = "mongoose.h";
+  char *cp = (char *) conn->connection_param;
   int file_size;
 
   if (conn->status_code == MG_CONNECT_SUCCESS) {
-    mg_printf(conn, "GET /%s HTTP/1.0\r\n\r\n", file_name);
+    mg_printf(conn, "GET /%s HTTP/1.0\r\n\r\n", cp);
     return 0;
   } else if (conn->status_code == MG_DOWNLOAD_SUCCESS) {
     char *file_data = read_file(file_name, &file_size);
-    sprintf((char *) conn->connection_param, "%d",
-            (size_t) file_size == conn->content_len &&
-            memcmp(file_data, conn->content, file_size) == 0 ? 1 : 0);
+    sprintf(cp, "%d %s", (size_t) file_size == conn->content_len &&
+            memcmp(file_data, conn->content, file_size) == 0 ? 1 : 0,
+            conn->query_string == NULL ? "?" : conn->query_string);
     free(file_data);
   } else if (conn->status_code == MG_CONNECT_FAILURE) {
-    sprintf((char *) conn->connection_param, "%s", "cf");
+    sprintf(cp, "%s", "cf");
   } else {
-    sprintf((char *) conn->connection_param, "%s", "df");
+    sprintf(cp, "%s", "df");
   }
   return 1;
 }
 
+#ifdef MONGOOSE_USE_SSL
 static const char *test_ssl(void) {
   static const char *ssl_cert = "examples/ssl_cert.pem";
-  char buf1[100] = "";
+  char buf1[100] = "mongoose.h";
   struct mg_server *server = mg_create_server(NULL);
 
   ASSERT(mg_set_option(server, "listening_port", LISTENING_ADDR) == NULL);
@@ -571,8 +572,8 @@ static const char *test_ssl(void) {
 
   ASSERT(mg_connect(server, "127.0.0.1", atoi(HTTP_PORT), 1, us1, buf1) == 1);
 
-  { int i; for (i = 0; i < 50; i++) mg_poll_server(server, 1000); }
-  ASSERT(strcmp(buf1, "1") == 0);
+  { int i; for (i = 0; i < 50; i++) mg_poll_server(server, 1); }
+  ASSERT(strcmp(buf1, "1 ?") == 0);
   mg_destroy_server(&server);
   return NULL;
 }
@@ -586,6 +587,25 @@ static const char *test_mg_set_option(void) {
   return NULL;
 }
 
+static const char *test_rewrites(void) {
+  char buf1[100] = "xx";
+  struct mg_server *server = mg_create_server(NULL);
+
+  ASSERT(mg_set_option(server, "listening_port", "0") == NULL);
+  ASSERT(mg_set_option(server, "document_root", ".") == NULL);
+  ASSERT(mg_set_option(server, "url_rewrites", "/xx=./mongoose.h") == NULL);
+
+  ASSERT(mg_connect(server, "127.0.0.1",
+                    atoi(mg_get_option(server, "listening_port")),
+                    0, us1, buf1) == 1);
+
+  { int i; for (i = 0; i < 50; i++) mg_poll_server(server, 1); }
+  //printf("[%s]\n", buf1);
+  ASSERT(strcmp(buf1, "1 ?") == 0);
+  mg_destroy_server(&server);
+  return NULL;
+}
+
 static const char *run_all_tests(void) {
   RUN_TEST(test_should_keep_alive);
   RUN_TEST(test_match_prefix);
@@ -602,6 +622,7 @@ static const char *run_all_tests(void) {
   RUN_TEST(test_server);
   RUN_TEST(test_mg_connect);
   RUN_TEST(test_mg_set_option);
+  RUN_TEST(test_rewrites);
 #ifdef MONGOOSE_USE_SSL
   RUN_TEST(test_ssl);
 #endif
-- 
GitLab