summaryrefslogtreecommitdiff
path: root/tests/test_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_utils.c')
-rw-r--r--tests/test_utils.c136
1 files changed, 103 insertions, 33 deletions
diff --git a/tests/test_utils.c b/tests/test_utils.c
index b7a368a7d..fd9d3bc4a 100644
--- a/tests/test_utils.c
+++ b/tests/test_utils.c
@@ -45,9 +45,47 @@ AST_TEST_DEFINE(uri_encode_decode_test)
{
int res = AST_TEST_PASS;
const char *in = "abcdefghijklmnopurstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 ~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/";
- const char *expected1 = "abcdefghijklmnopurstuvwxyz%20ABCDEFGHIJKLMNOPQRSTUVWXYZ%201234567890%20~%60!%40%23%24%25%5E%26*()_-%2B%3D%7B%5B%7D%5D%7C%5C%3A%3B%22'%3C%2C%3E.%3F%2F";
- const char *expected2 = "abcdefghijklmnopurstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 ~`!@#$%25^&*()_-+={[}]|\\:;\"'<,>.?/";
char out[256] = { 0 };
+ char small[4] = { 0 };
+ const struct ast_flags none = {0};
+ int i = 0;
+
+ static struct {
+ const char *spec_str;
+ struct ast_flags spec;
+
+ char *buf;
+ size_t buflen;
+
+ const char *input;
+ const char *output;
+ const char *decoded_output;
+ } tests[5];
+
+#define INIT_ENCODE_TEST(s, buffer, in, out, dec_out) do { \
+ if (i < ARRAY_LEN(tests)) { \
+ tests[i].spec_str = #s; \
+ tests[i].spec = s; \
+ tests[i].buf = buffer; \
+ tests[i].buflen = sizeof(buffer); \
+ tests[i].input = in; \
+ tests[i].output = out; \
+ tests[i].decoded_output = dec_out; \
+ i++; \
+ } else { \
+ ast_test_status_update(test, "error: 'tests' array too small\n"); \
+ res = AST_TEST_FAIL; \
+ } \
+ } while (0)
+
+ INIT_ENCODE_TEST(ast_uri_http, out, in,
+ "abcdefghijklmnopurstuvwxyz%20ABCDEFGHIJKLMNOPQRSTUVWXYZ%201234567890%20~%60!%40%23%24%25%5E%26*()_-%2B%3D%7B%5B%7D%5D%7C%5C%3A%3B%22'%3C%2C%3E.%3F%2F", in);
+ INIT_ENCODE_TEST(ast_uri_http_legacy, out, in,
+ "abcdefghijklmnopurstuvwxyz+ABCDEFGHIJKLMNOPQRSTUVWXYZ+1234567890+~%60!%40%23%24%25%5E%26*()_-%2B%3D%7B%5B%7D%5D%7C%5C%3A%3B%22'%3C%2C%3E.%3F%2F", in);
+ INIT_ENCODE_TEST(ast_uri_sip_user, out, in,
+ "abcdefghijklmnopurstuvwxyz%20ABCDEFGHIJKLMNOPQRSTUVWXYZ%201234567890%20~%60!%40%23$%25%5E&*()_-+=%7B%5B%7D%5D%7C%5C%3A;%22'%3C,%3E.?/", in);
+ INIT_ENCODE_TEST(none, small, in, "%61", "a");
+ INIT_ENCODE_TEST(ast_uri_http, small, in, "abc", "abc");
switch (cmd) {
case TEST_INIT:
@@ -60,43 +98,73 @@ AST_TEST_DEFINE(uri_encode_decode_test)
break;
}
- ast_test_status_update(test, "Input before executing ast_uri_encode:\n%s\n", in);
- ast_test_status_update(test, "Output expected for ast_uri_encode with enabling do_special_char: %s\n", expected1);
- ast_test_status_update(test, "Output expected for ast_uri_encode with out enabling do_special_char: %s\n\n", expected2);
+ for (i = 0; i < ARRAY_LEN(tests); i++) {
+ ast_uri_encode(tests[i].input, tests[i].buf, tests[i].buflen, tests[i].spec);
+ if (strcmp(tests[i].output, tests[i].buf)) {
+ ast_test_status_update(test, "encoding with %s did not match expected output, FAIL\n", tests[i].spec_str);
+ ast_test_status_update(test, "original: %s\n", tests[i].input);
+ ast_test_status_update(test, "expected: %s\n", tests[i].output);
+ ast_test_status_update(test, "result: %s\n", tests[i].buf);
+ res = AST_TEST_FAIL;
+ continue;
+ }
- /* Test with do_special_char enabled */
- ast_uri_encode(in, out, sizeof(out), 1);
- ast_test_status_update(test, "Output after enabling do_special_char:\n%s\n", out);
- if (strcmp(expected1, out)) {
- ast_test_status_update(test, "ENCODE DOES NOT MATCH EXPECTED, FAIL\n");
- res = AST_TEST_FAIL;
+ ast_uri_decode(tests[i].buf, tests[i].spec);
+ if (strcmp(tests[i].decoded_output, tests[i].buf)) {
+ ast_test_status_update(test, "decoding with %s did not match the original input (or expected decoded output)\n", tests[i].spec_str);
+ ast_test_status_update(test, "original: %s\n", tests[i].input);
+ ast_test_status_update(test, "expected: %s\n", tests[i].decoded_output);
+ ast_test_status_update(test, "decoded: %s\n", tests[i].buf);
+ res = AST_TEST_FAIL;
+ }
}
- /* Verify uri decode matches original */
- ast_uri_decode(out);
- if (strcmp(in, out)) {
- ast_test_status_update(test, "Decoded string did not match original input\n");
- res = AST_TEST_FAIL;
- } else {
- ast_test_status_update(test, "Decoded string matched original input\n");
- }
+ return res;
+}
- /* Test with do_special_char disabled */
- out[0] = '\0';
- ast_uri_encode(in, out, sizeof(out), 0);
- ast_test_status_update(test, "Output after disabling do_special_char: %s\n", out);
- if (strcmp(expected2, out)) {
- ast_test_status_update(test, "ENCODE DOES NOT MATCH EXPECTED, FAIL\n");
- res = AST_TEST_FAIL;
+AST_TEST_DEFINE(quoted_escape_test)
+{
+ int res = AST_TEST_PASS;
+ const char *in = "a\"bcdefg\"hijkl\\mnopqrs tuv\twxyz";
+ char out[256] = { 0 };
+ char small[4] = { 0 };
+ int i;
+
+ static struct {
+ char *buf;
+ const size_t buflen;
+
+ const char *output;
+ } tests[] = {
+ {0, sizeof(out),
+ "a\\\"bcdefg\\\"hijkl\\\\mnopqrs tuv\twxyz"},
+ {0, sizeof(small),
+ "a\\\""},
+ };
+
+ tests[0].buf = out;
+ tests[1].buf = small;
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = "quoted_escape_test";
+ info->category = "/main/utils/";
+ info->summary = "escape a quoted string";
+ info->description = "Escape a string to be quoted and check the result.";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
}
- /* Verify uri decode matches original */
- ast_uri_decode(out);
- if (strcmp(in, out)) {
- ast_test_status_update(test, "Decoded string did not match original input\n");
- res = AST_TEST_FAIL;
- } else {
- ast_test_status_update(test, "Decoded string matched original input\n");
+ for (i = 0; i < ARRAY_LEN(tests); i++) {
+ ast_escape_quoted(in, tests[i].buf, tests[i].buflen);
+ if (strcmp(tests[i].output, tests[i].buf)) {
+ ast_test_status_update(test, "ESCAPED DOES NOT MATCH EXPECTED, FAIL\n");
+ ast_test_status_update(test, "original: %s\n", in);
+ ast_test_status_update(test, "expected: %s\n", tests[i].output);
+ ast_test_status_update(test, "result: %s\n", tests[i].buf);
+ res = AST_TEST_FAIL;
+ }
}
return res;
@@ -348,6 +416,7 @@ AST_TEST_DEFINE(agi_loaded_test)
static int unload_module(void)
{
AST_TEST_UNREGISTER(uri_encode_decode_test);
+ AST_TEST_UNREGISTER(quoted_escape_test);
AST_TEST_UNREGISTER(md5_test);
AST_TEST_UNREGISTER(sha1_test);
AST_TEST_UNREGISTER(base64_test);
@@ -360,6 +429,7 @@ static int unload_module(void)
static int load_module(void)
{
AST_TEST_REGISTER(uri_encode_decode_test);
+ AST_TEST_REGISTER(quoted_escape_test);
AST_TEST_REGISTER(md5_test);
AST_TEST_REGISTER(sha1_test);
AST_TEST_REGISTER(base64_test);