From b8a3cc7660c58be952ee05671feb81a8e2353774 Mon Sep 17 00:00:00 2001 From: Rafal Stefanowski Date: Tue, 1 Oct 2019 09:57:28 +0200 Subject: [PATCH] Add promotion policy smoke tests Signed-off-by: Rafal Stefanowski --- test/smoke_test/cas_functions | 128 ++++++++++++++++++++++++++++++++++ test/smoke_test/cas_lib | 18 ++--- test/smoke_test/cas_options | 38 +++++++++- test/smoke_test/promotion/01 | 118 +++++++++++++++++++++++++++++++ 4 files changed, 292 insertions(+), 10 deletions(-) create mode 100755 test/smoke_test/promotion/01 diff --git a/test/smoke_test/cas_functions b/test/smoke_test/cas_functions index 6d9cd76..9ec8b5e 100644 --- a/test/smoke_test/cas_functions +++ b/test/smoke_test/cas_functions @@ -531,6 +531,55 @@ get_cleaning_policy() { clear_options } +set_promotion_policy() { + check_options ${FUNCNAME[0]} + + local COMMAND="$CAS --set-param --name promotion --cache-id $CACHE_ID_OPTION \ + --policy $PROMO_POL_OPTION" + + run_cmd $COMMAND + clear_options +} + +check_promotion_policy() { + check_options ${FUNCNAME[0]} + + local COMMAND="$CAS --get-param --name promotion --cache-id $CACHE_ID_OPTION \ + --output-format csv" + + echo -n "$(date +%Y-%m-%d_%H:%M:%S) " + echo -n "Checking if promotion policy type set to '$PROMO_POL_OPTION'. " + + PROMO_POL_VALUE=$($COMMAND | grep -i type | cut -d ',' -f2) + + if [ -n "$NEGATIVE_TEST_OPTION" ] && [ "$NEGATIVE_TEST_OPTION" -ne 0 ] ; then + echo -n "(negative test) " + if [[ "$PROMO_POL_OPTION" != "$PROMO_POL_VALUE" ]] ; then + success + else + error + echo "Promotion policy type set to inadmissible value '$PROMO_POL_VALUE'!" + if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then + end_test 1 + fi + return 1 + fi + else + if [[ "$PROMO_POL_OPTION" == "$PROMO_POL_VALUE" ]] ; then + success + else + error + echo "Promotion policy type do not match!" + if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then + end_test 1 + fi + return 1 + fi + fi + + clear_options +} + set_flush_params() { check_options ${FUNCNAME[0]} @@ -563,6 +612,81 @@ get_flush_params() { clear_options } +set_promotion_params() { + check_options ${FUNCNAME[0]} + + local COMMAND="$CAS --set-param --name $PROMO_POL_NS_OPTION --cache-id $CACHE_ID_OPTION" + + if [ -n "$THRESHOLD_OPTION" ] ; then + COMMAND="$COMMAND --threshold $THRESHOLD_OPTION" + fi + if [ -n "$TRIGGER_OPTION" ] ; then + COMMAND="$COMMAND --trigger $TRIGGER_OPTION" + fi + + run_cmd $COMMAND + clear_options +} + +check_promotion_params() { + check_options ${FUNCNAME[0]} + + local COMMAND="$CAS --get-param --name $PROMO_POL_NS_OPTION \ + --cache-id $CACHE_ID_OPTION --output-format csv" + + echo -n "$(date +%Y-%m-%d_%H:%M:%S) " + echo -n "Checking threshold and/or trigger values. " + if [ -z "$THRESHOLD_OPTION" ] && [ -z "$TRIGGER_OPTION" ] ; then + error + echo "No defined promotion policy option to check! " + if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then + end_test 1 + fi + return 1 + fi + + if [ -n "$THRESHOLD_OPTION" ] ; then + echo -n "THRESHOLD value = '$THRESHOLD_OPTION' " + THRESHOLD_VALUE=$($COMMAND | grep -i threshold | cut -d ',' -f2) + if [ "$THRESHOLD_OPTION" -ne "$THRESHOLD_VALUE" ] ; then + THRESHOLD_VALUE_ERROR="Threshold value do not match!" + fi + fi + if [ -n "$TRIGGER_OPTION" ] ; then + echo -n "TRIGGER value = '$TRIGGER_OPTION' " + TRIGGER_VALUE=$($COMMAND | grep -i trigger | cut -d ',' -f2) + if [ "$TRIGGER_OPTION" -ne "$TRIGGER_VALUE" ] ; then + TRIGGER_VALUE_ERROR="Trigger value do not match!" + fi + fi + if [ -n "$NEGATIVE_TEST_OPTION" ] && [ "$NEGATIVE_TEST_OPTION" -ne 0 ] ; then + echo -n "(negative test) " + if [ -n "$THRESHOLD_VALUE_ERROR" ] || [ -n "$TRIGGER_VALUE_ERROR" ] ; then + success + else + error + echo "Given values match!" + if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then + end_test 1 + fi + return 1 + fi + else + if [ -z "$THRESHOLD_VALUE_ERROR" ] && [ -z "$TRIGGER_VALUE_ERROR" ] ; then + success + else + error + echo -e "$THRESHOLD_VALUE_ERROR\n$TRIGGER_VALUE_ERROR" + if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then + end_test 1 + fi + return 1 + fi + fi + + clear_options +} + dirty_stop() { check_options ${FUNCNAME[0]} local L_CACHE_DEVICE_OPTION = $CACHE_DEVICE_OPTION @@ -603,6 +727,10 @@ export -f set_flush_params export -f get_flush_params export -f set_cleaning_policy export -f get_cleaning_policy +export -f set_promotion_params +export -f check_promotion_params +export -f set_promotion_policy +export -f check_promotion_policy export -f dirty_stop export -f check_no_cache_running diff --git a/test/smoke_test/cas_lib b/test/smoke_test/cas_lib index eefc48d..73b3178 100644 --- a/test/smoke_test/cas_lib +++ b/test/smoke_test/cas_lib @@ -201,7 +201,7 @@ warning() { # code against NEGATIVE_TEST_OPTION. If the NEGATIVE_TEST_OPTION is set, then # we assume the command should fail - otherwise the command should succeed. # If the output is correct, the command is printed and the test continues; -# if not, we print an error message and end the test immiedately. +# if not, we print an error message and end the test immediately. run_cmd() { export RUN_CMD_OUTPUT="" local L_RUN_CMD_START=$SECONDS @@ -214,7 +214,7 @@ run_cmd() { export RUN_CMD_OUTPUT="${OUTPUT}" export RUN_CMD_TIME=$(( $SECONDS - $L_RUN_CMD_START )) if [ -z "$SILENT_COMMAND_OPTION" ] ; then - if [ -n "$NEGATIVE_TEST_OPTION" ] ; then + if [ -n "$NEGATIVE_TEST_OPTION" ] && [ "$NEGATIVE_TEST_OPTION" -ne 0 ] ; then echo -n "(negative test) " if [ $STATUS -ne 0 ] ; then success @@ -222,10 +222,10 @@ run_cmd() { error echo "--- Command output:" echo "$OUTPUT" - if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then - end_test 1 - fi - return 1 + if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then + end_test 1 + fi + return 1 fi else if [ $STATUS -eq 0 ] ; then @@ -235,9 +235,9 @@ run_cmd() { echo "--- Command output:" echo "$OUTPUT" if [ -z $DONT_FAIL_ON_ERROR_OPTION ]; then - end_test 1 - fi - return 1 + end_test 1 + fi + return 1 fi fi fi diff --git a/test/smoke_test/cas_options b/test/smoke_test/cas_options index 42c133e..f4888f7 100644 --- a/test/smoke_test/cas_options +++ b/test/smoke_test/cas_options @@ -17,6 +17,7 @@ export ALL_OPTIONS=" CACHE_ID_OPTION CORE_ID_OPTION MOUNTPOINT_ID_OPTION TARGET_DEVICE_OPTION PARTITION_IDS_OPTION PARTITION_SIZE_OPTION PARTITION_ID_OPTION PARTITIONS_AMOUNT_OPTION CLEAN_POL_NS_OPTION WAKE_UP_OPTION STALE_TIME_OPTION FLUSH_BUFFERS_OPTION ACTIVITY_THRESH_OPTION + PROMO_POL_NS_OPTION PROMO_POL_VALUE THRESHOLD_OPTION TRIGGER_OPTION THRESHOLD_VALUE TRIGGER_VALUE THRESHOLD_VALUE_ERROR TRIGGER_VALUE_ERROR TARGET_DEVICE_OPTION FILESYSTEM_TYPE IO_CLASS_ID IO_CLASS_PRIORITY IO_CLASS_SIZE_MIN IO_CLASS_SIZE_MAX IO_CLASS_NAME IO_CLASS_CACHE_MODE FORMAT_NVME_REQUIRED_OPTIONS CHECK_IS_NVME_ATOMIC TURN_OFF_NVME_DEVICE TURN_ON_NVME_DEVICE @@ -24,6 +25,7 @@ export ALL_OPTIONS=" STAT_UNIT_OPTION STAT_NAME_OPTION STORE_CONFIG_OPTION CLEAN_POL_OPTION + PROMO_POL_OPTION KERNEL_VER_OPTION KERNEL_MAJOR_OPTION FIO_MAJOR_OPTION FIO_MINOR_OPTION " @@ -42,8 +44,12 @@ export FLUSH_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION" export FLUSH_CORE_REQUIRED_OPTIONS="CACHE_ID_OPTION CORE_ID_OPTION" export SET_CLEANING_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION CLEAN_POL_OPTION" export GET_CLEANING_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION" +export SET_PROMOTION_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_OPTION" +export CHECK_PROMOTION_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_OPTION" export SET_FLUSH_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION CLEAN_POL_NS_OPTION" export GET_FLUSH_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION CLEAN_POL_NS_OPTION" +export SET_PROMOTION_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_NS_OPTION" +export CHECK_PROMOTION_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_NS_OPTION" export FORMAT_NVME_REQUIRED_OPTIONS="NVME_FORMAT_MODE_OPTION DEVICE_OPTION" export CHECK_IS_NVME_ATOMIC_REQUIRED_OPTIONS="DEVICE_OPTION" @@ -298,11 +304,41 @@ FLUSH_BUFFERS_OPTION="" ACTIVITY_THRESH_OPTION="" ############################################################ -# SET_FLUSH_PARAMS # +# GET_FLUSH_PARAMS # ############################################################ DEVICE_ID_OPTION="" CLEAN_POLICY_NS_OPTION="" +############################################################ +# SET_PROMOTION_POLICY # +############################################################ +DEVICE_ID_OPTION="" +PROMO_POL_OPTION="" + +############################################################ +# CHECK_PROMOTION_POLICY # +############################################################ +DEVICE_ID_OPTION="" +PROMO_POL_OPTION="" + +############################################################ +# SET_PROMOTION_PARAMS # +############################################################ +DEVICE_ID_OPTION="" +PROMO_POL_NS_OPTION="" +#Optional +THRESHOLD_OPTION="" +TRIGGER_OPTION="" + +############################################################ +# CHECK_PROMOTION_PARAMS # +############################################################ +DEVICE_ID_OPTION="" +PROMO_POL_NS_OPTION="" +#Optional +THRESHOLD_OPTION="" +TRIGGER_OPTION="" + ############################################################ # CHECK KERNEL VER # ############################################################ diff --git a/test/smoke_test/promotion/01 b/test/smoke_test/promotion/01 new file mode 100755 index 0000000..057ed92 --- /dev/null +++ b/test/smoke_test/promotion/01 @@ -0,0 +1,118 @@ +#!/bin/bash +# +# Copyright(c) 2012-2019 Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause-Clear +# + +#DESCRIPTION --set-param and --get-param option fuzzing. + +# This tests checks whether CLI accepts correct data and rejects incorrect +# data for different promotion policy options. It tries to invoke CLI using different +# combinations of required options and checks the return code. + +# Run this test if tests are running in 'nightly' mode. +# USE_IN_NIGHTLY + + +TESTS_DIR="$(dirname $0)/../" +. $TESTS_DIR/cas_lib +start_test $* + +# remove all partitions from cache and core +TARGET_DEVICE_OPTION="$CACHE_DEVICE" remove_partitions +TARGET_DEVICE_OPTION="$CORE_DEVICE" remove_partitions + +# Create 1 primary partition on CACHE_DEVICE of 2000M size +TARGET_DEVICE_OPTION="$CACHE_DEVICE" PARTITION_SIZE_OPTION="2000M" PARTITION_IDS_OPTION="1" make_primary_partitions + +# create cache in WT mode and try to change promotion parameters +CACHE_MODE_OPTION="wt" CACHE_ID_OPTION="1" CACHE_DEVICE_OPTION="${CACHE_DEVICE}1" CACHE_FORCE_OPTION="1" start_cache + +# changing promotion parameters should not be prohibited while core is added to cache +CACHE_ID_OPTION="1" CORE_DEVICE_OPTION="$CORE_DEVICE" add_core +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" set_promotion_params + +printf "\n============Running negative tests============\n" + +# test for inadmissible promotion policy type +CACHE_ID_OPTION="1" PROMO_POL_OPTION="olweys" NEGATIVE_TEST_OPTION="1" set_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" check_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="promotion-always" NEGATIVE_TEST_OPTION="1" set_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" check_promotion_policy + +# test for negative numeric options and check if they didn't overwrite previously set values +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="-1" NEGATIVE_TEST_OPTION="1" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" check_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" TRIGGER_OPTION="-1" NEGATIVE_TEST_OPTION="1" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" check_promotion_params + +# test for 0 and 1 threshold +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="0" NEGATIVE_TEST_OPTION="1" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" check_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1" NEGATIVE_TEST_OPTION="1" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" check_promotion_params + +#test for out of range options +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1385" NEGATIVE_TEST_OPTION="1" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" check_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" TRIGGER_OPTION="154" NEGATIVE_TEST_OPTION="1" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="50" TRIGGER_OPTION="15" check_promotion_params + +printf "\n============Running positive tests============\n" + +# positive test +# test various policy names +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" set_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" check_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="nhit" set_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="nhit" check_promotion_policy + +# test various parameters +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="2" TRIGGER_OPTION="0" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="2" TRIGGER_OPTION="0" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="2" TRIGGER_OPTION="100" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="2" TRIGGER_OPTION="100" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="2" TRIGGER_OPTION="54" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="2" TRIGGER_OPTION="54" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1000" TRIGGER_OPTION="0" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1000" TRIGGER_OPTION="0" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1000" TRIGGER_OPTION="100" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1000" TRIGGER_OPTION="100" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1000" TRIGGER_OPTION="54" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="1000" TRIGGER_OPTION="54" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="638" TRIGGER_OPTION="0" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="638" TRIGGER_OPTION="0" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="638" TRIGGER_OPTION="100" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="638" TRIGGER_OPTION="100" check_promotion_params + +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="638" TRIGGER_OPTION="54" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="638" TRIGGER_OPTION="54" check_promotion_params + +printf "\n============Running parameters constancy tests============\n" + +# test for setting promotion-nhit parameters while running on promotion type 'always' +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" set_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" check_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="451" TRIGGER_OPTION="63" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_OPTION="always" check_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="451" TRIGGER_OPTION="63" check_promotion_params + +# test if policy type and promotion-nhit values preserve after stopping and loading previous cache metadata +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="812" TRIGGER_OPTION="49" set_promotion_params +CACHE_ID_OPTION="1" PROMO_POL_OPTION="nhit" set_promotion_policy +CACHE_ID_OPTION="1" stop_cache +CACHE_MODE_OPTION="wt" CACHE_ID_OPTION="1" CACHE_DEVICE_OPTION="${CACHE_DEVICE}1" CACHE_FORCE_OPTION="1" CACHE_LOAD_METADATA_OPTION="1" start_cache +CACHE_ID_OPTION="1" PROMO_POL_OPTION="nhit" check_promotion_policy +CACHE_ID_OPTION="1" PROMO_POL_NS_OPTION="promotion-nhit" THRESHOLD_OPTION="812" TRIGGER_OPTION="49" check_promotion_params + +# stop cache now +CACHE_ID_OPTION="1" stop_cache + +end_test 0