1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
#!/bin/bash
. $(dirname $0)/functions
runfailtest () {
desc="${1}"
shift
eval "${@}" > /tmp/test.out 2>/tmp/test.err
if [ 0 = $? ] ; then
echo -n "FAIL: ${desc} : "
cat /tmp/test.err
else
echo -n "OK: ${desc} : "
cat /tmp/test.err | sed -e 's@ERROR@OK@'
fi
}
runfailtest "diagnose zero step" \
$RRDTOOL create foo.rrd \
--start now \
--step 0 \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:1:100
runfailtest "diagnose negative step" \
$RRDTOOL create foo.rrd \
--start now \
--step -1 \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:1:100
runfailtest "diagnose non-text step" \
$RRDTOOL create foo.rrd \
--start now \
--step one \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:1:100
runfailtest "diagnose invalid step suffix" \
$RRDTOOL create foo.rrd \
--start now \
--step 2H \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:1:100
runfailtest "diagnose misaligned RRA step" \
$RRDTOOL create foo.rrd \
--start now \
--step 10s \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:15s:1h
runfailtest "diagnose misaligned RRA rows" \
$RRDTOOL create foo.rrd \
--start now \
--step 10s \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:10s:75s
runfailtest "diagnose zero RRA rows" \
$RRDTOOL create foo.rrd \
--start now \
--step 5s \
DS:v:GAUGE:5:U:U \
RRA:AVERAGE:0.5:15s:10s
runfailtest "diagnose missing heartbeat separator" \
$RRDTOOL create foo.rrd \
--start now \
--step 5s \
DS:v:GAUGE:5 \
RRA:AVERAGE:0.5:15s:10s
runfailtest "diagnose missing heartbeat" \
$RRDTOOL create foo.rrd \
--start now \
--step 5s \
DS:v:GAUGE:xx:U:U \
RRA:AVERAGE:0.5:15s:1m
runfailtest "diagnose max/min error" \
$RRDTOOL create foo.rrd \
--start now \
--step 5s \
DS:v:GAUGE:30s:5:3 \
RRA:AVERAGE:0.5:15s:1m
runfailtest "diagnose missing max" \
$RRDTOOL create foo.rrd \
--start now \
--step 5s \
DS:v:GAUGE:30s:53 \
RRA:AVERAGE:0.5:15s:1m
getinfo () {
$RRDTOOL create junk.rrd "${@}"
$RRDTOOL info junk.rrd | sed -e '/^rra\[.*\]\.cur_row =/d'
}
checkequiv () {
desc="${1}" ; shift
f1="${1}" ; shift
f2="${1}" ; shift
if diff -q ${f1} ${f2} ; then
echo "OK: ${desc}"
else
echo "FAIL ${desc}:"
$DIFF ${f1} ${f2}
fi
}
# Basic step-by-one test
getinfo \
--start 0 --step 1 \
DS:watts:GAUGE:300:0:24000 \
RRA:AVERAGE:0.5:1:864000 \
RRA:AVERAGE:0.5:60:129600 \
RRA:AVERAGE:0.5:3600:13392 \
RRA:AVERAGE:0.5:86400:3660 \
> ct.out
getinfo \
--start 0 --step 1s \
DS:watts:GAUGE:5m:0:24000 \
RRA:AVERAGE:0.5:1s:10d \
RRA:AVERAGE:0.5:1m:90d \
RRA:AVERAGE:0.5:1h:18M \
RRA:AVERAGE:0.5:1d:10y \
> dur.out
checkequiv "1-sec PDP equivalents" ct.out dur.out
# Step-by-5 test
getinfo \
--start 0 --step 5 \
DS:watts:GAUGE:300:0:24000 \
RRA:AVERAGE:0.5:1:172800 \
RRA:AVERAGE:0.5:12:129600 \
RRA:AVERAGE:0.5:720:13392 \
RRA:AVERAGE:0.5:17280:3660 \
> ct.out
getinfo \
--start 0 --step 5s \
DS:watts:GAUGE:5m:0:24000 \
RRA:AVERAGE:0.5:5s:10d \
RRA:AVERAGE:0.5:1m:90d \
RRA:AVERAGE:0.5:1h:18M \
RRA:AVERAGE:0.5:1d:10y \
> dur.out
checkequiv "5-sec PDP equivalents" ct.out dur.out
# HWPREDICT test
getinfo \
--start 0 --step 300 \
DS:ifOutOctets:COUNTER:1800:0:4294967295 \
RRA:AVERAGE:0.5:1:2016 \
RRA:HWPREDICT:1440:0.1:0.0035:288 \
> ct.out
getinfo \
--start 0 --step 5m \
DS:ifOutOctets:COUNTER:30m:0:4294967295 \
RRA:AVERAGE:0.5:1:2016 \
RRA:HWPREDICT:5d:0.1:0.0035:1d:3 \
RRA:SEASONAL:1d:0.1:2 \
RRA:DEVSEASONAL:1d:0.1:2 \
RRA:DEVPREDICT:5d:5 \
RRA:FAILURES:1d:7:9:5 \
> dur.out
checkequiv "HWPREDICT equivalents" ct.out dur.out
# FETCH test
getinfo \
--start 0 --step 10s \
DS:ds0:GAUGE:300:0:U \
RRA:AVERAGE:0.5:30:3600 \
RRA:AVERAGE:0.5:90:1200 \
RRA:AVERAGE:0.5:360:1200 \
RRA:MAX:0.5:360:1200 \
RRA:AVERAGE:0.5:8640:600 \
RRA:MAX:0.5:8640:600 \
> ct.out
getinfo \
--start 0 --step 10s \
DS:ds0:GAUGE:5m:0:U \
RRA:AVERAGE:0.5:5m:300h \
RRA:AVERAGE:0.5:15m:300h \
RRA:AVERAGE:0.5:1h:50d \
RRA:MAX:0.5:1h:50d \
RRA:AVERAGE:0.5:1d:600d \
RRA:MAX:0.5:1d:600d \
> dur.out
checkequiv "FETCH equivalents" ct.out dur.out
rm -f ct.out dur.out
|