Spdk/test/iscsi_tgt/digests/digests.sh
Tomasz Kulasek a44c743417 test/iscsi_tgt: make sure iscsi devices are ready
We have no guaranty that iscsiadm -m session shows all required iscsi
devices at some point of time after login. It may cause that not all
devices are used in further tests (e.g. in fio).

This patch allows to wait for a certain number of sessions after login.

Change-Id: I868cb8f1235dd04d88572bc8518e97de99a2c5e6
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/458236
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2019-06-27 08:23:08 +00:00

110 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
testdir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $testdir/../../..)
source $rootdir/test/common/autotest_common.sh
source $rootdir/test/iscsi_tgt/common.sh
# $1 = "iso" - triggers isolation mode (setting up required environment).
# $2 = test type posix or vpp. defaults to posix.
iscsitestinit $1 $2
function node_login_fio_logout() {
for arg in "$@"; do
iscsiadm -m node -p $TARGET_IP:$ISCSI_PORT -o update -n node.conn[0].iscsi.$arg
done
iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT
waitforiscsidevices 1
$fio_py -p iscsi -i 512 -d 1 -t write -r 2
$fio_py -p iscsi -i 512 -d 1 -t read -r 2
iscsiadm -m node --logout -p $TARGET_IP:$ISCSI_PORT
waitforiscsidevices 0
}
function iscsi_header_digest_test() {
# Enable HeaderDigest to CRC32C
timing_enter HeaderDigest_enabled
node_login_fio_logout "HeaderDigest -v CRC32C"
timing_exit HeaderDigest_enabled
# Let iscsi target to decide its preference on
# HeaderDigest based on its capability.
timing_enter preferred
node_login_fio_logout "HeaderDigest -v CRC32C,None"
timing_exit preferred
}
function iscsi_header_data_digest_test() {
# Only enable HeaderDigest to CRC32C
timing_enter HeaderDigest_enabled
node_login_fio_logout "HeaderDigest -v CRC32C" "DataDigest -v None"
timing_exit HeaderDigest_enabled
# Only enable DataDigest to CRC32C
timing_enter DataDigest_enabled
node_login_fio_logout "HeaderDigest -v None" "DataDigest -v CRC32C"
timing_exit DataDigest_enabled
# Let iscsi target to decide its preference on both
# HeaderDigest and DataDigest based on its capability.
timing_enter both_preferred
node_login_fio_logout "HeaderDigest -v CRC32C,None" "DataDigest -v CRC32C,None"
timing_exit both_preferred
# Enable HeaderDigest and DataDigest both.
timing_enter both_enabled
node_login_fio_logout "HeaderDigest -v CRC32C" "DataDigest -v CRC32C"
timing_exit both_enabled
}
timing_enter digests
MALLOC_BDEV_SIZE=64
MALLOC_BLOCK_SIZE=512
rpc_py="$rootdir/scripts/rpc.py"
fio_py="$rootdir/scripts/fio.py"
timing_enter start_iscsi_tgt
$ISCSI_APP -m $ISCSI_TEST_CORE_MASK --wait-for-rpc &
pid=$!
echo "Process pid: $pid"
trap "killprocess $pid; iscsitestfini $1 $2; exit 1" SIGINT SIGTERM EXIT
waitforlisten $pid
$rpc_py set_iscsi_options -o 30 -a 16
$rpc_py start_subsystem_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt
$rpc_py add_portal_group $PORTAL_TAG $TARGET_IP:$ISCSI_PORT
$rpc_py add_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK
$rpc_py construct_malloc_bdev $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE
# "Malloc0:0" ==> use Malloc0 blockdev for LUN0
# "1:2" ==> map PortalGroup1 to InitiatorGroup2
# "64" ==> iSCSI queue depth 64
# "-d" ==> disable CHAP authentication
$rpc_py construct_target_node Target3 Target3_alias 'Malloc0:0' $PORTAL_TAG:$INITIATOR_TAG 64 -d
sleep 1
iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT
# iscsiadm installed by some Fedora releases loses DataDigest parameter.
# Check and avoid setting DataDigest.
DataDigestAbility=$(iscsiadm -m node -p $TARGET_IP:$ISCSI_PORT | grep DataDigest || true)
if [ "$DataDigestAbility"x = x ]; then
iscsi_header_digest_test
else
iscsi_header_data_digest_test
fi
trap - SIGINT SIGTERM EXIT
iscsicleanup
killprocess $pid
iscsitestfini $1 $2
timing_exit digests