From f62a387121da010bde3f50b1276cb7c1139321d1 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Mon, 1 Apr 2019 11:53:20 -0400 Subject: [PATCH] Tests: add kernel namespace contexts tests MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Jeanson Signed-off-by: Jérémie Galarneau --- tests/regression/kernel/Makefile.am | 3 +- tests/regression/kernel/test_ns_contexts | 146 +++++++++++++++++++++++ tests/root_regression | 1 + 3 files changed, 149 insertions(+), 1 deletion(-) create mode 100755 tests/regression/kernel/test_ns_contexts diff --git a/tests/regression/kernel/Makefile.am b/tests/regression/kernel/Makefile.am index 3ab6d75bd..169267adb 100644 --- a/tests/regression/kernel/Makefile.am +++ b/tests/regression/kernel/Makefile.am @@ -2,7 +2,8 @@ EXTRA_DIST = test_event_basic test_all_events test_syscall \ test_clock_override test_rotation_destroy_flush \ test_select_poll_epoll test_lttng_logger \ test_userspace_probe test_callstack \ - test_syscall validate_select_poll_epoll.py + test_syscall validate_select_poll_epoll.py \ + test_ns_contexts noinst_PROGRAMS = select_poll_epoll select_poll_epoll_SOURCES = select_poll_epoll.c diff --git a/tests/regression/kernel/test_ns_contexts b/tests/regression/kernel/test_ns_contexts new file mode 100755 index 000000000..843019a8e --- /dev/null +++ b/tests/regression/kernel/test_ns_contexts @@ -0,0 +1,146 @@ +#!/bin/bash +# +# Copyright (C) 2019 Michael Jeanson +# +# 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 + +TEST_DESC="Kernel tracer - Namespace contexts" + +CURDIR=$(dirname "$0")/ +TESTDIR=$CURDIR/../.. + +TESTS_PER_NS=11 + +NUM_TESTS=$((TESTS_PER_NS * 7)) + +source "$TESTDIR/utils/utils.sh" + +# MUST set TESTDIR before calling those functions +function add_context_kernel_skip_ok() +{ + local session_name=$1 + local channel_name=$2 + local context_name=$3 + local skip_num=$4 + + local ret + + "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" add-context -k \ + -s "$session_name" -c "$channel_name" \ + -t "$context_name" 1>"$OUTPUT_DEST" 2>"$ERROR_OUTPUT_DEST" + ret=$? + + if [ "$ret" == "4" ]; then + skip 0 "Current kernel doesn't implement '$context_name' context" $((skip_num + 1)) + else + ok $ret "Add context command for type: $context_name" + fi + + return $ret +} + +function enable_kernel_lttng_event_filter_ok() +{ + local session_name=$1 + local syscall_name=$2 + local channel_name=$3 + local filter=$4 + + "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-event -k \ + -c "$channel_name" -s "$session_name" \ + --syscall "$syscall_name" \ + -f "$filter" \ + 1>"$OUTPUT_DEST" 2>"$ERROR_OUTPUT_DEST" + + ok $? "Add syscall with filter" +} + +function test_ns() +{ + local ns=$1 + + local session_name="${ns}_ns" + local chan_name="${ns}_ns" + local context_name="${ns}_ns" + + local trace_path + local ns_inode + + # Check if the kernel has support for this ns type + if [ ! -f "/proc/$$/ns/$ns" ]; then + skip 0 "System has no $ns namespace support" $TESTS_PER_NS + return + fi + + # Get the current ns inode number + ns_inode=$(stat -c '%i' -L "/proc/$$/ns/$ns") + ok $? "Get current $ns namespace inode: $ns_inode" + + trace_path=$(mktemp -d) + + start_lttng_sessiond + + create_lttng_session_ok "$session_name" "$trace_path" + enable_kernel_lttng_channel_ok "$session_name" "$chan_name" + add_context_kernel_skip_ok "$session_name" "$chan_name" "$context_name" 4 + if [ "$?" != "4" ]; then + enable_kernel_lttng_event_filter_ok "$session_name" "read" "$chan_name" "\$ctx.$context_name == $ns_inode" + start_lttng_tracing_ok "$session_name" + + # Make sure there is at least one read syscall + cat /proc/cmdline >/dev/null + + stop_lttng_tracing_ok "$session_name" + + # Check that the events contain the right namespace inode number + validate_trace "${ns}_ns = $ns_inode" "$trace_path" + fi + + destroy_lttng_session_ok "$session_name" + stop_lttng_sessiond + + rm -rf "$trace_path" +} + + +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + + +isroot=0 +if [ "$(id -u)" == "0" ]; then + isroot=1 +fi + +skip $isroot "Root access is needed. Skipping all tests." "$NUM_TESTS" && exit 0 + + +system_has_ns=0 +if [ -d "/proc/$$/ns" ]; then + system_has_ns=1 +fi + +skip $system_has_ns "System does not support namespaces" $NUM_TESTS && exit 0 + + +validate_lttng_modules_present + +test_ns cgroup +test_ns ipc +test_ns mnt +test_ns net +test_ns pid +test_ns user +test_ns uts diff --git a/tests/root_regression b/tests/root_regression index f1f661997..c9394aa2c 100644 --- a/tests/root_regression +++ b/tests/root_regression @@ -8,6 +8,7 @@ regression/kernel/test_select_poll_epoll regression/kernel/test_lttng_logger regression/kernel/test_callstack regression/kernel/test_userspace_probe +regression/kernel/test_ns_contexts regression/tools/live/test_kernel regression/tools/live/test_lttng_kernel regression/tools/streaming/test_high_throughput_limits -- 2.34.1