Use compiler-agnostic defines to silence warning
[lttng-tools.git] / tests / regression / kernel / test_ns_contexts_change
CommitLineData
5f0d4e78
MJ
1#!/bin/bash
2#
3# Copyright (C) 2019 Michael Jeanson <mjeanson@efficios.com>
4#
9d16b343 5# SPDX-License-Identifier: LGPL-2.1-only
5f0d4e78
MJ
6
7TEST_DESC="Kernel tracer - Namespace contexts change"
8
9CURDIR=$(dirname "$0")/
10TESTDIR=$CURDIR/../..
11
12TESTAPP_PATH="$TESTDIR/utils/testapp"
13TESTAPP_NAME="gen-ns-events"
14TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
15
16TESTS_PER_NS=19
17
18NUM_TESTS=$((TESTS_PER_NS * 6))
19
20source "$TESTDIR/utils/utils.sh"
21
22# MUST set TESTDIR before calling those functions
23
24function add_context_kernel_skip_ok()
25{
26 local session_name=$1
27 local channel_name=$2
28 local context_name=$3
29 local skip_num=$4
30
31 local ret
32
b445e3da
KS
33 _run_lttng_cmd "$(lttng_client_log_file)" "$(lttng_client_err_file)" add-context -k \
34 -s "$session_name" -c "$channel_name" -t "$context_name"
5f0d4e78
MJ
35 ret=$?
36
37 if [ "$ret" == "4" ]; then
38 skip 0 "Current kernel doesn't implement '$context_name' context" $((skip_num + 1))
39 else
40 ok $ret "Add context command for type: $context_name"
41 fi
42
43 return $ret
44}
45
46function enable_kernel_lttng_event_filter_ok()
47{
48 local session_name=$1
49 local syscall_name=$2
50 local channel_name=$3
51 local filter=$4
52
b445e3da
KS
53 _run_lttng_cmd "$(lttng_client_log_file)" "$(lttng_client_err_file)" enable-event -k \
54 -c "$channel_name" -s "$session_name" \ --syscall "$syscall_name" \
55 -f "$filter"
5f0d4e78
MJ
56
57 ok $? "Add syscall with filter"
58}
59
60function test_ns()
61{
62 local ns=$1
63
64 local session_name="${ns}_ns"
65 local chan_name="${ns}_ns"
66 local context_name="${ns}_ns"
67
68 local trace_path
69 local ns_inode
70 local file_sync_wait_before_unshare
71 local file_sync_wait_after_unshare
72 local file_sync_signal_after_unshare
73
74 # Check if the kernel has support for this ns type
75 if [ ! -f "/proc/$$/ns/$ns" ]; then
76 skip 0 "System has no $ns namespace support" $TESTS_PER_NS
77 return
78 fi
79
8d5a3312
MJ
80 trace_path=$(mktemp -d -t "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
81 file_sync_wait_before_unshare=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_unshare.XXXXXX")
82 file_sync_wait_after_unshare=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_after_unshare.XXXXXX")
83 file_sync_signal_after_unshare=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_signal_after_unshare.XXXXXX")
5f0d4e78
MJ
84
85 # Get the current ns inode number
86 ns_inode=$(stat -c '%i' -L "/proc/$$/ns/$ns")
87 ok $? "Get current $ns namespace inode: $ns_inode" || ns_inode="invalid"
88
89 $TESTAPP_BIN -n "$ns" -a "$file_sync_wait_after_unshare" -b "$file_sync_wait_before_unshare" -s "$file_sync_signal_after_unshare" &
90 ok $? "Launch test app."
91 app_pid=$!
92
93 app_ns_inode=$(stat -c '%i' -L "/proc/$app_pid/ns/$ns")
94 ok $? "Get app current $ns namespace inode: $app_ns_inode" || app_ns_inode="invalid"
95
96 start_lttng_sessiond
97
98 create_lttng_session_ok "$session_name" "$trace_path"
99 enable_kernel_lttng_channel_ok "$session_name" "$chan_name"
100 add_context_kernel_skip_ok "$session_name" "$chan_name" "$context_name" 10
101 if [ "$?" != "4" ]; then
102 lttng_enable_kernel_syscall_ok "$session_name" "unshare" "$chan_name"
103 lttng_track_pid_ok "$app_pid"
104 start_lttng_tracing_ok "$session_name"
105
106 touch "$file_sync_wait_before_unshare"
107
5f0d4e78
MJ
108 while [ ! -f "$file_sync_signal_after_unshare" ]; do
109 # Break if the app failed / died
70a7f9f7 110 if ! kill -0 "$app_pid" ; then
5f0d4e78 111 break
70a7f9f7 112 echo "# App failed"
5f0d4e78
MJ
113 fi
114 echo "# Waiting for app..."
115 sleep 0.5
116 done
117
118 app_unshare_ns_inode=$(stat -c '%i' -L "/proc/$app_pid/ns/$ns")
119 ok $? "Get app current $ns namespace inode: $app_unshare_ns_inode" || app_unshare_ns_inode="invalid"
120
121 test "$app_ns_inode" != "invalid" && test "$app_unshare_ns_inode" != "invalid" && test "$app_ns_inode" != "$app_unshare_ns_inode"
122 ok $? "Reported namespace inode changed after unshare"
123
124 touch "$file_sync_wait_after_unshare"
125
126 stop_lttng_tracing_ok "$session_name"
127
128 # Check that the events contain the right namespace inode number
129 validate_trace_count "${ns}_ns = $app_ns_inode" "$trace_path" 1
130 validate_trace_count "${ns}_ns = $app_unshare_ns_inode" "$trace_path" 1
0159fa50
JR
131 else
132 touch "$file_sync_wait_before_unshare"
133
134 while [ ! -f "$file_sync_signal_after_unshare" ]; do
135 # Break if the app failed / died
136 if ! kill -0 "$app_pid" ; then
137 break
138 echo "# App failed"
139 fi
140 echo "# Waiting for app..."
141 sleep 0.5
142 done
143 touch "$file_sync_wait_after_unshare"
5f0d4e78
MJ
144 fi
145
0159fa50 146
5f0d4e78
MJ
147 # stop and destroy
148 destroy_lttng_session_ok "$session_name"
149 stop_lttng_sessiond
150
151 rm -rf "$trace_path"
152 rm -f "$file_sync_wait_after_unshare"
153 rm -f "$file_sync_wait_before_unshare"
154 rm -f "$file_sync_signal_after_unshare"
155}
156
157
158plan_tests $NUM_TESTS
159
160print_test_banner "$TEST_DESC"
161
3a174400 162check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." && exit 0
5f0d4e78
MJ
163
164system_has_ns=0
165if [ -d "/proc/$$/ns" ]; then
166 system_has_ns=1
167fi
168
169skip $system_has_ns "System has no namespaces support" $NUM_TESTS && exit 0
170
171
172validate_lttng_modules_present
173
174test_ns cgroup
175test_ns ipc
176test_ns mnt
177test_ns net
178#test_ns pid # pid_ns is special, can't be changed that way
d37ac3cd 179#test_ns time # time_ns is special, can't be changed that way
5f0d4e78
MJ
180test_ns user
181test_ns uts
0159fa50 182set +x
This page took 0.068017 seconds and 5 git commands to generate.