You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ig...@apache.org on 2014/01/20 20:24:36 UTC

git commit: TS-1570: regression test for URLs that should fail

Updated Branches:
  refs/heads/test/TS-1570-parse_url-port-fail [created] 814141136


TS-1570: regression test for URLs that should fail

We add a helper function to test urls, and run two sets of arrays now:
One that should succeed, and one that should fail.

Unfortunately, due to issue TS-1570, a port with garbage at the end is
parsed "correctly".


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/81414113
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/81414113
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/81414113

Branch: refs/heads/test/TS-1570-parse_url-port-fail
Commit: 8141411361fbafffa6aa8329fe5f3adaa8d68549
Parents: 0fc0820
Author: Igor Galić <i....@brainsware.org>
Authored: Mon Jan 20 20:20:34 2014 +0100
Committer: Igor Galić <i....@brainsware.org>
Committed: Mon Jan 20 20:20:34 2014 +0100

----------------------------------------------------------------------
 proxy/InkAPITest.cc | 118 ++++++++++++++++++++++++++++-------------------
 1 file changed, 71 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/81414113/proxy/InkAPITest.cc
----------------------------------------------------------------------
diff --git a/proxy/InkAPITest.cc b/proxy/InkAPITest.cc
index 727cc26..417051d 100644
--- a/proxy/InkAPITest.cc
+++ b/proxy/InkAPITest.cc
@@ -5137,6 +5137,52 @@ REGRESSION_TEST(SDK_API_TSMimeHdrParse) (RegressionTest * test, int /* atype ATS
 // Unit Test for API: TSUrlParse
 //////////////////////////////////////////////
 
+static bool
+parse_url_helper(RegressionTest *test, const char* url) {
+
+  TSMBuffer bufp;
+  TSMLoc url_loc = (TSMLoc)NULL;
+  const char *start;
+  const char *end;
+  char *temp;
+
+  int retval;
+  int length;
+  bool status = false;
+
+  bufp = TSMBufferCreate();
+
+  if (TSUrlCreate(bufp, &url_loc) != TS_SUCCESS) {
+    SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Cannot create Url for parsing the url");
+    if (TSMBufferDestroy(bufp) == TS_ERROR) {
+      SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Error in Destroying MBuffer");
+    }
+  } else {
+    start = url;
+    end = url + strlen(url) + 1;
+    if ((retval = TSUrlParse(bufp, url_loc, &start, end)) == TS_PARSE_ERROR) {
+      SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "TSUrlParse returns TS_PARSE_ERROR");
+    } else {
+      if (retval == TS_PARSE_DONE) {
+        temp = TSUrlStringGet(bufp, url_loc, &length);
+        if (strncmp(url, temp, length) == 0) {
+          SDK_RPRINT(test, "TSUrlParse", url, TC_PASS, "ok");
+          status = true;
+        } else {
+          SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Value's Mismatch");
+        }
+        TSfree(temp);
+      } else {
+        SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Parsing Error");
+      }
+    }
+  }
+
+  TSHandleMLocRelease(bufp, TS_NULL_MLOC, url_loc);
+  TSMBufferDestroy(bufp);
+  return status;
+}
+
 REGRESSION_TEST(SDK_API_TSUrlParse) (RegressionTest * test, int /* atype ATS_UNUSED */, int *pstatus)
 {
   static char const * const urls[] = {
@@ -5155,67 +5201,45 @@ REGRESSION_TEST(SDK_API_TSUrlParse) (RegressionTest * test, int /* atype ATS_UNU
       "foo://bar.com/baz/",
       "http://a.b.com/xx.jpg?newpath=http://b.c.com" // https://issues.apache.org/jira/browse/TS-1635
   };
+  static char const * const fail_urls[] = {
+      "http://www.example.com:8083xyz",
+      "https:://www.example.com/",
+  };
 
-  static int const num_urls = sizeof(urls) / sizeof(urls[0]);
-  bool test_passed[num_urls] = {false};
-
+  static int const num_urls      = sizeof(urls) / sizeof(urls[0]);
+  static int const num_fail_urls = sizeof(fail_urls) / sizeof(fail_urls[0]);
 
-  const char *start;
-  const char *end;
-  char *temp;
-
-  int retval;
-
-  TSMBuffer bufp;
-  TSMLoc url_loc = (TSMLoc)NULL;
-  int length;
+  bool test_passed[num_urls]      = {false};
+  bool test_failed[num_fail_urls] = {false};
 
   *pstatus = REGRESSION_TEST_INPROGRESS;
 
 
-  int idx;
-  for (idx = 0; idx < num_urls; idx++) {
-    char const *url = urls[idx];
+  int idx_pass;
+  int idx_fail;
+  for (idx_pass = 0; idx_pass < num_urls; idx_pass++) {
+    char const *url = urls[idx_pass];
+    test_passed[idx_pass] = parse_url_helper(test, url);
+  }
+  for (idx_fail = 0; idx_fail < num_fail_urls; idx_fail++) {
+    char const *url = fail_urls[idx_fail];
+    test_failed[idx_fail] = parse_url_helper(test, url);
+  }
 
-    bufp = TSMBufferCreate();
-    if (TSUrlCreate(bufp, &url_loc) != TS_SUCCESS) {
-      SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Cannot create Url for parsing the url");
-      if (TSMBufferDestroy(bufp) == TS_ERROR) {
-        SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Error in Destroying MBuffer");
-      }
-    } else {
-      start = url;
-      end = url + strlen(url) + 1;
-      if ((retval = TSUrlParse(bufp, url_loc, &start, end)) == TS_PARSE_ERROR) {
-        SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "TSUrlParse returns TS_PARSE_ERROR");
-      } else {
-        if (retval == TS_PARSE_DONE) {
-          temp = TSUrlStringGet(bufp, url_loc, &length);
-          if (strncmp(url, temp, length) == 0) {
-            SDK_RPRINT(test, "TSUrlParse", url, TC_PASS, "ok");
-            test_passed[idx] = true;
-          } else {
-            SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Value's Mismatch");
-          }
-          TSfree(temp);
-        } else {
-          SDK_RPRINT(test, "TSUrlParse", url, TC_FAIL, "Parsing Error");
-        }
-      }
+  for (idx_pass = 0; idx_pass < num_urls; idx_pass++) {
+    if (test_passed[idx_pass] != true) {
+      *pstatus = REGRESSION_TEST_FAILED;
+      break;
     }
-
-    TSHandleMLocRelease(bufp, TS_NULL_MLOC, url_loc);
-    TSMBufferDestroy(bufp);
   }
-
-  for (idx = 0; idx < num_urls; idx++) {
-    if (test_passed[idx] != true) {
+  for (idx_fail = 0; idx_fail < num_fail_urls; idx_fail++) {
+    if (test_failed[idx_fail] != false) {
       *pstatus = REGRESSION_TEST_FAILED;
       break;
     }
   }
 
-  if (idx >= num_urls) {
+  if (idx_pass >= num_urls && idx_fail >= num_fail_urls) {
     *pstatus = REGRESSION_TEST_PASSED;
   }