X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=test%2Funit%2Ftest_utils.c;h=51fc83ae0773fb52bd1a89a8d6cbb285171efc53;hb=c45a3fd7319d03bd147448a017f5aaed3b46fdfe;hp=587a0e1f8a361df8bcc549c1dc6b9c5216c4374d;hpb=0289162552cd85375605044c696e2a3294e7aa9a;p=tinc diff --git a/test/unit/test_utils.c b/test/unit/test_utils.c index 587a0e1f..51fc83ae 100644 --- a/test/unit/test_utils.c +++ b/test/unit/test_utils.c @@ -1,6 +1,49 @@ #include "unittest.h" #include "../../src/utils.h" +#define FAKE_PATH "nonexistentreallyfakepath" + +typedef struct { + const char *arg; + const char *want; +} testcase_t; + +static void test_unix_absolute_path_on_absolute_returns_it(void **state) { + (void)state; + + const char *paths[] = {"/", "/foo", "/foo/./../bar"}; + + for(size_t i = 0; i < sizeof(paths) / sizeof(*paths); ++i) { + char *got = absolute_path(paths[i]); + assert_ptr_not_equal(paths[i], got); + assert_string_equal(paths[i], got); + free(got); + } +} + +static void test_unix_absolute_path_on_empty_returns_null(void **state) { + (void)state; + assert_null(absolute_path(NULL)); + assert_null(absolute_path("\0")); +} + +static void test_unix_absolute_path_relative(void **state) { + (void)state; + + testcase_t cases[] = { + {".", "/"}, + {"foo", "/foo"}, + {"./"FAKE_PATH, "/./"FAKE_PATH}, + {"../foo/./../"FAKE_PATH, "/../foo/./../"FAKE_PATH}, + }; + + for(size_t i = 0; i < sizeof(cases) / sizeof(*cases); ++i) { + char *got = absolute_path(cases[i].arg); + assert_string_equal(cases[i].want, got); + free(got); + } +} + static void test_int_to_str(const char *ref, int num) { char *result = int_to_str(num); assert_string_equal(ref, result); @@ -56,8 +99,30 @@ static void test_is_decimal_pass_whitespace_prefix(void **state) { assert_true(is_decimal(" \r\n\t 777")); } +static int setup_path_unix(void **state) { + (void)state; + assert_int_equal(0, chdir("/")); + return 0; +} + +static void test_string_eq(void **state) { + (void)state; + + assert_true(string_eq(NULL, NULL)); + assert_true(string_eq("", "")); + assert_true(string_eq("\tfoo 123", "\tfoo 123")); + + assert_false(string_eq(NULL, "")); + assert_false(string_eq("", NULL)); + assert_false(string_eq("foo", "FOO")); + assert_false(string_eq("foo", " foo")); +} + int main(void) { const struct CMUnitTest tests[] = { + cmocka_unit_test_setup(test_unix_absolute_path_on_absolute_returns_it, setup_path_unix), + cmocka_unit_test_setup(test_unix_absolute_path_on_empty_returns_null, setup_path_unix), + cmocka_unit_test_setup(test_unix_absolute_path_relative, setup_path_unix), cmocka_unit_test(test_int_to_str_return_expected), cmocka_unit_test(test_is_decimal_fail_empty), cmocka_unit_test(test_is_decimal_fail_hex), @@ -65,6 +130,12 @@ int main(void) { cmocka_unit_test(test_is_decimal_pass_simple), cmocka_unit_test(test_is_decimal_pass_signs), cmocka_unit_test(test_is_decimal_pass_whitespace_prefix), + cmocka_unit_test(test_string_eq), }; + +#ifdef HAVE_WINDOWS + cmocka_set_skip_filter("test_unix_*"); +#endif + return cmocka_run_group_tests(tests, NULL, NULL); }