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