From: Raphaël Beamonte Date: Wed, 13 Nov 2013 05:34:38 +0000 (-0500) Subject: Tests: Add test_utils_expand_path to unit tests X-Git-Tag: v2.4.0-rc1~45 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=cc7f9e363bf9230260b2ef27c84e24f75a7535c0;p=lttng-tools.git Tests: Add test_utils_expand_path to unit tests Signed-off-by: Raphaël Beamonte --- diff --git a/.gitignore b/.gitignore index 2d779e4b4..7041d3768 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ tests/unit/test_uri tests/unit/test_ust_data tests/unit/test_utils_parse_size_suffix tests/unit/test_utils_resolve_relative +tests/unit/test_utils_expand_path kernel_all_events_basic kernel_event_basic ust_global_event_wildcard diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am index 82f65080d..fa9c6a86c 100644 --- a/tests/unit/Makefile.am +++ b/tests/unit/Makefile.am @@ -17,7 +17,7 @@ LIBRELAYD=$(top_builddir)/src/common/relayd/librelayd.la # Define test programs noinst_PROGRAMS = test_uri test_session test_kernel_data -noinst_PROGRAMS += test_utils_parse_size_suffix test_utils_resolve_relative +noinst_PROGRAMS += test_utils_parse_size_suffix test_utils_resolve_relative test_utils_expand_path if HAVE_LIBLTTNG_UST_CTL noinst_PROGRAMS += test_ust_data @@ -96,3 +96,8 @@ test_utils_parse_size_suffix_LDADD += $(UTILS_SUFFIX) test_utils_resolve_relative_SOURCES = test_utils_resolve_relative.c test_utils_resolve_relative_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(LIBCOMMON) test_utils_resolve_relative_LDADD += $(UTILS_SUFFIX) + +# expand_path unit test +test_utils_expand_path_SOURCES = test_utils_expand_path.c +test_utils_expand_path_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(LIBCOMMON) +test_utils_expand_path_LDADD += $(UTILS_SUFFIX) diff --git a/tests/unit/test_utils_expand_path.c b/tests/unit/test_utils_expand_path.c new file mode 100644 index 000000000..27bfe8fd2 --- /dev/null +++ b/tests/unit/test_utils_expand_path.c @@ -0,0 +1,170 @@ +/* + * Copyright (C) - 2013 Raphaël Beamonte + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by as + * published by the Free Software Foundation; only version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include + +#include + +#include + +/* For lttngerr.h */ +int lttng_opt_quiet = 1; +int lttng_opt_verbose = 3; + +struct valid_test_input { + char *input; + char *relative_part; + char *absolute_part; +}; + +/* Valid test cases */ +static struct valid_test_input valid_tests_inputs[] = { + { "/a/b/c/d/e", "", "/a/b/c/d/e" }, + { "./a/b/c/d/e", ".", "/a/b/c/d/e" }, + { "../a/b/c/d/../e", "..", "/a/b/c/e" }, + { ".././a/b/c/d/./e", "..", "/a/b/c/d/e" }, + { "../../a/b/c/d/e", "../..", "/a/b/c/d/e" }, + { "./a/b/../c/d/../e", ".", "/a/c/e" }, + { "../a/b/../../c/./d/./e", "..", "/c/d/e" }, + { "../../a/b/../c/d/../../e", "../..", "/a/e" }, + { "./a/b/c/d/../../../../e", ".", "/e" }, + { ".././a/b/c/d/./e", "..", "/a/b/c/d/e" }, + { "a/", ".", "/a/" }, + { "a", ".", "/a" }, + { "../../", "../..", "/" }, + { "../..", "../..", "" }, + { "../", "..", "/" }, + { "..", "..", "" }, + { "./", ".", "/" }, + { ".", ".", "" }, +}; +char **valid_tests_expected_results; +static const int num_valid_tests = + sizeof(valid_tests_inputs) / sizeof(valid_tests_inputs[0]); + +/* Invalid test cases */ +static char *invalid_tests_inputs[] = { + NULL, + "/../a/b/c/d/e", + "/a/b/c/d/../../../../../e", +}; +static const int num_invalid_tests = + sizeof(invalid_tests_inputs) / sizeof(invalid_tests_inputs[0]); + +int prepare_valid_results() +{ + int i; + char *relative, *cur_path, *prev_path, *pprev_path, *empty; + + /* Prepare the relative paths */ + cur_path = realpath(".", NULL); + prev_path = realpath("..", NULL); + pprev_path = realpath("../..", NULL); + empty = strdup(""); + + /* allocate memory for the expected results */ + valid_tests_expected_results = malloc(sizeof(char *) * num_valid_tests); + for (i = 0; i < num_valid_tests; i++) { + valid_tests_expected_results[i] = malloc(PATH_MAX); + if (valid_tests_expected_results[i] == NULL) { + fprintf(stderr, "malloc expected results"); + return 1; + } + + if (strcmp(valid_tests_inputs[i].relative_part, ".") == 0) { + relative = cur_path; + } else if (strcmp(valid_tests_inputs[i].relative_part, "..") == 0) { + relative = prev_path; + } else if (strcmp(valid_tests_inputs[i].relative_part, "../..") == 0) { + relative = pprev_path; + } else { + relative = empty; + } + + snprintf(valid_tests_expected_results[i], PATH_MAX, + "%s%s", relative, valid_tests_inputs[i].absolute_part); + } + + free(cur_path); + free(prev_path); + free(pprev_path); + free(empty); + + return 0; +} + +int free_valid_results() +{ + int i; + + for (i = 0; i < num_valid_tests; i++) { + free(valid_tests_expected_results[i]); + } + + free(valid_tests_expected_results); + + return 0; +} + +static void test_utils_expand_path(void) +{ + char *result; + int i; + + /* Test valid cases */ + for (i = 0; i < num_valid_tests; i++) { + char name[100]; + sprintf(name, "valid test case: %s", valid_tests_inputs[i].input); + + result = utils_expand_path(valid_tests_inputs[i].input); + ok(strcmp(result, valid_tests_expected_results[i]) == 0, name); + + free(result); + } + + /* Test invalid cases */ + for (i = 0; i < num_invalid_tests; i++) { + char name[100]; + sprintf(name, "invalid test case: %s", invalid_tests_inputs[i]); + + result = utils_expand_path(invalid_tests_inputs[i]); + if (result != NULL) { + free(result); + } + ok(result == NULL, name); + } +} + +int main(int argc, char **argv) +{ + if (prepare_valid_results() != 0) { + return 1; + } + + plan_tests(num_valid_tests + num_invalid_tests); + + diag("utils_expand_path tests"); + + test_utils_expand_path(); + + free_valid_results(); + return exit_status(); +} diff --git a/tests/unit_tests b/tests/unit_tests index 5d0f291f0..35b31a460 100644 --- a/tests/unit_tests +++ b/tests/unit_tests @@ -4,3 +4,4 @@ unit/test_uri unit/test_ust_data unit/test_utils_parse_size_suffix unit/test_utils_resolve_relative +unit/test_utils_expand_path