xref: /linux/tools/perf/tests/shell/base_probe/test_invalid_options.sh (revision 8a7c601e14576a22c2bbf7f67455ccf3f3d2737f)
1#!/bin/bash
2# perf_probe :: Reject invalid options (exclusive)
3# SPDX-License-Identifier: GPL-2.0
4
5#
6#	test_invalid_options of perf_probe test
7#	Author: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
8#	Author: Michael Petlan <mpetlan@redhat.com>
9#
10#	Description:
11#
12#		This test checks whether the invalid and incompatible options are reported
13#
14
15DIR_PATH="$(dirname $0)"
16TEST_RESULT=0
17
18# include working environment
19. "$DIR_PATH/../common/init.sh"
20
21if ! check_kprobes_available; then
22	print_overall_skipped
23	exit 2
24fi
25
26# Check for presence of DWARF
27$CMD_PERF check feature -q dwarf
28[ $? -ne 0 ] && HINT_FAIL="Some of the tests need DWARF to run"
29
30### missing argument
31
32# some options require an argument
33for opt in '-a' '-d' '-L' '-V'; do
34	! $CMD_PERF probe $opt 2> $LOGS_DIR/invalid_options_missing_argument$opt.err
35	PERF_EXIT_CODE=$?
36
37	"$DIR_PATH/../common/check_all_patterns_found.pl" \
38		"Error: switch .* requires a value" \
39		< $LOGS_DIR/invalid_options_missing_argument$opt.err
40	CHECK_EXIT_CODE=$?
41
42	print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "missing argument for $opt"
43	(( TEST_RESULT += $? ))
44done
45
46
47### unnecessary argument
48
49# some options may omit the argument
50for opt in '-F' '-l'; do
51	$CMD_PERF probe -F > /dev/null 2> $LOGS_DIR/invalid_options_unnecessary_argument$opt.err
52	PERF_EXIT_CODE=$?
53
54	test ! -s $LOGS_DIR/invalid_options_unnecessary_argument$opt.err
55	CHECK_EXIT_CODE=$?
56
57	print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "unnecessary argument for $opt"
58	(( TEST_RESULT += $? ))
59done
60
61
62### mutually exclusive options
63
64# some options are mutually exclusive
65test -e $LOGS_DIR/invalid_options_mutually_exclusive.log && rm -f $LOGS_DIR/invalid_options_mutually_exclusive.log
66for opt in '-a xxx -d xxx' '-a xxx -L foo' '-a xxx -V foo' '-a xxx -l' '-a xxx -F' \
67		'-d xxx -L foo' '-d xxx -V foo' '-d xxx -l' '-d xxx -F' \
68		'-L foo -V bar' '-L foo -l' '-L foo -F' '-V foo -l' '-V foo -F' '-l -F'; do
69	! $CMD_PERF probe $opt > /dev/null 2> $LOGS_DIR/aux.log
70	PERF_EXIT_CODE=$?
71
72	"$DIR_PATH/../common/check_all_patterns_found.pl" \
73		"Error: switch .+ cannot be used with switch .+" < $LOGS_DIR/aux.log
74	CHECK_EXIT_CODE=$?
75
76	print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "mutually exclusive options :: $opt"
77	(( TEST_RESULT += $? ))
78
79	# gather the logs
80	cat $LOGS_DIR/aux.log | grep "Error" >> $LOGS_DIR/invalid_options_mutually_exclusive.log
81done
82
83
84# print overall results
85print_overall_results "$TEST_RESULT" $HINT_FAIL
86exit $?
87