aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiuseppe Di Natale <dinatale2@users.noreply.github.com>2018-03-07 09:53:04 -0800
committerBrian Behlendorf <behlendorf1@llnl.gov>2018-03-07 09:53:04 -0800
commita07ad58847158fcd90a2a98f1476a81bfcd3c3ac (patch)
treeb8597fd267bac6841d6370d527441918ee6b2e35
parent639b18944a6a3483c02039621c02dac08a954a90 (diff)
Fix dbufstats_001_pos
Implement a new helper within_tolerance to test if a value is within range of a target. Because the dbufstats and dbufs kstat file are being read at slightly different times, it is possible for stats to be slightly off. Use within_tolerance to determine if the value is "close enough" to the target. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov> Closes #7239 Closes #7266
-rw-r--r--tests/zfs-tests/include/math.shlib23
-rwxr-xr-xtests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh9
2 files changed, 28 insertions, 4 deletions
diff --git a/tests/zfs-tests/include/math.shlib b/tests/zfs-tests/include/math.shlib
index 66658cdda..0c3508ec2 100644
--- a/tests/zfs-tests/include/math.shlib
+++ b/tests/zfs-tests/include/math.shlib
@@ -43,6 +43,29 @@ function within_percent
}
#
+# Return 0 if value is within +/-tolerance of target.
+# Return 1 if value exceeds our tolerance.
+# For use like this:
+#
+# Do $action if value is within the tolerance from target passed in:
+# within_tolerance VAL TAR TOL && $action
+# Do $action if value surpasses the tolerance from target passed in:
+# within_tolerance VAL TAR TOL || $action
+#
+function within_tolerance #value #target #tolerance
+{
+ typeset val=$1
+ typeset target=$2
+ typeset tol=$3
+
+ typeset diff=$((abs(val - target)))
+ log_note "Checking if $val is within +/-$tol of $target (diff: $diff)"
+ ((diff <= tol)) && return 0
+
+ return 1
+}
+
+#
# Return 0 if the human readable string of the form <value>[suffix] can
# be converted to bytes. Allow suffixes are shown in the table below.
#
diff --git a/tests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh b/tests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh
index 97d370b1f..7813d263d 100755
--- a/tests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh
+++ b/tests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh
@@ -55,10 +55,11 @@ function testdbufstat # stat_name dbufstat_filter
[[ -n "$2" ]] && filter="-F $2"
- verify_eq \
- $(grep -w "$name" "$DBUFSTATS_FILE" | awk '{ print $3 }') \
- $(dbufstat.py -bxn -i "$DBUFS_FILE" "$filter" | wc -l) \
- "$name"
+ from_dbufstat=$(grep -w "$name" "$DBUFSTATS_FILE" | awk '{ print $3 }')
+ from_dbufs=$(dbufstat.py -bxn -i "$DBUFS_FILE" "$filter" | wc -l)
+
+ within_tolerance $from_dbufstat $from_dbufs 5 \
+ || log_fail "Stat $name exceeded tolerance"
}
verify_runnable "both"