Mercurial > illumos > illumos-gate
view usr/src/cmd/mdb/test/mtest.sh @ 14143:42d090a37218
3089 want ::typedef
3690 mdb on x86 should be able to print alternate register names
3688 Want mdb -e
3094 libctf should support removing a dynamic type
3095 libctf does not validate arrays correctly
3096 libctf does not validate function types correctly
3689 Want an mdb test suite driver
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Eric Schrock <eric.schrock@delphix.com>
Approved by: Gordon Ross <gwr@nexenta.com>
author | Robert Mustacchi <rm@joyent.com> |
---|---|
date | Wed, 03 Apr 2013 15:25:37 -0700 |
parents | |
children |
line wrap: on
line source
#!/bin/bash # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2012 (c), Joyent, Inc. # # # mdb test driver # unalias -a shopt -s xpg_echo #set -o xtrace mt_arg0=$(basename $0) mt_ksh="/usr/bin/ksh" mt_mdb="/usr/bin/mdb" mt_outdir= mt_keep= mt_all= mt_tests= mt_tnum=0 mt_tfail=0 mt_tsuc=0 function usage { local msg="$*" [[ -z "$msg" ]] || echo "$msg" 2>&1 cat <<USAGE >&2 Usage: $mt_arg0 [ -o dir ] [ -k ] [ -m executable ] [ -a | test ... ] -o dir Sets 'dir' as the output directory -a Runs all tests, ignores tests passed in -k Keep output from all tests, not just failures -m mdb binary to test USAGE exit 2 } function fatal { local msg="$*" [[ -z "$msg" ]] && msg="failed" echo "$mt_arg0: $msg" >&2 exit 1 } function setup_outdir { mt_outdir="$mt_outdir/$mt_arg0.$$" mkdir -p $mt_outdir || fatal "failed to make output dir $mt_outdir" } function run_single { local name=$1 local expect base ext exe command odir res reason input [[ -z "$name" ]] && fail "missing test to run" base=${name##*/} ext=${base##*.} expect=${base%%.*} odir="$mt_outdir/current" [[ -z "$ext" ]] && fatal "found test without ext: $name" [[ -z "$expect" ]] && fatal "found test without prefix: $name" case "$ext" in "ksh") command="$mt_ksh $name" ;; "mdb") command="$mt_mdb" input="$name" ;; "out") # # This is the file format for checking output against. # return 0 ;; *) echo "skipping test $name (unknown extensino)" return 0 ;; esac echo "Executing test $name ... \c" mkdir -p "$odir" >/dev/null || fatal "can't make output directory" if [[ -z "$input" ]]; then MDB=$mt_mdb $command > "$odir/stdout" 2>"$odir/stderr" res=$? else MDB=$mt_mdb $command < $input > "$odir/stdout" 2>"$odir/stderr" res=$? fi if [[ -f "$name.out" ]] && ! diff "$name.out" "$odir/stdout" >/dev/null; then cp $name.out $odir/$base.out reason="stdout mismatch" elif [[ "$expect" == "tst" && $res -ne 0 ]]; then reason="test exited $res, not zero" elif [[ "$expect" == "err" && $res -eq 0 ]]; then reason="test exited $res, not non-zero" fi if [[ -n "$reason" ]]; then echo "$reason" ((mt_tfail++)) mv "$odir" "$mt_outdir/failure.$mt_tfail" || fatal \ "failed to move test output directory" cp "$name" "$mt_outdir/failure.$mt_tfail/test" || fatal \ "failed to copy test into output directory" else echo "passed" ((mt_tsuc++)) mv "$odir" "$mt_outdir/success.$mt_tsuc" || fatal \ "failed to move test directory" fi ((mt_tnum++)) } function run_all { local tests t tests=$(find . -type f -name '[tst,err]*.*.[ksh,mdb]*') for t in $tests; do run_single $t done } function welcome { cat <<WELCOME Starting tests... mtest target: $mt_mdb output directory: $mt_outdir WELCOME } function cleanup { [[ -n "$mt_keep" ]] && return rm -rf "$mt_outdir"/success.* || fatal \ "failed to remove successful test cases" if [[ $mt_tfail -eq 0 ]]; then rmdir "$mt_outdir" || fatal \ "failed to remove test output directory" fi } function goodbye { cat <<EOF ------------- Results ------------- Tests passed: $mt_tsuc Tests failed: $mt_tfail Tests ran: $mt_tnum EOF if [[ $mt_tfail -eq 0 ]]; then echo "Congrats, mdb isn't completely broken, the tests pass". else echo "Some tests failed, you have some work to do." fi } while getopts ":ahko:m:" c $@; do case "$c" in a) mt_all="y" ;; k) mt_keep="y" ;; m) mt_mdb="$OPTARG" ;; o) mt_outdir="$OPTARG" ;; h) usage ;; :) usage "option requires an argument -- $OPTARG" ;; *) usage "invalid option -- $OPTARG" ;; esac done shift $((OPTIND-1)) [[ -z "$mt_all" && $# == 0 ]] && usage "no tests to run" [[ -x "$mt_mdb" ]] || fatal "unable to execute mdb binary: $mt_mdb" [[ -z "$mt_outdir" ]] && mt_outdir=/var/tmp setup_outdir welcome if [[ ! -z "$mt_all" ]]; then run_all else for t in $@; do [[ -f $t ]] || fatal "cannot find test $t" run_single $t done fi goodbye cleanup # # Exit 1 if we have tests that return non-zero # [[ $mt_tfai -eq 0 ]]