diff mbox series

[lttng-tools,2/2] Fix: test: unit: the treeorigin can be a symlink itself

Message ID 20190312183031.20265-2-jonathan.rajotte-julien@efficios.com
State Accepted, archived
Delegated to: Jérémie Galarneau
Headers show
Series [lttng-tools,1/2] Fix: test: skiptest_getcpu_override on single thread system | expand

Commit Message

Jonathan Rajotte March 12, 2019, 6:30 p.m. UTC
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.

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
---
 tests/unit/test_utils_expand_path.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
diff mbox series

Patch

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);