|
|
1.1 ! root 1: #!/bin/bash ! 2: # ! 3: # Copyright (C) 2009 Red Hat, Inc. ! 4: # Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. ! 5: # ! 6: # This program is free software; you can redistribute it and/or modify ! 7: # it under the terms of the GNU General Public License as published by ! 8: # the Free Software Foundation; either version 2 of the License, or ! 9: # (at your option) any later version. ! 10: # ! 11: # This program is distributed in the hope that it will be useful, ! 12: # but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: # GNU General Public License for more details. ! 15: # ! 16: # You should have received a copy of the GNU General Public License ! 17: # along with this program. If not, see <http://www.gnu.org/licenses/>. ! 18: # ! 19: ! 20: dd() ! 21: { ! 22: if [ "$HOSTOS" == "Linux" ] ! 23: then ! 24: command dd --help | grep noxfer > /dev/null 2>&1 ! 25: ! 26: if [ "$?" -eq 0 ] ! 27: then ! 28: command dd status=noxfer $@ ! 29: else ! 30: command dd $@ ! 31: fi ! 32: else ! 33: command dd $@ ! 34: fi ! 35: } ! 36: ! 37: # we need common.config ! 38: if [ "$iam" != "check" ] ! 39: then ! 40: if ! . ./common.config ! 41: then ! 42: echo "$iam: failed to source common.config" ! 43: exit 1 ! 44: fi ! 45: fi ! 46: ! 47: # make sure we have a standard umask ! 48: umask 022 ! 49: ! 50: if [ "$IMGPROTO" = "file" ]; then ! 51: TEST_IMG=$TEST_DIR/t.$IMGFMT ! 52: else ! 53: TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT ! 54: fi ! 55: ! 56: _optstr_add() ! 57: { ! 58: if [ -n "$1" ]; then ! 59: echo "$1,$2" ! 60: else ! 61: echo "$2" ! 62: fi ! 63: } ! 64: ! 65: _set_default_imgopts() ! 66: { ! 67: if [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then ! 68: IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") ! 69: fi ! 70: } ! 71: ! 72: _make_test_img() ! 73: { ! 74: # extra qemu-img options can be added by tests ! 75: # at least one argument (the image size) needs to be added ! 76: local extra_img_options="" ! 77: local image_size=$* ! 78: local optstr="" ! 79: ! 80: if [ -n "$IMGOPTS" ]; then ! 81: optstr=$(_optstr_add "$optstr" "$IMGOPTS") ! 82: fi ! 83: ! 84: if [ "$1" = "-b" ]; then ! 85: extra_img_options="$1 $2" ! 86: image_size=$3 ! 87: fi ! 88: if [ \( "$IMGFMT" = "qcow2" -o "$IMGFMT" = "qed" \) -a -n "$CLUSTER_SIZE" ]; then ! 89: optstr=$(_optstr_add "$optstr" "cluster_size=$CLUSTER_SIZE") ! 90: fi ! 91: ! 92: if [ -n "$optstr" ]; then ! 93: extra_img_options="-o $optstr $extra_img_options" ! 94: fi ! 95: ! 96: # XXX(hch): have global image options? ! 97: $QEMU_IMG create -f $IMGFMT $extra_img_options $TEST_IMG $image_size | \ ! 98: sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" | \ ! 99: sed -e "s#$TEST_DIR#TEST_DIR#g" | \ ! 100: sed -e "s#$IMGFMT#IMGFMT#g" | \ ! 101: sed -e "s# encryption=off##g" | \ ! 102: sed -e "s# cluster_size=[0-9]\\+##g" | \ ! 103: sed -e "s# table_size=0##g" | \ ! 104: sed -e "s# compat='[^']*'##g" | \ ! 105: sed -e "s# compat6=off##g" | \ ! 106: sed -e "s# static=off##g" ! 107: } ! 108: ! 109: _cleanup_test_img() ! 110: { ! 111: case "$IMGPROTO" in ! 112: ! 113: file) ! 114: rm -f $TEST_DIR/t.$IMGFMT ! 115: rm -f $TEST_DIR/t.$IMGFMT.orig ! 116: rm -f $TEST_DIR/t.$IMGFMT.base ! 117: ;; ! 118: ! 119: rbd) ! 120: rbd rm $TEST_DIR/t.$IMGFMT > /dev/null ! 121: ;; ! 122: ! 123: sheepdog) ! 124: collie vdi delete $TEST_DIR/t.$IMGFMT ! 125: ;; ! 126: ! 127: esac ! 128: } ! 129: ! 130: _check_test_img() ! 131: { ! 132: $QEMU_IMG check -f $IMGFMT $TEST_IMG 2>&1 | \ ! 133: grep -v "fragmented$" | \ ! 134: sed -e 's/qemu-img\: This image format does not support checks/No errors were found on the image./' ! 135: } ! 136: ! 137: _get_pids_by_name() ! 138: { ! 139: if [ $# -ne 1 ] ! 140: then ! 141: echo "Usage: _get_pids_by_name process-name" 1>&2 ! 142: exit 1 ! 143: fi ! 144: ! 145: # Algorithm ... all ps(1) variants have a time of the form MM:SS or ! 146: # HH:MM:SS before the psargs field, use this as the search anchor. ! 147: # ! 148: # Matches with $1 (process-name) occur if the first psarg is $1 ! 149: # or ends in /$1 ... the matching uses sed's regular expressions, ! 150: # so passing a regex into $1 will work. ! 151: ! 152: ps $PS_ALL_FLAGS \ ! 153: | sed -n \ ! 154: -e 's/$/ /' \ ! 155: -e 's/[ ][ ]*/ /g' \ ! 156: -e 's/^ //' \ ! 157: -e 's/^[^ ]* //' \ ! 158: -e "/[0-9]:[0-9][0-9] *[^ ]*\/$1 /s/ .*//p" \ ! 159: -e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p" ! 160: } ! 161: ! 162: # fqdn for localhost ! 163: # ! 164: _get_fqdn() ! 165: { ! 166: host=`hostname` ! 167: $NSLOOKUP_PROG $host | $AWK_PROG '{ if ($1 == "Name:") print $2 }' ! 168: } ! 169: ! 170: # check if run as root ! 171: # ! 172: _need_to_be_root() ! 173: { ! 174: id=`id | $SED_PROG -e 's/(.*//' -e 's/.*=//'` ! 175: if [ "$id" -ne 0 ] ! 176: then ! 177: echo "Arrgh ... you need to be root (not uid=$id) to run this test" ! 178: exit 1 ! 179: fi ! 180: } ! 181: ! 182: ! 183: # Do a command, log it to $seq.full, optionally test return status ! 184: # and die if command fails. If called with one argument _do executes the ! 185: # command, logs it, and returns its exit status. With two arguments _do ! 186: # first prints the message passed in the first argument, and then "done" ! 187: # or "fail" depending on the return status of the command passed in the ! 188: # second argument. If the command fails and the variable _do_die_on_error ! 189: # is set to "always" or the two argument form is used and _do_die_on_error ! 190: # is set to "message_only" _do will print an error message to ! 191: # $seq.out and exit. ! 192: ! 193: _do() ! 194: { ! 195: if [ $# -eq 1 ]; then ! 196: _cmd=$1 ! 197: elif [ $# -eq 2 ]; then ! 198: _note=$1 ! 199: _cmd=$2 ! 200: echo -n "$_note... " ! 201: else ! 202: echo "Usage: _do [note] cmd" 1>&2 ! 203: status=1; exit ! 204: fi ! 205: ! 206: (eval "echo '---' \"$_cmd\"") >>$here/$seq.full ! 207: (eval "$_cmd") >$tmp._out 2>&1; ret=$? ! 208: cat $tmp._out >>$here/$seq.full ! 209: if [ $# -eq 2 ]; then ! 210: if [ $ret -eq 0 ]; then ! 211: echo "done" ! 212: else ! 213: echo "fail" ! 214: fi ! 215: fi ! 216: if [ $ret -ne 0 ] \ ! 217: && [ "$_do_die_on_error" = "always" \ ! 218: -o \( $# -eq 2 -a "$_do_die_on_error" = "message_only" \) ] ! 219: then ! 220: [ $# -ne 2 ] && echo ! 221: eval "echo \"$_cmd\" failed \(returned $ret\): see $seq.full" ! 222: status=1; exit ! 223: fi ! 224: ! 225: return $ret ! 226: } ! 227: ! 228: # bail out, setting up .notrun file ! 229: # ! 230: _notrun() ! 231: { ! 232: echo "$*" >$seq.notrun ! 233: echo "$seq not run: $*" ! 234: status=0 ! 235: exit ! 236: } ! 237: ! 238: # just plain bail out ! 239: # ! 240: _fail() ! 241: { ! 242: echo "$*" | tee -a $here/$seq.full ! 243: echo "(see $seq.full for details)" ! 244: status=1 ! 245: exit 1 ! 246: } ! 247: ! 248: # tests whether $IMGFMT is one of the supported image formats for a test ! 249: # ! 250: _supported_fmt() ! 251: { ! 252: for f; do ! 253: if [ "$f" = "$IMGFMT" -o "$f" = "generic" ]; then ! 254: return ! 255: fi ! 256: done ! 257: ! 258: _notrun "not suitable for this image format: $IMGFMT" ! 259: } ! 260: ! 261: # tests whether $IMGPROTO is one of the supported image protocols for a test ! 262: # ! 263: _supported_proto() ! 264: { ! 265: for f; do ! 266: if [ "$f" = "$IMGPROTO" -o "$f" = "generic" ]; then ! 267: return ! 268: fi ! 269: done ! 270: ! 271: _notrun "not suitable for this image protocol: $IMGPROTO" ! 272: } ! 273: ! 274: # tests whether the host OS is one of the supported OSes for a test ! 275: # ! 276: _supported_os() ! 277: { ! 278: for h ! 279: do ! 280: if [ "$h" = "$HOSTOS" ] ! 281: then ! 282: return ! 283: fi ! 284: done ! 285: ! 286: _notrun "not suitable for this OS: $HOSTOS" ! 287: } ! 288: ! 289: # this test requires that a specified command (executable) exists ! 290: # ! 291: _require_command() ! 292: { ! 293: [ -x "$1" ] || _notrun "$1 utility required, skipped this test" ! 294: } ! 295: ! 296: _full_imgfmt_details() ! 297: { ! 298: if [ -n "$IMGOPTS" ]; then ! 299: echo "$IMGFMT ($IMGOPTS)" ! 300: else ! 301: echo "$IMGFMT" ! 302: fi ! 303: } ! 304: ! 305: _full_imgproto_details() ! 306: { ! 307: echo "$IMGPROTO" ! 308: } ! 309: ! 310: _full_platform_details() ! 311: { ! 312: os=`uname -s` ! 313: host=`hostname -s` ! 314: kernel=`uname -r` ! 315: platform=`uname -m` ! 316: echo "$os/$platform $host $kernel" ! 317: } ! 318: ! 319: _link_out_file() ! 320: { ! 321: if [ -z "$1" ]; then ! 322: echo Error must pass \$seq. ! 323: exit ! 324: fi ! 325: rm -f $1 ! 326: if [ "`uname`" == "IRIX64" ] || [ "`uname`" == "IRIX" ]; then ! 327: ln -s $1.irix $1 ! 328: elif [ "`uname`" == "Linux" ]; then ! 329: ln -s $1.linux $1 ! 330: else ! 331: echo Error test $seq does not run on the operating system: `uname` ! 332: exit ! 333: fi ! 334: } ! 335: ! 336: _die() ! 337: { ! 338: echo $@ ! 339: exit 1 ! 340: } ! 341: ! 342: # make sure this script returns success ! 343: /bin/true
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.