1 #!/bin/bash -x 2 3 # Start an X session, fire up some xterms and GL apps, then bounce them 4 # all over the screen. 5 6 # Copyright (C) 2003-2006 IBM 7 # 8 # This program is free software; you can redistribute it and/or 9 # modify it under the terms of the GNU General Public License as 10 # published by the Free Software Foundation; either version 2 of the 11 # License, or (at your option) any later version. 12 # 13 # This program is distributed in the hope that it will be useful, but 14 # WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 # General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License 19 # along with this program; if not, write to the Free Software 20 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 21 # 02111-1307, USA. 22 23 24 # X11 testing -- this is a daemon test! 25 # Run for 20m 26 TEST_DURATION=1200 27 28 # Always start X. 29 NEED_TO_START_X=1 30 #if [ -z "$DISPLAY" ]; then 31 # NEED_TO_START_X=1 32 #fi 33 34 # Kill test if we don't want it. 35 if [ -z "$DO_X_TESTS" -o "$DO_X_TESTS" == "0" ]; then 36 echo "X11 testing is off." 37 exit -1 38 fi 39 40 # Can we find the startx script? 41 RAW_X_SERVER=0 42 XSERVER_FILE=`which startx 2> /dev/null` 43 if [ -z "$XSERVER_FILE" -o ! -x "$XSERVER_FILE" ]; then 44 RAW_X_SERVER=1 45 XSERVER_FILE=`which X 2> /dev/null` 46 if [ -z "$XSERVER_FILE" -o ! -x "$XSERVER_FILE" ]; then 47 echo "startx script not found." 48 exit -1 49 fi 50 fi 51 52 # Count X servers 53 OLD_XSERVERS=`pgrep -l X | grep -v Xprt | wc -l` 54 55 # Start X server 56 if [ $NEED_TO_START_X -eq 1 ]; then 57 echo "xterm_stress: Starting X..." 58 59 rm -rf /var/log/Xorg.2.log /var/log/XFree86.2.log 60 61 export DISPLAY=:2 62 if [ $RAW_X_SERVER -eq 0 ]; then 63 $XSERVER_FILE -- $DISPLAY -ac vt9 & 64 else 65 $POUNDER_HOME/timed_loop $TEST_DURATION $XSERVER_FILE $DISPLAY -ac vt9 & 66 fi 67 68 while true; do 69 NEW_XSERVERS=`pgrep -l X | grep -v Xprt | wc -l` 70 if [ $NEW_XSERVERS -gt $OLD_XSERVERS ]; then 71 export XPID=`pgrep -l X -n | grep -v Xprt | awk -F " " '{print $1}'` 72 echo -n " -$XPID" >> $POUNDER_PIDFILE 73 break 74 fi 75 done 76 fi 77 78 trap 'kill -4 $XPID' 15 79 80 # Did we see any failures? 81 LOGFILE=`ls /var/log/X*.2.log` 82 ERRORS=`egrep -ic "(fatal)" $LOGFILE` 83 if [ $ERRORS -gt 0 ]; then 84 if [ $ERRORS -eq 255 ]; then 85 ERRORS=254 86 fi 87 cp $LOGFILE $POUNDER_TMPDIR/x-log-$XPID 88 kill -4 $XPID 89 exit $ERRORS 90 fi 91 92 # Now start the window manager if we couldn't find startx. 93 if [ $NEED_TO_START_X -eq 1 -a $RAW_X_SERVER -eq 1 ]; then 94 sleep 5 95 echo "xterm_stress: Starting twm - 5s" 96 twm & 97 fi 98 99 # Sleep a little more so that the session can start before 100 # we start flooding X with crud. 101 sleep 15 102 103 # sets the list delimiter to : 104 IFS=: 105 # Add some screensavers to the path (OpenGL testing) 106 export PATH=$PATH:/usr/lib/xscreensaver:/usr/X11R6/lib/xscreensaver 107 108 # command list 109 cmd="dmesg:ls -l:cat /var/log/messages:dmesg:ls -l:cat /var/log/messages" 110 xcmd="sproingies -fps -delay 0:flyingtoasters -fps -delay 0:glmatrix -fps -delay 0" 111 112 # Begin logging 113 xterm -geom 80x25+0+0 -e "bash -c $POUNDER_SRCDIR/dump_xserver_statm" & 114 115 #start text-based programs 116 for i in $cmd 117 do 118 exe="while true; do $i; done" 119 xterm -geometry 80x25`$POUNDER_SRCDIR/randacoords/coords 600 400` -e "bash -c '$exe'" & 120 sleep 1 121 done 122 123 #start gui programs 124 for i in $xcmd 125 do 126 bash -c "$i" & 127 sleep 1 128 done 129 130 # Put up a top window for top monitoring. 131 xterm -geom 100x9+0+0 -e top & 132 echo "xterm_stress: Test started" 133 134 # Now make the windows go bonkers! 135 $POUNDER_SRCDIR/xbonkers/xbonkers -i 500 -s 10000 & 136 137 # If we started X via startx, we need to wait 1200s and then 138 # kill $XPID. 139 if [ $RAW_X_SERVER -eq 0 ]; then 140 sleep $TEST_DURATION 141 kill -4 $XPID 142 fi 143 144 # Track the number of times we wait for X server to die. 145 DIE_TIMEOUT_LOOPS=0 146 147 # Loop until the X server goes away 148 while true; do 149 XSERVERS=`pgrep -l X | grep -v Xprt | wc -l` 150 if [ $XSERVERS -lt $OLD_XSERVERS ]; then 151 # Did we see any failures? 152 LOGFILE=`ls /var/log/X*.2.log` 153 ERRORS=`egrep -ic "(fatal)" $LOGFILE` 154 155 # There will always be one fatal error--we killed X. 156 exit $((ERRORS - 1)) 157 fi 158 if [ $DIE_TIMEOUT_LOOPS -gt 180 ]; then 159 # Three minutes; try something stronger. 160 echo "First attempt to kill X server failed; trying -9." 161 kill -9 $XPID 162 fi 163 if [ $DIE_TIMEOUT_LOOPS -gt 360 ]; then 164 # Six minutes. Still not dead? Abort script. 165 echo "Second attempt to kill X server failed. Aborting." 166 exit -1 167 fi 168 169 OLD_XSERVERS=$XSERVERS 170 DIE_TIMEOUT_LOOPS=$((DIE_TIMEOUT_LOOPS + 1)) 171 sleep 1 172 done 173 174 echo "ERROR: Jumped to somewhere where we should never be." 175 # We're not supposed to get here. 176 exit 254 177