Blame regress

Packit dd4ba5
#!/bin/bash
Packit dd4ba5
#
Packit dd4ba5
# Copyright 2015 PMC-Sierra, Inc.
Packit dd4ba5
#
Packit dd4ba5
# This program is free software; you can redistribute it and/or
Packit dd4ba5
# modify it under the terms of the GNU General Public License
Packit dd4ba5
# as published by the Free Software Foundation; either version 2
Packit dd4ba5
# of the License, or (at your option) any later version.
Packit dd4ba5
#
Packit dd4ba5
# This program is distributed in the hope that it will be useful,
Packit dd4ba5
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd4ba5
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd4ba5
# GNU General Public License for more details.
Packit dd4ba5
#
Packit dd4ba5
# You should have received a copy of the GNU General Public License
Packit dd4ba5
# along with this program; if not, write to the Free Software
Packit dd4ba5
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Packit dd4ba5
# MA  02110-1301, USA.
Packit dd4ba5
#
Packit dd4ba5
#   Author: Stephen Bates <stephen.bates@pmcs.com>
Packit dd4ba5
#
Packit dd4ba5
#   Description:
Packit dd4ba5
#     Regression test-suite for the NVM Express CLI.
Packit dd4ba5
#
Packit dd4ba5
Packit dd4ba5
DEVICE=
Packit dd4ba5
WRITE=false
Packit dd4ba5
LIST=false
Packit dd4ba5
Packit dd4ba5
RAND_BASE=temp.rand
Packit dd4ba5
RAND_WFILE=${RAND_BASE}.write
Packit dd4ba5
RAND_RFILE=${RAND_BASE}.read
Packit dd4ba5
RAND_SIZE=4k
Packit dd4ba5
Packit dd4ba5
green=$(tput bold)$(tput setaf 2)
Packit dd4ba5
red=$(tput bold)$(tput setaf 1)
Packit dd4ba5
rst=$(tput sgr0)
Packit dd4ba5
Packit dd4ba5
while getopts ":d:wl" opt; do
Packit dd4ba5
  case $opt in
Packit dd4ba5
    d)
Packit dd4ba5
      DEVICE=${OPTARG}
Packit dd4ba5
      ;;
Packit dd4ba5
    w)
Packit dd4ba5
      echo "WARNING: Write mode enabled, this might trash your drive!"
Packit dd4ba5
      WRITE=true
Packit dd4ba5
      ;;
Packit dd4ba5
    l)
Packit dd4ba5
      LIST=true
Packit dd4ba5
      ;;
Packit dd4ba5
    \?)
Packit dd4ba5
      echo "Invalid option: -$OPTARG" >&2
Packit dd4ba5
      exit 1
Packit dd4ba5
      ;;
Packit dd4ba5
    :)
Packit dd4ba5
      echo "Option -$OPTARG requires an argument." >&2
Packit dd4ba5
      exit 1
Packit dd4ba5
      ;;
Packit dd4ba5
  esac
Packit dd4ba5
done
Packit dd4ba5
Packit dd4ba5
if [ -z "$DEVICE" ]; then
Packit dd4ba5
     echo "regress: You must specify a NVMe device using -d"
Packit dd4ba5
     exit 1
Packit dd4ba5
fi
Packit dd4ba5
Packit dd4ba5
function print_pass_fail {
Packit dd4ba5
    $* > /dev/null 2>&1
Packit dd4ba5
    if (( $? )); then
Packit dd4ba5
        echo ${red}"FAILED!"${rst}
Packit dd4ba5
        echo "Failed running command: "
Packit dd4ba5
        echo  "   $*"
Packit dd4ba5
        exit 1
Packit dd4ba5
    else
Packit dd4ba5
        echo ${green}"PASSED!"${rst}
Packit dd4ba5
    fi
Packit dd4ba5
}
Packit dd4ba5
Packit dd4ba5
function run_test {
Packit dd4ba5
    LINE="$*"
Packit dd4ba5
    printf  "  %-3s   %-68s : " "RUN" "${LINE::67}"
Packit dd4ba5
    print_pass_fail $*
Packit dd4ba5
}
Packit dd4ba5
Packit dd4ba5
make clean > /dev/null || exit -1
Packit dd4ba5
make install > /dev/null || exit -1
Packit dd4ba5
Packit dd4ba5
if $LIST ; then
Packit dd4ba5
    run_test nvme list
Packit dd4ba5
fi
Packit dd4ba5
run_test nvme id-ctrl ${DEVICE}
Packit dd4ba5
run_test nvme id-ns -raw-binary ${DEVICE}
Packit dd4ba5
run_test nvme list-ns -n 1 ${DEVICE}
Packit dd4ba5
run_test nvme get-ns-id ${DEVICE}
Packit dd4ba5
run_test nvme get-log ${DEVICE}  --log-id=2 --log-len=512
Packit dd4ba5
run_test nvme fw-log ${DEVICE}
Packit dd4ba5
run_test nvme fw-log ${DEVICE} -b
Packit dd4ba5
run_test nvme smart-log ${DEVICE}
Packit dd4ba5
run_test nvme error-log ${DEVICE}
Packit dd4ba5
run_test nvme get-feature ${DEVICE} -f 7
Packit dd4ba5
run_test nvme flush ${DEVICE}
Packit dd4ba5
Packit dd4ba5
if $WRITE ; then
Packit dd4ba5
    run_test dd if=/dev/urandom of=${RAND_WFILE} bs=${RAND_SIZE} count=1
Packit dd4ba5
    run_test nvme write ${DEVICE} --start-block=0 --block-count=0 --data-size=${RAND_SIZE} --data ${RAND_WFILE}
Packit dd4ba5
fi
Packit dd4ba5
run_test nvme read ${DEVICE} --start-block=0 --block-count=0 --data-size=${RAND_SIZE} --data ${RAND_RFILE} --latency
Packit dd4ba5
if $WRITE ; then
Packit dd4ba5
    run_test diff ${RAND_RFILE} ${RAND_WFILE}
Packit dd4ba5
    rm ${RAND_WFILE} > /dev/null
Packit dd4ba5
fi
Packit dd4ba5
rm ${RAND_RFILE} > /dev/null