Spdk/test/blobstore/blobstore.sh

42 lines
1.1 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
SYSTEM=`uname -s`
if [ $SYSTEM = "FreeBSD" ] ; then
echo "blobstore.sh cannot run on FreeBSD currently."
exit 0
fi
set -xe
testdir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $testdir/../..)
source $rootdir/scripts/autotest_common.sh
timing_enter blobstore
set -e
# Nvme0 target configuration
$rootdir/scripts/gen_nvme.sh > $testdir/blobcli.conf
test: add 'match' util and use it with blobstore Will follow this up with a doc change but want to make sure we're all good with it first. This is meant to not only beef up blobstore testing but provide the 'match' utilitiy for all test cases where we are currently calling an executable and either counting only on a return code to determine success or failure or worse yet we're just running it and if it doesn't explode we assume its a pass. The 'match' util was borrowed from the PMDK folks after first adding the "ignore" feature upstream to make it easier to use in SPDK. It works like this: When the developer checks in a test they create and check in the output of the test with two different file extensions: .ignore: should include a string per line for output lines that we want to totally ignore typically because they're platform specific so the output could be different from machine to machine. In this case I'm ignoring all output lines with 'DPDK' or 'EAL' or '...' in them. The first few are obvious, the last is because the test tool will print a varrying number of these as progress indicators. .match: this is a copy of the output that the developer 'fixes' up by replacing platform specific output strings with replacable tokens as described in the 'match' help. This is where you'd want to match an entire line minus something like a CPU count or free block count or something. The 'ignore' feature was added simply so we wouldn't have to edit every single line of an output file that had DPDK or EAL in it. Then you modify the test script to save the output and smply run the match util providing the name of the match file and if it fails to match the actual output with the saved output that's been token'ized the script will error. The obvious advantage here is that now we can confirm all of the output from a test executable is as we expect. Change-Id: I701d36ee83d37b6193e16ed3171e114f814e5eb3 Signed-off-by: paul luse <paul.e.luse@intel.com> Reviewed-on: https://review.gerrithub.io/397027 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
2018-01-29 22:33:02 +00:00
# generate random data file for import/export diff
dd if=/dev/urandom of=$testdir/test.pattern bs=1M count=1
cd $testdir
$rootdir/examples/blob/cli/blobcli -c $testdir/blobcli.conf -b Nvme0n1 -T $testdir/test.bs > $testdir/btest.out
cd -
# the tool leaves some trailing whitespaces that we need to strip out
sed -i 's/[[:space:]]*$//' $testdir/btest.out
# the test script will import the test pattern generated by dd and then export
# it to a file so we can compare and confirm basic read and write
$rootdir/test/app/match/match -v $testdir/btest.out.match
diff $testdir/test.pattern $testdir/test.pattern.blob
test: add 'match' util and use it with blobstore Will follow this up with a doc change but want to make sure we're all good with it first. This is meant to not only beef up blobstore testing but provide the 'match' utilitiy for all test cases where we are currently calling an executable and either counting only on a return code to determine success or failure or worse yet we're just running it and if it doesn't explode we assume its a pass. The 'match' util was borrowed from the PMDK folks after first adding the "ignore" feature upstream to make it easier to use in SPDK. It works like this: When the developer checks in a test they create and check in the output of the test with two different file extensions: .ignore: should include a string per line for output lines that we want to totally ignore typically because they're platform specific so the output could be different from machine to machine. In this case I'm ignoring all output lines with 'DPDK' or 'EAL' or '...' in them. The first few are obvious, the last is because the test tool will print a varrying number of these as progress indicators. .match: this is a copy of the output that the developer 'fixes' up by replacing platform specific output strings with replacable tokens as described in the 'match' help. This is where you'd want to match an entire line minus something like a CPU count or free block count or something. The 'ignore' feature was added simply so we wouldn't have to edit every single line of an output file that had DPDK or EAL in it. Then you modify the test script to save the output and smply run the match util providing the name of the match file and if it fails to match the actual output with the saved output that's been token'ized the script will error. The obvious advantage here is that now we can confirm all of the output from a test executable is as we expect. Change-Id: I701d36ee83d37b6193e16ed3171e114f814e5eb3 Signed-off-by: paul luse <paul.e.luse@intel.com> Reviewed-on: https://review.gerrithub.io/397027 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
2018-01-29 22:33:02 +00:00
rm -rf $testdir/btest.out
rm -rf $testdir/blobcli.conf
test: add 'match' util and use it with blobstore Will follow this up with a doc change but want to make sure we're all good with it first. This is meant to not only beef up blobstore testing but provide the 'match' utilitiy for all test cases where we are currently calling an executable and either counting only on a return code to determine success or failure or worse yet we're just running it and if it doesn't explode we assume its a pass. The 'match' util was borrowed from the PMDK folks after first adding the "ignore" feature upstream to make it easier to use in SPDK. It works like this: When the developer checks in a test they create and check in the output of the test with two different file extensions: .ignore: should include a string per line for output lines that we want to totally ignore typically because they're platform specific so the output could be different from machine to machine. In this case I'm ignoring all output lines with 'DPDK' or 'EAL' or '...' in them. The first few are obvious, the last is because the test tool will print a varrying number of these as progress indicators. .match: this is a copy of the output that the developer 'fixes' up by replacing platform specific output strings with replacable tokens as described in the 'match' help. This is where you'd want to match an entire line minus something like a CPU count or free block count or something. The 'ignore' feature was added simply so we wouldn't have to edit every single line of an output file that had DPDK or EAL in it. Then you modify the test script to save the output and smply run the match util providing the name of the match file and if it fails to match the actual output with the saved output that's been token'ized the script will error. The obvious advantage here is that now we can confirm all of the output from a test executable is as we expect. Change-Id: I701d36ee83d37b6193e16ed3171e114f814e5eb3 Signed-off-by: paul luse <paul.e.luse@intel.com> Reviewed-on: https://review.gerrithub.io/397027 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
2018-01-29 22:33:02 +00:00
rm -rf $testdir/*.blob
rm -rf $testdir/test.pattern
timing_exit blobstore