Browse Source

Tests for uri_find_param

Luke Dashjr 11 years ago
parent
commit
47c0ca1660
1 changed files with 28 additions and 0 deletions
  1. 28 0
      util.c

+ 28 - 0
util.c

@@ -2179,6 +2179,27 @@ bool uri_get_param_bool(const char * const uri, const char * const param, const
 	return foundval;
 }
 
+static
+void _test_uri_find_param(const char * const uri, const char * const param, const ssize_t expect_offset, const int expect_invert)
+{
+	bool invert;
+	const char *actual = uri_find_param(uri, param, (expect_invert >= 0) ? &invert : NULL);
+	ssize_t actual_offset;
+	if (actual == URI_FIND_PARAM_FOUND)
+		actual_offset = -1;
+	else
+	if (!actual)
+		actual_offset = -2;
+	else
+		actual_offset = actual - uri;
+	int actual_invert = (expect_invert >= 0) ? (invert ? 1 : 0) : -1;
+	if (actual_offset != expect_offset || expect_invert != actual_invert)
+		applog(LOG_WARNING, "%s(\"%s\", \"%s\", %s) test failed (offset: expect=%d actual=%d; invert: expect=%d actual=%d)",
+		       "uri_find_param", uri, param, (expect_invert >= 0) ? "(invert)" : "NULL",
+		       expect_offset, actual_offset,
+		       expect_invert, actual_invert);
+}
+
 static
 void _test_uri_get_param(const char * const uri, const char * const param, const bool defval, const bool expect)
 {
@@ -2190,6 +2211,13 @@ void _test_uri_get_param(const char * const uri, const char * const param, const
 
 void test_uri_get_param()
 {
+	_test_uri_find_param("stratum+tcp://footest/#redirect", "redirect", -1, -1);
+	_test_uri_find_param("stratum+tcp://footest/#redirectme", "redirect", -2, -1);
+	_test_uri_find_param("stratum+tcp://footest/#noredirect", "redirect", -2, -1);
+	_test_uri_find_param("stratum+tcp://footest/#noredirect", "redirect", -1, 1);
+	_test_uri_find_param("stratum+tcp://footest/#redirect", "redirect", -1, 0);
+	_test_uri_find_param("stratum+tcp://footest/#redirect=", "redirect", 32, -1);
+	_test_uri_find_param("stratum+tcp://footest/#noredirect=", "redirect", 34, 1);
 	_test_uri_get_param("stratum+tcp://footest/#redirect", "redirect", false, true);
 	_test_uri_get_param("stratum+tcp://footest/#redirectme", "redirect", false, false);
 	_test_uri_get_param("stratum+tcp://footest/#noredirect", "redirect", false, false);