0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# This file and its contents are supplied under the terms of the
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0.
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# You may only use this file in accordance with the terms of version
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# 1.0 of the CDDL.
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# source. A copy of the CDDL is also available via the Internet at
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# Copyright 2012 (c), Joyent, Inc.
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# mdb test driver
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi#set -o xtrace
0a47c91c895e274dd0990009919e30e984364a8bRobert MustacchiUsage: $mt_arg0 [ -o dir ] [ -k ] [ -m executable ] [ -a | test ... ]
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi -o dir Sets 'dir' as the output directory
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi -a Runs all tests, ignores tests passed in
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi -k Keep output from all tests, not just failures
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi -m mdb binary to test
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi mkdir -p $mt_outdir || fatal "failed to make output dir $mt_outdir"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi local expect base ext exe command odir res reason input
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi [[ -z "$name" ]] && fail "missing test to run"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi [[ -z "$ext" ]] && fatal "found test without ext: $name"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi [[ -z "$expect" ]] && fatal "found test without prefix: $name"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi # This is the file format for checking output against.
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi echo "skipping test $name (unknown extensino)"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi mkdir -p "$odir" >/dev/null || fatal "can't make output directory"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi MDB=$mt_mdb $command > "$odir/stdout" 2>"$odir/stderr"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi MDB=$mt_mdb $command < $input > "$odir/stdout" 2>"$odir/stderr"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi if [[ -f "$name.out" ]] && ! diff "$name.out" "$odir/stdout" >/dev/null; then
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi elif [[ "$expect" == "tst" && $res -ne 0 ]]; then
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi elif [[ "$expect" == "err" && $res -eq 0 ]]; then
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi mv "$odir" "$mt_outdir/failure.$mt_tfail" || fatal \
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi cp "$name" "$mt_outdir/failure.$mt_tfail/test" || fatal \
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi "failed to copy test into output directory"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi mv "$odir" "$mt_outdir/success.$mt_tsuc" || fatal \
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi tests=$(find . -type f -name '[tst,err]*.*.[ksh,mdb]*')
0a47c91c895e274dd0990009919e30e984364a8bRobert MustacchiStarting tests...
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchimtest target: $mt_mdb
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchioutput directory: $mt_outdir
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi if [[ $mt_tfail -eq 0 ]]; then
0a47c91c895e274dd0990009919e30e984364a8bRobert MustacchiTests passed: $mt_tsuc
0a47c91c895e274dd0990009919e30e984364a8bRobert MustacchiTests failed: $mt_tfail
0a47c91c895e274dd0990009919e30e984364a8bRobert MustacchiTests ran: $mt_tnum
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi if [[ $mt_tfail -eq 0 ]]; then
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi echo "Congrats, mdb isn't completely broken, the tests pass".
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi echo "Some tests failed, you have some work to do."
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchiwhile getopts ":ahko:m:" c $@; do
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi usage "option requires an argument -- $OPTARG"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi[[ -z "$mt_all" && $# == 0 ]] && usage "no tests to run"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi[[ -x "$mt_mdb" ]] || fatal "unable to execute mdb binary: $mt_mdb"
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchiif [[ ! -z "$mt_all" ]]; then
0a47c91c895e274dd0990009919e30e984364a8bRobert Mustacchi# Exit 1 if we have tests that return non-zero