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>
The blobcli tool has several options that are listed by using the -h command however the three operating modes are covered in more detail here:
Command Mode
This is the default and will just execute one command at a time. It's simple but the downside is that if you are going to interact quite a bit with the blobstore, the startup time for the application can be cumbersome.
Shell Mode
You startup shell mode by using the -S command. At that point you will get a "blob>" prompt where you can enter any of the commands, including -h, to execute them. You can stil enter just one at a time but the initial startup time for the application will not get in the way between commands anymore so it is much more usable.
Script (aka test) Mode
In script mode you just supply one command with a filename when you start
the cli, for example blobcli -T test.bs
will feed the tool the file
called test.bs which contains a series of commands that will all run
automatically and, like shell mode, will only initialize one time so is
quick.
The script file format (example) is shown below. Comments are allowed and each line should contain one valid command (and its parameters) only. In order to operate on blobs via their ID value, use the token $Bn where n represents the instance of the blob created in the script.
For example, the line -s $B0
will operate on the blobid of the first
blob created in the script (0 index based). $B2
represents the third
blob created in the script.
If you start test mode with the additional "ignore" option, any invalid script lines will simply be skipped, otherwise the tool will exit if it runs into an invalid line (ie './blobcli -T test.bs ignore`).
Sample test/bs file:
# this is a comment
-i
-s bs
-l bdevs
-n 1
-s bs
-s $B0
-n 2
-s $B1
-m $B0 Makefile
-d $B0 M.blob
-f $B1 65
-d $B1 65.blob
-s bs
-x $B0 b0key boval
-x $B1 b1key b1val
-r $B0 b0key
-s $B0
-s $B1
-s bs