#!/bin/bash -x # Start an X session, fire up some xterms and GL apps, then bounce them # all over the screen. # Copyright (C) 2003-2006 IBM # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # X11 testing -- this is a daemon test! # Run for 20m TEST_DURATION=1200 # Always start X. NEED_TO_START_X=1 #if [ -z "$DISPLAY" ]; then # NEED_TO_START_X=1 #fi # Kill test if we don't want it. if [ -z "$DO_X_TESTS" -o "$DO_X_TESTS" == "0" ]; then echo "X11 testing is off." exit -1 fi # Can we find the startx script? RAW_X_SERVER=0 XSERVER_FILE=`which startx 2> /dev/null` if [ -z "$XSERVER_FILE" -o ! -x "$XSERVER_FILE" ]; then RAW_X_SERVER=1 XSERVER_FILE=`which X 2> /dev/null` if [ -z "$XSERVER_FILE" -o ! -x "$XSERVER_FILE" ]; then echo "startx script not found." exit -1 fi fi # Count X servers OLD_XSERVERS=`pgrep -l X | grep -v Xprt | wc -l` # Start X server if [ $NEED_TO_START_X -eq 1 ]; then echo "xterm_stress: Starting X..." rm -rf /var/log/Xorg.2.log /var/log/XFree86.2.log export DISPLAY=:2 if [ $RAW_X_SERVER -eq 0 ]; then $XSERVER_FILE -- $DISPLAY -ac vt9 & else $POUNDER_HOME/timed_loop $TEST_DURATION $XSERVER_FILE $DISPLAY -ac vt9 & fi while true; do NEW_XSERVERS=`pgrep -l X | grep -v Xprt | wc -l` if [ $NEW_XSERVERS -gt $OLD_XSERVERS ]; then export XPID=`pgrep -l X -n | grep -v Xprt | awk -F " " '{print $1}'` echo -n " -$XPID" >> $POUNDER_PIDFILE break fi done fi trap 'kill -4 $XPID' 15 # Did we see any failures? LOGFILE=`ls /var/log/X*.2.log` ERRORS=`egrep -ic "(fatal)" $LOGFILE` if [ $ERRORS -gt 0 ]; then if [ $ERRORS -eq 255 ]; then ERRORS=254 fi cp $LOGFILE $POUNDER_TMPDIR/x-log-$XPID kill -4 $XPID exit $ERRORS fi # Now start the window manager if we couldn't find startx. if [ $NEED_TO_START_X -eq 1 -a $RAW_X_SERVER -eq 1 ]; then sleep 5 echo "xterm_stress: Starting twm - 5s" twm & fi # Sleep a little more so that the session can start before # we start flooding X with crud. sleep 15 # sets the list delimiter to : IFS=: # Add some screensavers to the path (OpenGL testing) export PATH=$PATH:/usr/lib/xscreensaver:/usr/X11R6/lib/xscreensaver # command list cmd="dmesg:ls -l:cat /var/log/messages:dmesg:ls -l:cat /var/log/messages" xcmd="sproingies -fps -delay 0:flyingtoasters -fps -delay 0:glmatrix -fps -delay 0" # Begin logging xterm -geom 80x25+0+0 -e "bash -c $POUNDER_SRCDIR/dump_xserver_statm" & #start text-based programs for i in $cmd do exe="while true; do $i; done" xterm -geometry 80x25`$POUNDER_SRCDIR/randacoords/coords 600 400` -e "bash -c '$exe'" & sleep 1 done #start gui programs for i in $xcmd do bash -c "$i" & sleep 1 done # Put up a top window for top monitoring. xterm -geom 100x9+0+0 -e top & echo "xterm_stress: Test started" # Now make the windows go bonkers! $POUNDER_SRCDIR/xbonkers/xbonkers -i 500 -s 10000 & # If we started X via startx, we need to wait 1200s and then # kill $XPID. if [ $RAW_X_SERVER -eq 0 ]; then sleep $TEST_DURATION kill -4 $XPID fi # Track the number of times we wait for X server to die. DIE_TIMEOUT_LOOPS=0 # Loop until the X server goes away while true; do XSERVERS=`pgrep -l X | grep -v Xprt | wc -l` if [ $XSERVERS -lt $OLD_XSERVERS ]; then # Did we see any failures? LOGFILE=`ls /var/log/X*.2.log` ERRORS=`egrep -ic "(fatal)" $LOGFILE` # There will always be one fatal error--we killed X. exit $((ERRORS - 1)) fi if [ $DIE_TIMEOUT_LOOPS -gt 180 ]; then # Three minutes; try something stronger. echo "First attempt to kill X server failed; trying -9." kill -9 $XPID fi if [ $DIE_TIMEOUT_LOOPS -gt 360 ]; then # Six minutes. Still not dead? Abort script. echo "Second attempt to kill X server failed. Aborting." exit -1 fi OLD_XSERVERS=$XSERVERS DIE_TIMEOUT_LOOPS=$((DIE_TIMEOUT_LOOPS + 1)) sleep 1 done echo "ERROR: Jumped to somewhere where we should never be." # We're not supposed to get here. exit 254