X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=test%2Funit%2Ftest_utils.c;h=a66541e78a3928c138500b3204656383141af973;hb=3d787920d51a35e74e442c7265be3b13b69ad8e4;hp=587a0e1f8a361df8bcc549c1dc6b9c5216c4374d;hpb=76de8e3924fc36e5a3e906741bf640dceb846800;p=tinc diff --git a/test/unit/test_utils.c b/test/unit/test_utils.c index 587a0e1f..a66541e7 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,17 @@ 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; +} + 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), @@ -66,5 +118,10 @@ int main(void) { cmocka_unit_test(test_is_decimal_pass_signs), cmocka_unit_test(test_is_decimal_pass_whitespace_prefix), }; + +#ifdef HAVE_WINDOWS + cmocka_set_skip_filter("test_unix_*"); +#endif + return cmocka_run_group_tests(tests, NULL, NULL); }