# - make CFLAGS+="-g -O0 -fprofile-arcs -ftest-coverage" LDFLAGS+="-fprofile-arcs --coverage"
- make
- make check
- - make check TESTS_STYLE="rrdcached"
+ - make check TESTS_STYLE="rrdcached-tcp"
+ - make check TESTS_STYLE="rrdcached-unix"
# - make check TESTS_STYLE="valgrind-logfile"
# Disable the following, failing tests: rpn1 rpn2 xport1
# These tests are failing on Travis CI (currently Ubuntu xenial, 16.04LTS), when using valgrind-logfile
--- /dev/null
+../dcounter1.output
\ No newline at end of file
--- /dev/null
+../graph1.output
\ No newline at end of file
--- /dev/null
+../graph2.output
\ No newline at end of file
--- /dev/null
+../modify-test1.create.dump
\ No newline at end of file
--- /dev/null
+../modify-test1.mod1.dump
\ No newline at end of file
--- /dev/null
+../modify-test3.create.dump
\ No newline at end of file
--- /dev/null
+../modify-test3.mod1.dump
\ No newline at end of file
--- /dev/null
+../modify2-testa-create.dump
\ No newline at end of file
--- /dev/null
+../modify2-testb-mod1.dump
\ No newline at end of file
--- /dev/null
+../modify2-testc-mod1.dump
\ No newline at end of file
--- /dev/null
+../modify4-testa-create.dump
\ No newline at end of file
--- /dev/null
+../modify4-testa1-create.dump
\ No newline at end of file
--- /dev/null
+../modify4-testa2-create.dump
\ No newline at end of file
--- /dev/null
+../modify5-testa1-create.dump
\ No newline at end of file
--- /dev/null
+../modify5-testa2-create.dump
\ No newline at end of file
--- /dev/null
+../pdp-calc1-1-avg-300.output
\ No newline at end of file
--- /dev/null
+../pdp-calc1-1-avg-60.output
\ No newline at end of file
--- /dev/null
+../pdp-calc1-1-max-300.output
\ No newline at end of file
--- /dev/null
+../rpn1.output
\ No newline at end of file
--- /dev/null
+../rpn2.output
\ No newline at end of file
--- /dev/null
+../tune1-testa-mod1.dump
\ No newline at end of file
--- /dev/null
+../tune1-testa-mod2.dump
\ No newline at end of file
--- /dev/null
+../tune1-testorg.dump
\ No newline at end of file
--- /dev/null
+../tune2-testa-mod1.dump
\ No newline at end of file
--- /dev/null
+../tune2-testorg.dump
\ No newline at end of file
--- /dev/null
+../xport1.json.output
\ No newline at end of file
--- /dev/null
+../xport1.xml.output
\ No newline at end of file
$RRDTOOL create ${PREFIX}ax1.rrd --start $(($ST-1)) --step 60 DS:a:GAUGE:120:0:U DS:b:COUNTER:120:0:U $RRA
report createax1
-cp ${PREFIX}ax1.rrd ${PREFIX}ax1-copy.rrd
+cp ${BASE}ax1.rrd ${BASE}ax1-copy.rrd
UPDATEAx1=
V=10
$RRDTOOL create ${PREFIX}a2.rrd --start $ST --step 60 --source ${PREFIX}a1.rrd DS:a:GAUGE:120:0:U RRA:AVERAGE:0.5:1:100 RRA:AVERAGE:0.5:5:2 RRA:MIN:0.5:5:2 RRA:MAX:0.5:5:2 RRA:LAST:0.5:5:2
report create-with-source-1
-[ -f ${PREFIX}a2.rrd ] || fail "file is missing!!"
+[ -f ${BASE}a2.rrd ] || fail "file is missing!!"
$RRDTOOL dump ${PREFIX}a1.rrd > ${PREFIX}a1.xml
$RRDTOOL dump ${PREFIX}a2.rrd > ${PREFIX}a2.xml
-rm -f ${PREFIX}*.rrd ${PREFIX}*.xml
+rm -f ${BASE}*.rrd ${BASE}*.xml
$RRDTOOL create ${PREFIX}a1_x.rrd --start $(($ST-1)) --step 60 DS:a:GAUGE:120:0:U RRA:AVERAGE:0.5:1:100 RRA:AVERAGE:0.5:5:2 RRA:MIN:0.5:5:2 RRA:MAX:0.5:5:2 RRA:LAST:0.5:5:2
report createa1
$RRDTOOL create ${PREFIX}bca1_x.rrd --start $(($ST-1)) --step 60 DS:b:GAUGE:120:0:U DS:c:GAUGE:120:0:U DS:a:GAUGE:120:0:U RRA:AVERAGE:0.5:1:100 RRA:AVERAGE:0.5:5:2 RRA:MIN:0.5:5:2 RRA:MAX:0.5:5:2 RRA:LAST:0.5:5:2
report createbca1
-for A in ${PREFIX}*_x.rrd ; do
- cp $A $(basename $A _x.rrd)_y.rrd
+for A in ${BASE}*_x.rrd ; do
+ cp $A ${BASEDIR}/$(basename $A _x.rrd)_y.rrd
done
# now calculate average and standard deviation
-AB1=$($RRDTOOL graph ${PREFIX}ab1.png --imginfo '' --end "$ST" --start end-1h DEF:a=${PREFIX}ab1.rrd:a:AVERAGE DEF:b=${PREFIX}ab1.rrd:b:AVERAGE CDEF:c=b,2,/,a,/ VDEF:s=c,STDEV VDEF:cavg=c,AVERAGE PRINT:s:%lg PRINT:cavg:%lg)
-AB2=$($RRDTOOL graph ${PREFIX}ab2.png --imginfo '' --end "$ST" --start end-1h DEF:a=${PREFIX}ab2.rrd:a:AVERAGE DEF:b=${PREFIX}ab2.rrd:b:AVERAGE CDEF:c=b,2,/,a,/ VDEF:s=c,STDEV VDEF:cavg=c,AVERAGE PRINT:s:%lg PRINT:cavg:%lg)
-
+AB1=$($RRDTOOL graph ${PREFIX}ab1.png --imginfo '%s%lu%lu' --end "$ST" --start end-1h DEF:a=${PREFIX}ab1.rrd:a:AVERAGE DEF:b=${PREFIX}ab1.rrd:b:AVERAGE CDEF:c=b,2,/,a,/ VDEF:s=c,STDEV VDEF:cavg=c,AVERAGE PRINT:s:%lg PRINT:cavg:%lg)
+AB2=$($RRDTOOL graph ${PREFIX}ab2.png --imginfo '%s%lu%lu' --end "$ST" --start end-1h DEF:a=${PREFIX}ab2.rrd:a:AVERAGE DEF:b=${PREFIX}ab2.rrd:b:AVERAGE CDEF:c=b,2,/,a,/ VDEF:s=c,STDEV VDEF:cavg=c,AVERAGE PRINT:s:%lg PRINT:cavg:%lg)
+echo $AB1
set -- $AB1
-STDEV1=$1
-AVG1=$2
+STDEV1=$2
+AVG1=$3
set -- $AB2
-STDEV2=$1
-AVG2=$2
+STDEV2=$2
+AVG2=$3
[ $AVG1 = 1 ] ; report average ab1 == 1
[ $(dc <<< "$AVG2 1 - 10000 * 1 / p") -lt 10 ] ; report "average ab2 ($AVG2 - 1) < 1/1000"
ST=$A
$RRDTOOL update ${BUILD}a1.rrd $A:$V
- rm -f ${BUILD}a1.xml ${BUILD}r1.rrd ${BUILD}r1.xml
+ rm -f ${BASE}a1.xml ${BASE}r1.rrd ${BASE}r1.xml
$RRDTOOL dump ${BUILD}a1.rrd ${BUILD}a1.xml
$RRDTOOL restore ${BUILD}a1.xml ${BUILD}r1.rrd
stop_cached
local ADDR
- ADDR="unix:$BASEDIR/$(basename $0)-rrdcached.sock"
+ if [ $RRDCACHED_SOCK == "unix" ]; then
+ export BASEDIR="${BUILDDIR}/cached"
+ export BUILDDIR="${BASEDIR}"
+ ADDR="unix:$BASEDIR/$(basename $0)-rrdcached.sock"
+ else
+ export BASEDIR="${BUILDDIR}/cached"
+ export RRDCACHED_STRIPPATH="${BUILDDIR}"
+
+ function RRDTOOLCOMPAT() {
+ RRDCACHED_STRIPPATH=${BUILDDIR}
+ RRDTOOL_ORIG=$TOP_BUILDDIR/src/rrdtool
+ ARGS=("$@")
+
+ # rrdcached does not support update with remote template
+ if [ $1 == "update" ] && [ $3 == '--template' ]; then
+ RRDCACHED_STRIPPATH=${BASEDIR}
+ ARGS=( $(sed "s#${BUILDDIR}#${BASEDIR}#" <<< "${ARGS[@]}") )
+ fi
+
+ # rrdcached does not support remote dump
+ if [ $1 == "dump" ]; then
+ RRDCACHED_STRIPPATH=${BUILDDIR} $RRDTOOL_ORIG flushcached $2 || fail flushcached
+ ARGS=( $(sed "s#${BUILDDIR}#${BASEDIR}#" <<< "${ARGS[@]}") )
+ RRDCACHED_STRIPPATH=${BASEDIR}
+ fi
+
+ # rrdcached does not support remote restore
+ if [ $1 == "restore" ]; then
+ ARGS=( "restore" "$2" $(sed "s#${BUILDDIR}#${BASEDIR}#" <<< $3) )
+ RRDCACHED_STRIPPATH=${BASEDIR}
+ fi
+
+ # rrdcached does not support tune
+ # if [ $1 == "tune" ]; then
+ # ARGS=( $(sed "s#${BUILDDIR}#${BASEDIR}#" <<< "${ARGS[@]}") )
+ # fi
+
+ # rrdcached does not support create with remote source or template
+ if [ $1 == "create" ]; then
+ NEWARGS=()
+ IS_NEXT_SOURCE_TEMPLATE=0
+ for arg in $(echo "${ARGS[@]}"); do
+ if [ $IS_NEXT_SOURCE_TEMPLATE == "1" ]; then
+ arg=$(sed "s#${BUILDDIR}#${BASEDIR}#" <<< $arg)
+ IS_NEXT_SOURCE_TEMPLATE=0
+ fi
+ ([ $arg == "--source" ] || [ $arg == "--template" ]) && IS_NEXT_SOURCE_TEMPLATE=1
+ NEWARGS+="$arg "
+ done
+ ARGS=( ${NEWARGS[@]} )
+ fi
+
+ $RRDTOOL_ORIG "${ARGS[@]}"
+ ret=$?
+
+ if [ $1 == "update" ]; then
+ RRDCACHED_STRIPPATH=${BUILDDIR} $RRDTOOL_ORIG flushcached $2 || fail flushcached
+ fi
+
+ return $ret
+ }
+ export RRDTOOL=RRDTOOLCOMPAT
+
+ randport=$(python -S -c "import random; random.seed('$(basename $0)'); print(random.randrange(49152,65535))")
+ ADDR="localhost:$randport"
+ fi
+
CACHED_PID_FILE="$BASEDIR/$(basename $0)-rrdcached.pid"
- $CACHED -p "$CACHED_PID_FILE" -l "$ADDR" -b "$(readlink -f -- $BASEDIR)" -F
+ $CACHED -p "$CACHED_PID_FILE" -l "$ADDR" -b "$(readlink -f -- $BASEDIR)" -F -B
RRDCACHED_ADDRESS=$ADDR
export RRDCACHED_ADDRESS
NEED_CACHED=
for ST in $TESTS_STYLE ; do
case "$ST" in
- rrdcached)
+ rrdcached-unix)
+ NEED_CACHED=1
+ STANDARD_RRDCACHED="$RRDCACHED"
+ RRDCACHED_SOCK=unix
+ ;;
+ rrdcached-tcp)
NEED_CACHED=1
STANDARD_RRDCACHED="$RRDCACHED"
+ RRDCACHED_SOCK=tcp
;;
valgrind)
RRDTOOL="valgrind $TOP_BUILDDIR/src/rrdtool"
. $(dirname $0)/functions
-RRD=graph1.rrd
+BASE=$BASEDIR/
+BUILD=$BUILDDIR/
+
+RRD=${BUILD}graph1.rrd
$RRDTOOL create $RRD --start 920804400 DS:speed:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24 RRA:AVERAGE:0.5:6:10
report "create"
fi
if is_cached; then
- mkdir -p "$LIST_DIR"
+ PWD_TEMP="$PWD"
# This relies on '-b' setting in functions::run_cached()
- CACHED_DIR=`echo "$LIST_DIR" | sed "s|^$BASEDIR||"`
+ CACHED_DIR=`echo "$LIST_DIR" | sed "s|^$BUILDDIR||"`
+ cd "$BASEDIR" && mkdir -p ".$CACHED_DIR"
+ $RRDTOOL create ${BUILD}.rrd --start 1300000000 --step 60s DS:dv:DDERIVE:300:U:U DS:wh:DCOUNTER:300:0:U RRA:AVERAGE:0.5:1:600 RRA:AVERAGE:0.5:10:144
do_list_tests "$CACHED_DIR"
# rrdcached-specific tests
test $list_count -eq 0
report "escape from cached basedir via symlink denied"
- rm -rf "$LIST_DIR"
+ rm -rf ".$CACHED_DIR"
+ cd "$PWD_TEMP"
stop_cached || true
else
echo "rrdcached not started - skipping"
let N=$N+10
done
+
$RRDTOOL dump ${BUILD}a.rrd | $DIFF9 - ${BASE}.create.dump
report "created content"
# extend base RRA, refill from coarse RRA
-cp ${BUILD}a.rrd ${BUILD}b.rrd
+cp ${BASE}a.rrd ${BASE}b.rrd
$RRDTOOL tune ${BUILD}b.rrd RRA#0:+10 || fail "tune"
$RRDTOOL dump ${BUILD}b.rrd | $DIFF9 - ${BASE}.mod1.dump
report "extend base RRA"
$RRDTOOL dump ${BUILD}a.rrd | $DIFF9 ${BASE}a-create.dump -
report create
-cp ${BUILD}a.rrd ${BUILD}b.rrd
+cp ${BASE}a.rrd ${BASE}b.rrd
$RRDTOOL tune ${BUILD}b.rrd RRA#1:+10 RRA#2:+10 RRA#3:+10 RRA#4:+10 || fail modify
$RRDTOOL dump ${BUILD}b.rrd | $DIFF9 ${BASE}b-mod1.dump -
report "simultaneously extend aggregate RRAs"
-cp ${BUILD}a.rrd ${BUILD}c.rrd
+cp ${BASE}a.rrd ${BASE}c.rrd
$RRDTOOL tune ${BUILD}c.rrd RRA:AVERAGE:0.5:2:10 || fail modify
$RRDTOOL dump ${BUILD}c.rrd | $DIFF9 ${BASE}c-mod1.dump -
report "add RRA with intermediate pdp_cnt"
$RRDTOOL dump ${BUILD}a.rrd | $DIFF9 - ${BASE}.create.dump && ok "create" || fail "create"
# extend base RRA, refill from coarse RRA
-cp ${BUILD}a.rrd ${BUILD}b.rrd
+cp ${BASE}a.rrd ${BASE}b.rrd
$RRDTOOL tune ${BUILD}b.rrd DEL:a RRA#0:+10 || fail modify
$RRDTOOL dump ${BUILD}b.rrd | $DIFF9 - ${BASE}.mod1.dump && ok "extend base RRA" || fail "extend base RRA"
$RRDTOOL dump ${BUILD}a2.rrd | $DIFF9 ${BASE}a2-create.dump -
report create 2
-cp ${BUILD}a2.rrd ${BUILD}b2.rrd
+cp ${BASE}a2.rrd ${BASE}b2.rrd
$RRDTOOL tune ${BUILD}b2.rrd DELRRA:5 || fail modify
$RRDTOOL dump ${BUILD}b2.rrd | $DIFF9 ${BASE}a1-create.dump -
report "remove additional RRA from second - must then be equal original first"
-cp ${BUILD}a1.rrd ${BUILD}b1.rrd
+cp ${BASE}a1.rrd ${BASE}b1.rrd
$RRDTOOL tune ${BUILD}b1.rrd RRA:AVERAGE:0.5:4:10 || fail modify
$RRDTOOL dump ${BUILD}b1.rrd | $DIFF9 ${BASE}a2-create.dump -
$RRDTOOL dump ${BUILD}a2.rrd > ${BUILD}a2-mod.dump.tmp
# remove RRA 5 from second RRD, should now match first RRD
- cp ${BUILD}a2.rrd ${BUILD}b2.rrd
+ cp ${BASE}a2.rrd ${BASE}b2.rrd
$RRDTOOL tune ${BUILD}b2.rrd DELRRA:5
$RRDTOOL dump ${BUILD}b2.rrd | diff -u ${BUILD}a1-mod.dump.tmp -
report "remove additional RRA from second - must then be equal original first"
# add RRA to first RRD, should now match second RRD
- cp ${BUILD}a1.rrd ${BUILD}b1.rrd
+ cp ${BASE}a1.rrd ${BASE}b1.rrd
$RRDTOOL tune ${BUILD}b1.rrd RRA:AVERAGE:0.5:4:10
$RRDTOOL dump ${BUILD}b1.rrd | diff -u ${BUILD}a2-mod.dump.tmp -
. $(dirname $0)/functions
-RRD=rpn1.rrd
+BASE=$BASEDIR/
+BUILD=$BUILDDIR/
+
+RRD=${BUILD}rpn1.rrd
$RRDTOOL create $RRD --start 920804400 DS:speed:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24 RRA:AVERAGE:0.5:6:10
report "create"
. $(dirname $0)/functions
-RRD=rpn2.rrd
+BASE=$BASEDIR/
+BUILD=$BUILDDIR/
+
+RRD=${BUILD}rpn2.rrd
$RRDTOOL create $RRD --step 7200 --start 1167487000 DS:speed:DCOUNTER:14000:U:U RRA:AVERAGE:0.5:1:30
report "create"
is_cached && ( $RRDTOOL flushcached ${BUILD}org.rrd || fail flushcached)
-cp ${BUILD}org.rrd ${BUILD}a.rrd
+cp ${BASE}org.rrd ${BASE}a.rrd
$RRDTOOL tune ${BUILD}a.rrd --heartbeat a:90 --minimum b:U
$RRDTOOL tune ${BUILD}a.rrd --heartbeat a:90 --minimum b:-100
$RRDTOOL dump ${BUILD}a.rrd | $DIFF9 - ${BASE}a-mod1.dump
# NOTE: for rrdcached based tests, we must flush before we can copy...
is_cached && ( $RRDTOOL flushcached ${BUILD}org.rrd || fail flushcached )
-cp ${BUILD}org.rrd ${BUILD}a.rrd
+cp ${BASE}org.rrd ${BASE}a.rrd
$RRDTOOL tune ${BUILD}a.rrd --data-source-type a:COUNTER --data-source-rename b:c
$RRDTOOL dump ${BUILD}a.rrd | $DIFF9 - ${BASE}a-mod2.dump
report "tune dst/ds-name"
report create
is_cached && ( $RRDTOOL flushcached ${BUILD}org.rrd || fail flushcached )
-cp ${BUILD}org.rrd ${BUILD}a.rrd
+cp ${BASE}org.rrd ${BASE}a.rrd
# this must fail
! $RRDTOOL tune ${BUILD}a.rrd --beta 1.4 2>/dev/null
report "out of range beta error"
. $(dirname $0)/functions
+BASE=$BASEDIR/
+BUILD=$BUILDDIR/
+
+RRD=${BUILD}vfmt1.rrd
+
export TZ=UTC
function rtest() {
#&& echo "OK: $testname" || echo "FAIL: $testname"
}
-$RRDTOOL create vfmt1.rrd --start 1420070400 --step 60s DS:v:GAUGE:60:U:U RRA:LAST:0:1:10 || exit 1
+$RRDTOOL create $RRD --start 1420070400 --step 60s DS:v:GAUGE:60:U:U RRA:LAST:0:1:10 || exit 1
declare -a graphargs
-graphargs=(graph /dev/null --start 1420070400 --end 1420071000 'DEF:dv=vfmt1.rrd:v:LAST' 'VDEF:v=dv,LAST')
+graphargs=(graph /dev/null --start 1420070400 --end 1420071000 "DEF:dv=$RRD:v:LAST" 'VDEF:v=dv,LAST')
rtest "No data, numeric" '0x0\nnan' "${graphargs[@]}" 'PRINT:v:%0.1lf'
rtest "No data, value duration" '0x0\nnan' "${graphargs[@]}" 'PRINT:v::valstrfduration'
-$RRDTOOL update vfmt1.rrd --template v -- 1420070460:0 || exit 1
+$RRDTOOL update $RRD --template v -- 1420070460:0 || exit 1
rtest "Zero, numeric" '0x0\n0.0' "${graphargs[@]}" 'PRINT:v:%0.1lf'
rtest "Zero, value duration" '0x0\n0_00_00_000' "${graphargs[@]}" 'PRINT:v:%H_%02m_%02s_%03f:valstrfduration'
-$RRDTOOL update vfmt1.rrd --template v -- 1420070520:3000 || exit 1
+$RRDTOOL update $RRD --template v -- 1420070520:3000 || exit 1
rtest "3000, numeric" '0x0\n3000.0' "${graphargs[@]}" 'PRINT:v:%0.1lf'