Commit | Line | Data |
---|---|---|
512eb148 JD |
1 | #!/bin/bash |
2 | # | |
9d16b343 | 3 | # Copyright (C) 2015 Julien Desfossez <jdesfossez@efficios.com> |
512eb148 | 4 | # |
9d16b343 | 5 | # SPDX-License-Identifier: GPL-2.0-only |
512eb148 | 6 | # |
512eb148 JD |
7 | |
8 | # WARNING: this test changes the date of the system (and does not set it back). | |
9 | # This test sets the date of the current machine to $DATE1, creates a trace | |
10 | # makes sure the trace is really at that date, then restarts the trace, changes | |
11 | # the date to $DATE2, regenerates the metadata and validates that the trace is | |
12 | # actually at $DATE2. | |
13 | ||
14 | TEST_DESC="Metadata regeneration after date change" | |
15 | ||
16 | CURDIR=$(dirname $0)/ | |
17 | TESTDIR=$CURDIR/.. | |
18 | NUM_TESTS=44 | |
19 | SESSION_NAME="regen" | |
20 | KERNEL_EVENT_NAME="lttng_test_filter_event" | |
33e55711 | 21 | TRACE_PATH=$(mktemp --tmpdir -d -t tmp.metadata_regen_after_data_change.XXXXXX) |
512eb148 JD |
22 | |
23 | TESTAPP_PATH="$TESTDIR/utils/testapp" | |
24 | TESTAPP_NAME="gen-ust-events" | |
25 | TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" | |
26 | NR_ITER=1 | |
27 | NR_USEC_WAIT=0 | |
28 | UST_EVENT_NAME="tp:tptest" | |
29 | ||
30 | DATE1="1970-02-02" | |
31 | DATE2="1980-02-02" | |
32 | HOUR="05:30" | |
33 | ||
34 | source $TESTDIR/utils/utils.sh | |
35 | ||
36 | # MUST set TESTDIR before calling those functions | |
37 | plan_tests $NUM_TESTS | |
38 | ||
39 | print_test_banner "$TEST_DESC" | |
40 | ||
c125de8f FD |
41 | bail_out_if_no_babeltrace |
42 | ||
43 | ||
512eb148 JD |
44 | function validate_trace_date |
45 | { | |
46 | local test_date=$1 | |
47 | local trace_path=$2 | |
48 | ||
512eb148 JD |
49 | res=$($BABELTRACE_BIN --clock-date $trace_path 2>/dev/null | head -1 | grep $test_date) |
50 | if [ $? -eq 0 ]; then | |
51 | pass "Validate trace at date $test_date" | |
52 | ret=0 | |
53 | else | |
54 | fail "The trace is not at the expected date" | |
55 | ret=-1 | |
56 | fi | |
57 | ||
58 | return $ret | |
59 | } | |
60 | ||
61 | function test_kernel_local () | |
62 | { | |
63 | diag "Test kernel local with metadata regeneration" | |
64 | date "+%Y-%m-%d %H:%M" -s "$DATE1 $HOUR" >/dev/null | |
65 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH | |
66 | lttng_enable_kernel_event $SESSION_NAME $KERNEL_EVENT_NAME | |
67 | start_lttng_tracing_ok $SESSION_NAME | |
68 | echo -n "100" > /proc/lttng-test-filter-event | |
69 | stop_lttng_tracing_ok $SESSION_NAME | |
70 | validate_trace_date $DATE1 $TRACE_PATH | |
71 | start_lttng_tracing_ok $SESSION_NAME | |
72 | date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null | |
eded6438 | 73 | regenerate_metadata_ok $SESSION_NAME |
512eb148 JD |
74 | stop_lttng_tracing_ok $SESSION_NAME |
75 | validate_trace_date $DATE2 $TRACE_PATH | |
76 | if [ $? -eq 0 ]; then | |
77 | # Only delete if successful | |
78 | rm -rf $TRACE_PATH | |
79 | fi | |
80 | destroy_lttng_session_ok $SESSION_NAME | |
81 | } | |
82 | ||
83 | function test_kernel_streaming () | |
84 | { | |
85 | diag "Test kernel streaming with metadata regeneration" | |
86 | date "+%Y-%m-%d %H:%M" -s "$DATE1 $HOUR" >/dev/null | |
f0d43d3d | 87 | create_lttng_session_uri $SESSION_NAME net://localhost |
512eb148 JD |
88 | lttng_enable_kernel_event $SESSION_NAME $KERNEL_EVENT_NAME |
89 | start_lttng_tracing_ok $SESSION_NAME | |
90 | echo -n "100" > /proc/lttng-test-filter-event | |
91 | stop_lttng_tracing_ok $SESSION_NAME | |
92 | validate_trace_date $DATE1 $TRACE_PATH/$HOSTNAME/$SESSION_NAME* | |
93 | start_lttng_tracing_ok $SESSION_NAME | |
94 | date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null | |
eded6438 | 95 | regenerate_metadata_ok $SESSION_NAME |
512eb148 JD |
96 | stop_lttng_tracing_ok $SESSION_NAME |
97 | # Validate test | |
98 | validate_trace_date $DATE2 $TRACE_PATH/$HOSTNAME/$SESSION_NAME* | |
99 | if [ $? -eq 0 ]; then | |
100 | # Only delete if successful | |
101 | rm -rf $TRACE_PATH | |
102 | else | |
103 | break | |
104 | fi | |
105 | destroy_lttng_session_ok $SESSION_NAME | |
106 | } | |
107 | ||
108 | function test_ust_local () | |
109 | { | |
33e55711 FD |
110 | local file_sync_after_first=$(mktemp --tmpdir -u -t "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX") |
111 | local file_sync_before_last=$(mktemp --tmpdir -u -t "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX") | |
512eb148 JD |
112 | |
113 | diag "Test UST local with metadata regeneration" | |
114 | date "+%Y-%m-%d %H:%M" -s "$DATE1 $HOUR" >/dev/null | |
115 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH | |
116 | enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME | |
117 | ||
6c4a91d6 MD |
118 | $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \ |
119 | --sync-after-first-event ${file_sync_after_first} \ | |
fa1289fc | 120 | --sync-before-last-event ${file_sync_before_last} > /dev/null 2>&1 & |
512eb148 JD |
121 | |
122 | start_lttng_tracing_ok $SESSION_NAME | |
123 | ||
124 | touch ${file_sync_before_last} | |
125 | # Wait for the applications started in background | |
126 | wait | |
127 | ||
128 | stop_lttng_tracing_ok $SESSION_NAME | |
129 | validate_trace_date $DATE1 $TRACE_PATH | |
130 | ||
131 | start_lttng_tracing_ok $SESSION_NAME | |
132 | date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null | |
eded6438 | 133 | regenerate_metadata_ok $SESSION_NAME |
512eb148 JD |
134 | |
135 | stop_lttng_tracing_ok $SESSION_NAME | |
136 | destroy_lttng_session_ok $SESSION_NAME | |
137 | validate_trace_date $DATE2 $TRACE_PATH | |
138 | if [ $? -eq 0 ]; then | |
139 | # Only delete if successful | |
140 | rm -rf $TRACE_PATH | |
141 | fi | |
142 | rm -f ${file_sync_after_first} | |
143 | rm -f ${file_sync_before_last} | |
144 | } | |
145 | ||
146 | function test_ust_streaming () | |
147 | { | |
33e55711 FD |
148 | local file_sync_after_first=$(mktemp --tmpdir -u -t "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX") |
149 | local file_sync_before_last=$(mktemp --tmpdir -u -t "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX") | |
512eb148 JD |
150 | |
151 | diag "Test UST streaming with metadata regeneration" | |
152 | date "+%Y-%m-%d %H:%M" -s "$DATE1 $HOUR" >/dev/null | |
f0d43d3d | 153 | create_lttng_session_uri $SESSION_NAME net://localhost |
512eb148 JD |
154 | enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME |
155 | ||
6c4a91d6 MD |
156 | $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \ |
157 | --sync-after-first-event ${file_sync_after_first} \ | |
fa1289fc | 158 | --sync-before-last-event ${file_sync_before_last} > /dev/null 2>&1 & |
512eb148 JD |
159 | |
160 | start_lttng_tracing_ok $SESSION_NAME | |
161 | ||
162 | touch ${file_sync_before_last} | |
163 | ||
164 | # Wait for the applications started in background | |
165 | wait | |
166 | stop_lttng_tracing_ok $SESSION_NAME | |
167 | validate_trace_date $DATE1 $TRACE_PATH/$HOSTNAME/$SESSION_NAME* | |
168 | ||
169 | start_lttng_tracing_ok $SESSION_NAME | |
170 | date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null | |
171 | ||
eded6438 | 172 | regenerate_metadata_ok $SESSION_NAME |
512eb148 JD |
173 | |
174 | stop_lttng_tracing_ok $SESSION_NAME | |
175 | destroy_lttng_session_ok $SESSION_NAME | |
176 | # Validate test | |
177 | validate_trace_date $DATE2 $TRACE_PATH/$HOSTNAME/$SESSION_NAME* | |
178 | if [ $? -eq 0 ]; then | |
179 | # Only delete if successful | |
180 | rm -rf $TRACE_PATH | |
181 | fi | |
182 | rm -f ${file_sync_after_first} | |
183 | rm -f ${file_sync_before_last} | |
184 | } | |
185 | ||
186 | if [ "$(id -u)" == "0" ]; then | |
187 | isroot=1 | |
188 | else | |
189 | isroot=0 | |
190 | fi | |
191 | ||
192 | if ! destructive_tests_enabled ; then | |
193 | echo 'You need to set the LTTNG_ENABLE_DESTRUCTIVE_TESTS to "will-break-my-system" as argument to run this test' | |
194 | echo 'Moreover, please make sure that ntp is not running while executing this test' | |
195 | exit 0 | |
196 | fi | |
197 | ||
198 | skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || | |
199 | { | |
200 | start_lttng_relayd "-o $TRACE_PATH" | |
201 | start_lttng_sessiond | |
202 | ||
203 | modprobe lttng-test | |
204 | test_kernel_local | |
205 | test_kernel_streaming | |
d0e263e7 | 206 | modprobe --remove lttng-test |
512eb148 JD |
207 | |
208 | test_ust_local | |
209 | test_ust_streaming | |
210 | ||
211 | stop_lttng_sessiond | |
212 | stop_lttng_relayd | |
213 | } |