| From 83d165442d1c3658b6bafa28ddade8ffee7092ad Mon Sep 17 00:00:00 2001 |
| From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> |
| Date: Wed, 6 Mar 2019 16:46:49 -0500 |
| Subject: [PATCH lttng-tools 2/2] Fix: test: unit: the tree origin can be a |
| symlink itself |
| |
| Problem: |
| |
| The base tree is defined as "/tmp/.....XXXXXX". |
| On systems where "/tmp/" is itself a symlink utils_expand_path will |
| expand the tree origin itself. |
| |
| For example on a base core-image-minimal Yocto build /tmp is a symlink |
| to "/var/tmp", which is a symlink to "/var/volatile". |
| |
| utils_expand_path will return something like this for the symlink test: |
| "/var/volative/.....XXXXXX/...." which is the valid result. |
| |
| Solution: |
| |
| Simply use realpath on the tree_origin and use this path to perform the |
| test validation. |
| |
| This work was performed in the effort to support yocto fully and be able |
| to run the test suite to detect problem as early as possible. |
| |
| |
| Upstream-Status: Accepted [f66e964a2e0c75f5e1a55fbcc963b1c5e2b4519d] |
| Backported to 2.11 and 2.10 |
| |
| Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> |
| --- |
| tests/unit/test_utils_expand_path.c | 18 ++++++++++++++---- |
| 1 file changed, 14 insertions(+), 4 deletions(-) |
| |
| diff --git a/tests/unit/test_utils_expand_path.c b/tests/unit/test_utils_expand_path.c |
| index d5cab002e..d047c207d 100644 |
| --- a/tests/unit/test_utils_expand_path.c |
| +++ b/tests/unit/test_utils_expand_path.c |
| @@ -281,8 +281,8 @@ error: |
| static void test_utils_expand_path(void) |
| { |
| char *result; |
| - char name[100], tmppath[PATH_MAX]; |
| - int i; |
| + char name[100], tmppath[PATH_MAX], real_tree_origin[PATH_MAX]; |
| + int i, treelen; |
| |
| /* Test valid cases */ |
| for (i = 0; i < num_valid_tests; i++) { |
| @@ -295,14 +295,24 @@ static void test_utils_expand_path(void) |
| free(result); |
| } |
| |
| + /* |
| + * Get the realpath for the tree_origin since it can itself be a |
| + * symlink. |
| + */ |
| + result = realpath(tree_origin, real_tree_origin); |
| + if (!result) { |
| + fail("realpath failed."); |
| + return; |
| + } |
| + |
| /* Test symlink tree cases */ |
| - int treelen = strlen(tree_origin) + 1; |
| + treelen = strlen(real_tree_origin) + 1; |
| for (i = 0; i < num_symlink_tests; i++) { |
| sprintf(name, "symlink tree test case: [tmppath/]%s", |
| symlink_tests_inputs[i].input); |
| |
| snprintf(tmppath, PATH_MAX, "%s/%s", |
| - tree_origin, symlink_tests_inputs[i].input); |
| + real_tree_origin, symlink_tests_inputs[i].input); |
| result = utils_expand_path(tmppath); |
| ok(result != NULL && strcmp(result + treelen, |
| symlink_tests_inputs[i].expected_result) == 0, name); |
| -- |
| 2.17.1 |
| |