Home | History | Annotate | Download | only in pec
      1 #!/bin/bash
      2 
      3 ################################################################################
      4 ##                                                                            ##
      5 ## Copyright (c) 2008 FUJITSU LIMITED                                         ##
      6 ##                                                                            ##
      7 ## This program is free software;  you can redistribute it and#or modify      ##
      8 ## it under the terms of the GNU General Public License as published by       ##
      9 ## the Free Software Foundation; either version 2 of the License, or          ##
     10 ## (at your option) any later version.                                        ##
     11 ##                                                                            ##
     12 ## This program is distributed in the hope that it will be useful, but        ##
     13 ## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
     14 ## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
     15 ## for more details.                                                          ##
     16 ##                                                                            ##
     17 ## You should have received a copy of the GNU General Public License          ##
     18 ## along with this program;  if not, write to the Free Software               ##
     19 ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    ##
     20 ##                                                                            ##
     21 ## Author: Li Zefan <lizf (at] cn.fujitsu.com>                                     ##
     22 ##                                                                            ##
     23 ################################################################################
     24 
     25 NUM_EVENTS=1
     26 EVENT_TEST_CASES=( "fork" "exec" "exit" "uid" "gid" )
     27 
     28 cd $LTPROOT/testcases/bin
     29 
     30 export TCID="pec01"
     31 export TST_TOTAL=5
     32 export TST_COUNT=1
     33 
     34 exit_status=0
     35 
     36 if [ $(id -u) != 0 ]; then
     37 	tst_brkm TCONF ignored "Test must be run as root"
     38 	exit 0;
     39 fi
     40 
     41 grep cn_proc /proc/net/connector > /dev/null
     42 if [ $? -ne 0 ]; then
     43 	tst_brkm TCONF ignored "Process Event Connector is not supported or kernel is below 2.6.26"
     44 	exit 0;
     45 fi
     46 
     47 # Run a test case
     48 #
     49 # $1: the test number
     50 # $2: type of event
     51 run_case()
     52 {
     53 	export TST_COUNT=$1
     54 
     55 	log="$LTPROOT/output/log"
     56 	mkdir -p $log 2> /dev/null
     57 
     58 	pec_listener > "$log/listener_$1.log" 2>&1 &
     59 	pid=$!
     60 	# Wait for pec_listener to start listening
     61 	sleep $((1*NUM_EVENTS))
     62 
     63 	event_generator -e $2 > "$log/generator_$1.log"
     64 	ret1=$?
     65 
     66 	# Sleep until pec_listener has seen and handled all of
     67 	# the generated events
     68 	sleep $((1*NUM_EVENTS))
     69 	kill -s SIGINT $pid 2> /dev/null
     70 	wait $pid
     71 	ret2=$?
     72 
     73 	if [ $ret1 -ne 0 -o ! -s "$log/generator_$1.log" ]; then
     74 		tst_resm TFAIL "failed to generate process events"
     75 		exit_status=1
     76 		return 1
     77 	fi
     78 
     79 	if [ $ret2 -eq 2 ]; then
     80 		tst_brkm TCONF NULL "connector may not be supported"
     81 		exit 0
     82 	fi
     83 
     84 	if [ $ret2 -ne 0 ]; then
     85 		tst_resm TFAIL "failed to listen process events"
     86 		exit_status=1
     87 		return 1
     88 	fi
     89 
     90 	event="`cat $log/generator_$1.log`"
     91 	cat "$log/listener_$1.log" | grep "$event" > /dev/null
     92 	if [ $? -eq 0 ]; then
     93 		tst_resm TPASS "get event - $event"
     94 	else
     95 		tst_resm TFAIL "expected event - $event"
     96 		exit_status=1
     97 	fi
     98 }
     99 
    100 i=1;
    101 for CASE in "${EVENT_TEST_CASES[@]}" ; do
    102 	run_case $i $CASE
    103 	((i++))
    104 done
    105 
    106 exit $exit_status
    107 
    108