#!/bin/bash
#
-# Copyright (C) - 2018 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
+# Copyright (C) 2018 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
#
-# This library is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation; version 2.1 of the License.
-#
-# This library 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 Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# SPDX-License-Identifier: LGPL-2.1-only
TEST_DESC="Change working directory of process"
DIR=$(readlink -f "$TESTDIR")
-NUM_TESTS=27
+NUM_TESTS=35
source $TESTDIR/utils/utils.sh
-
#MUST set TESTDIR before calling those functions
plan_tests $NUM_TESTS
local pid
local cwd
- working_dir=$(mktemp -d)
+ working_dir=$(realpath "$(mktemp -d)")
diag "Test lttng-relayd normal mode change working directory"
local cwd
local pid
- working_dir=$(mktemp -d)
+ working_dir=$(realpath "$(mktemp -d)")
diag "Test lttng-relayd daemon mode change working directory"
local cwd
local pid
- working_dir=$(mktemp -d)
+ working_dir=$(realpath "$(mktemp -d)")
diag "Test lttng-relayd background mode change working directory"
function test_relayd_debug_permission()
{
- local output_pattern='Working directory \".*\" is not writable'
- local working_dir
- local cwd
- local pid
-
- working_dir=$(mktemp -d)
+ local is_user
diag "Test lttng-relayd change working directory on non writable directory"
- # Removing write access to working dir
- okx chmod -w "$working_dir"
+ if [ "$(id -u)" == "0" ]; then
+ is_user=0
+ else
+ is_user=1
+ fi
- # Redirect the error output to a temporary file
- ERROR_OUTPUT_DEST=$(mktemp)
- start_lttng_relayd_opt 1 "-b" "-v --working-dir $working_dir"
+ skip $is_user "Skipping permission debug output test; operation can't fail as root" 6 ||
+ {
+ local output_pattern='Working directory \".*\" is not writable'
+ local working_dir
+ local cwd
+ local pid
- pid=$(pgrep "$RELAYD_MATCH")
- ok $? "Found lttng-relayd"
+ working_dir=$(realpath "$(mktemp -d)")
- cwd=$(readlink "/proc/${pid}/cwd")
- is "$cwd" "$working_dir" "Working directory changed"
+ # Removing write access to working dir
+ okx chmod -w "$working_dir"
- grep -q "$output_pattern" "$ERROR_OUTPUT_DEST"
- ok $? "Warning about missing write permission is present"
+ # Redirect the error output to a temporary file
- stop_lttng_relayd
- rm "$ERROR_OUTPUT_DEST"
- rm -rf "$working_dir" "$ERROR_OUTPUT_DEST"
- ERROR_OUTPUT_DEST=/dev/null
+ ERROR_OUTPUT_DEST=$(mktemp)
+ start_lttng_relayd_opt 1 "-b" "-v --working-dir $working_dir"
+
+ pid=$(pgrep "$RELAYD_MATCH")
+ ok $? "Found lttng-relayd"
+
+ cwd=$(readlink "/proc/${pid}/cwd")
+ is "$cwd" "$working_dir" "Working directory changed"
+
+ grep -q "$output_pattern" "$ERROR_OUTPUT_DEST"
+ ok $? "Warning about missing write permission is present"
+
+ stop_lttng_relayd
+ rm "$ERROR_OUTPUT_DEST"
+ rm -rf "$working_dir" "$ERROR_OUTPUT_DEST"
+ ERROR_OUTPUT_DEST=/dev/null
+ }
}
function test_relayd_failure()
local output_dest
local pid
- working_dir="$(mktemp -d)"
+ working_dir=$(realpath "$(mktemp -d)")
working_dir_imaginary="${working_dir}/imaginary_directory"
output_dest=$(mktemp)
rm -rf "$working_dir"
}
+function test_relayd_env()
+{
+ local working_dir
+ local cwd
+ local pid
+
+ working_dir=$(mktemp -d)
+ working_dir=$(realpath "$(mktemp -d)")
+
+ diag "Test lttng-relayd change working directory from env. variable"
+
+ export LTTNG_RELAYD_WORKING_DIRECTORY=${working_dir}
+ start_lttng_relayd_opt 1 "-b" ""
+
+ pid=$(pgrep "$RELAYD_MATCH")
+ ok $? "Found lttng-relayd"
+
+ cwd=$(readlink "/proc/$pid/cwd")
+
+ is "$cwd" "$working_dir" "Working directory changed"
+
+ stop_lttng_relayd
+ rm -rf "$working_dir"
+ unset LTTNG_RELAYD_WORKING_DIRECTORY
+}
+
+function test_relayd_cmdline_overwrite_env()
+{
+ local working_dir_env
+ local working_dir_cmdline
+ local cwd
+ local pid
+
+ working_dir_env=$(realpath "$(mktemp -d)")
+ working_dir_cmdline=$(realpath "$(mktemp -d)")
+
+ diag "Test lttng-relayd change working directory command line overwrite env variable"
+
+ export LTTNG_RELAYD_WORKING_DIRECTORY=${working_dir_env}
+ start_lttng_relayd_opt 1 "-b" "--working-dir ${working_dir_cmdline}"
+
+ pid=$(pgrep "$RELAYD_MATCH")
+ ok $? "Found lttng-relayd"
+
+ cwd=$(readlink "/proc/$pid/cwd")
+
+ is "$cwd" "$working_dir_cmdline" "Working directory is the one from command line"
+
+ stop_lttng_relayd
+ rm -rf "$working_dir_env" "$working_dir_cmdline"
+ unset LTTNG_RELAYD_WORKING_DIRECTORY
+}
+
TESTS=(
test_relayd
test_relayd_daemon
test_relayd_background_no_working_dir
test_relayd_debug_permission
test_relayd_failure
+ test_relayd_env
+ test_relayd_cmdline_overwrite_env
)
for fct_test in "${TESTS[@]}";