Statistics
| Branch: | Revision:

root / tests / qemu-iotests / common.filter @ e8c212d6

History | View | Annotate | Download (3.6 kB)

1 6bf19c94 Christoph Hellwig
#!/bin/sh
2 6bf19c94 Christoph Hellwig
#
3 6bf19c94 Christoph Hellwig
# Copyright (C) 2009 Red Hat, Inc.
4 6bf19c94 Christoph Hellwig
# Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
5 6bf19c94 Christoph Hellwig
#
6 6bf19c94 Christoph Hellwig
# This program is free software; you can redistribute it and/or
7 6bf19c94 Christoph Hellwig
# modify it under the terms of the GNU General Public License as
8 6bf19c94 Christoph Hellwig
# published by the Free Software Foundation.
9 6bf19c94 Christoph Hellwig
#
10 6bf19c94 Christoph Hellwig
# This program is distributed in the hope that it would be useful,
11 6bf19c94 Christoph Hellwig
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12 6bf19c94 Christoph Hellwig
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 6bf19c94 Christoph Hellwig
# GNU General Public License for more details.
14 6bf19c94 Christoph Hellwig
#
15 6bf19c94 Christoph Hellwig
# You should have received a copy of the GNU General Public License
16 e8c212d6 Christoph Hellwig
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 6bf19c94 Christoph Hellwig
#
18 6bf19c94 Christoph Hellwig
#
19 6bf19c94 Christoph Hellwig
# standard filters
20 6bf19c94 Christoph Hellwig
#
21 6bf19c94 Christoph Hellwig
22 6bf19c94 Christoph Hellwig
# Checks that given_value is in range of correct_value +/- tolerance.
23 6bf19c94 Christoph Hellwig
# Tolerance can be an absolute value or a percentage of the correct value
24 6bf19c94 Christoph Hellwig
# (see examples with tolerances below).
25 6bf19c94 Christoph Hellwig
# Outputs suitable message to stdout if it's not in range.
26 6bf19c94 Christoph Hellwig
#
27 6bf19c94 Christoph Hellwig
# A verbose option, -v, may be used as the LAST argument
28 6bf19c94 Christoph Hellwig
# 
29 6bf19c94 Christoph Hellwig
# e.g. 
30 6bf19c94 Christoph Hellwig
# foo: 0.0298 = 0.03 +/- 5%
31 6bf19c94 Christoph Hellwig
# _within_tolerance "foo" 0.0298 0.03 5%  
32 6bf19c94 Christoph Hellwig
# 
33 6bf19c94 Christoph Hellwig
# foo: 0.0298 = 0.03 +/- 0.01
34 6bf19c94 Christoph Hellwig
# _within_tolerance "foo" 0.0298 0.03 0.01
35 6bf19c94 Christoph Hellwig
#
36 6bf19c94 Christoph Hellwig
# foo: 0.0298 = 0.03 -0.01 +0.002
37 6bf19c94 Christoph Hellwig
# _within_tolerance "foo" 0.0298 0.03 0.01 0.002
38 6bf19c94 Christoph Hellwig
#
39 6bf19c94 Christoph Hellwig
# foo: verbose output of 0.0298 = 0.03 +/- 5% 
40 6bf19c94 Christoph Hellwig
# _within_tolerance "foo" 0.0298 0.03 5% -v 
41 6bf19c94 Christoph Hellwig
_within_tolerance()
42 6bf19c94 Christoph Hellwig
{
43 6bf19c94 Christoph Hellwig
  _name=$1
44 6bf19c94 Christoph Hellwig
  _given_val=$2
45 6bf19c94 Christoph Hellwig
  _correct_val=$3
46 6bf19c94 Christoph Hellwig
  _mintol=$4
47 6bf19c94 Christoph Hellwig
  _maxtol=$_mintol
48 6bf19c94 Christoph Hellwig
  _verbose=0
49 6bf19c94 Christoph Hellwig
  _debug=false
50 6bf19c94 Christoph Hellwig
51 6bf19c94 Christoph Hellwig
  # maxtol arg is optional
52 6bf19c94 Christoph Hellwig
  # verbose arg is optional
53 6bf19c94 Christoph Hellwig
  if [ $# -ge 5 ]
54 6bf19c94 Christoph Hellwig
  then 
55 6bf19c94 Christoph Hellwig
     if [ "$5" = "-v" ]
56 6bf19c94 Christoph Hellwig
     then
57 6bf19c94 Christoph Hellwig
	_verbose=1
58 6bf19c94 Christoph Hellwig
     else
59 6bf19c94 Christoph Hellwig
        _maxtol=$5
60 6bf19c94 Christoph Hellwig
     fi
61 6bf19c94 Christoph Hellwig
  fi
62 6bf19c94 Christoph Hellwig
  if [ $# -ge 6 ]
63 6bf19c94 Christoph Hellwig
  then
64 6bf19c94 Christoph Hellwig
     [ "$6" = "-v" ] && _verbose=1
65 6bf19c94 Christoph Hellwig
  fi
66 6bf19c94 Christoph Hellwig
67 6bf19c94 Christoph Hellwig
  # find min with or without %
68 6bf19c94 Christoph Hellwig
  _mintolerance=`echo $_mintol | sed -e 's/%//'` 
69 6bf19c94 Christoph Hellwig
  if [ $_mintol = $_mintolerance ]
70 6bf19c94 Christoph Hellwig
  then 
71 6bf19c94 Christoph Hellwig
      _min=`echo "scale=5; $_correct_val-$_mintolerance" | bc`
72 6bf19c94 Christoph Hellwig
  else
73 6bf19c94 Christoph Hellwig
      _min=`echo "scale=5; $_correct_val-$_mintolerance*0.01*$_correct_val" | bc`
74 6bf19c94 Christoph Hellwig
  fi
75 6bf19c94 Christoph Hellwig
76 6bf19c94 Christoph Hellwig
  # find max with or without %
77 6bf19c94 Christoph Hellwig
  _maxtolerance=`echo $_maxtol | sed -e 's/%//'` 
78 6bf19c94 Christoph Hellwig
  if [ $_maxtol = $_maxtolerance ]
79 6bf19c94 Christoph Hellwig
  then 
80 6bf19c94 Christoph Hellwig
      _max=`echo "scale=5; $_correct_val+$_maxtolerance" | bc`
81 6bf19c94 Christoph Hellwig
  else
82 6bf19c94 Christoph Hellwig
      _max=`echo "scale=5; $_correct_val+$_maxtolerance*0.01*$_correct_val" | bc`
83 6bf19c94 Christoph Hellwig
  fi
84 6bf19c94 Christoph Hellwig
85 6bf19c94 Christoph Hellwig
  $_debug && echo "min = $_min"
86 6bf19c94 Christoph Hellwig
  $_debug && echo "max = $_max"
87 6bf19c94 Christoph Hellwig
88 6bf19c94 Christoph Hellwig
  cat <<EOF >$tmp.bc.1
89 6bf19c94 Christoph Hellwig
scale=5;
90 6bf19c94 Christoph Hellwig
if ($_min <= $_given_val) 1;
91 6bf19c94 Christoph Hellwig
if ($_min > $_given_val) 0; 
92 6bf19c94 Christoph Hellwig
EOF
93 6bf19c94 Christoph Hellwig
94 6bf19c94 Christoph Hellwig
  cat <<EOF >$tmp.bc.2
95 6bf19c94 Christoph Hellwig
scale=5;
96 6bf19c94 Christoph Hellwig
if ($_given_val <= $_max) 1;
97 6bf19c94 Christoph Hellwig
if ($_given_val > $_max) 0;
98 6bf19c94 Christoph Hellwig
EOF
99 6bf19c94 Christoph Hellwig
100 6bf19c94 Christoph Hellwig
  _above_min=`bc <$tmp.bc.1`
101 6bf19c94 Christoph Hellwig
  _below_max=`bc <$tmp.bc.2`
102 6bf19c94 Christoph Hellwig
103 6bf19c94 Christoph Hellwig
  rm -f $tmp.bc.[12]
104 6bf19c94 Christoph Hellwig
105 6bf19c94 Christoph Hellwig
  _in_range=`expr $_above_min \& $_below_max` 
106 6bf19c94 Christoph Hellwig
107 6bf19c94 Christoph Hellwig
  # fix up min, max precision for output
108 6bf19c94 Christoph Hellwig
  # can vary for 5.3, 6.2
109 6bf19c94 Christoph Hellwig
  _min=`echo $_min | sed -e 's/0*$//'` # get rid of trailling zeroes
110 6bf19c94 Christoph Hellwig
  _max=`echo $_max | sed -e 's/0*$//'` # get rid of trailling zeroes
111 6bf19c94 Christoph Hellwig
112 6bf19c94 Christoph Hellwig
  if [ $_in_range -eq 1 ] 
113 6bf19c94 Christoph Hellwig
  then
114 6bf19c94 Christoph Hellwig
	[ $_verbose -eq 1 ] && echo $_name is in range
115 6bf19c94 Christoph Hellwig
	return 0
116 6bf19c94 Christoph Hellwig
  else
117 6bf19c94 Christoph Hellwig
	[ $_verbose -eq 1 ] && echo $_name has value of $_given_val
118 6bf19c94 Christoph Hellwig
	[ $_verbose -eq 1 ] && echo $_name is NOT in range $_min .. $_max	
119 6bf19c94 Christoph Hellwig
	return 1
120 6bf19c94 Christoph Hellwig
  fi
121 6bf19c94 Christoph Hellwig
}
122 6bf19c94 Christoph Hellwig
123 6bf19c94 Christoph Hellwig
# ctime(3) dates
124 6bf19c94 Christoph Hellwig
#
125 6bf19c94 Christoph Hellwig
_filter_date()
126 6bf19c94 Christoph Hellwig
{
127 6bf19c94 Christoph Hellwig
    sed \
128 6bf19c94 Christoph Hellwig
	-e 's/[A-Z][a-z][a-z] [A-z][a-z][a-z]  *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]$/DATE/'
129 6bf19c94 Christoph Hellwig
}
130 6bf19c94 Christoph Hellwig
131 6bf19c94 Christoph Hellwig
# replace occurances of the actual TEST_DIR value with TEST_DIR
132 6bf19c94 Christoph Hellwig
_filter_testdir()
133 6bf19c94 Christoph Hellwig
{
134 6bf19c94 Christoph Hellwig
    sed -e "s#$TEST_DIR#TEST_DIR#g"
135 6bf19c94 Christoph Hellwig
}
136 6bf19c94 Christoph Hellwig
137 6bf19c94 Christoph Hellwig
# sanitize qemu-io output
138 6bf19c94 Christoph Hellwig
_filter_qemu_io()
139 6bf19c94 Christoph Hellwig
{
140 6bf19c94 Christoph Hellwig
    sed -e "s/[0-9]* ops\; [0-9/:. sec]* ([0-9/.]* [GMKiBbytes]*\/sec and [0-9/.]* ops\/sec)/X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/"
141 6bf19c94 Christoph Hellwig
}
142 6bf19c94 Christoph Hellwig
143 6bf19c94 Christoph Hellwig
# make sure this script returns success
144 6bf19c94 Christoph Hellwig
/bin/true