#!/bin/sh set -e killdmapds() { kill -9 $(cat $tdir/music.pid) kill -9 $(cat $tdir/music-wav.pid) kill -9 $(cat $tdir/music-mp3.pid) kill -9 $(cat $tdir/music-rt.pid) kill -9 $(cat $tdir/movies.pid) kill -9 $(cat $tdir/pictures.pid) } printerrors() { [ -f $tdir/errors ] && cat $tdir/errors >&2 } error() { echo ERROR: $* exit 1 } test1() { # 1. Do some stress testing: echo -n TESTING dmapd under stress... ../dmapd/src/dmapd-stress-test -i 1 -s music-test >/dev/null 2>>$tdir/errors ../dmapd/src/dmapd-stress-test -i 1 -s music-test-wav >/dev/null 2>>$tdir/errors ../dmapd/src/dmapd-stress-test -i 1 -s music-test-mp3 >/dev/null 2>>$tdir/errors ../dmapd/src/dmapd-stress-test -i 1 -s music-test-rt >/dev/null 2>>$tdir/errors ../dmapd/src/dmapd-stress-test -i 1 -s movies-test >/dev/null 2>>$tdir/errors ../dmapd/src/dmapd-stress-test -i 1 -s pictures-test >/dev/null 2>>$tdir/errors echo OK } test2() { # 2. Test generating cache record. echo -n TESTING dmapd generating a cache record... cp $d/music/willie.ogg $tdir/music/willie.ogg properhash=$(dmapd-hashgen $tdir/music/willie.ogg) dmapd -f -m $tdir/music -d $tdir/db -x >/dev/null 2>>$tdir/errors [ -f $tdir/db/DAAP/$properhash.record ] || error failed to generate cache record. echo OK } test3() { # 3. Test removing cache record because media file changed. echo -n TESTING that dmapd removes an out-of-date cache record if a file changes... cp $d/music/willie.ogg $tdir/music/willie.ogg properhash=$(dmapd-hashgen $tdir/music/willie.ogg) dmapd -f -m $tdir/music -d $tdir/db -x >/dev/null 2>>$tdir/errors # NOTE: dmapd used to check if the media file hash changed since # generating the cache file. This was a bit slow, so now dmapd # merely checks to see if the media file's mtime > cache file's mtime. # Sleep here to make sure the mtimes differ. sleep 2 cp $d/music/acdc.mp3 $tdir/music/willie.ogg corrupthash=$(dmapd-hashgen $tdir/music/willie.ogg) dmapd -f -m $tdir/music -d $tdir/db -x >/dev/null 2>>$tdir/errors [ -f $tdir/db/DAAP/$properhash.record ] && error failed to remove out-of-date cache record. [ -f $tdir/db/DAAP/$corrupthash.record ] || error failed to generate cache record. echo OK } test4() { # 4. Test removing cache record because media file missing. echo -n TESTING that dmapd removes an out-of-date cache record if a file disappears... cp $d/music/willie.ogg $tdir/music/willie.ogg properhash=$(dmapd-hashgen $tdir/music/willie.ogg) dmapd -f -m $tdir/music -d $tdir/db -x >/dev/null 2>>$tdir/errors [ -f $tdir/db/DAAP/$properhash.record ] || error failed to generate cache record. rm -f $tdir/music/willie.ogg dmapd -f -m $tdir/music -d $tdir/db -x >/dev/null 2>>$tdir/errors [ -f $tdir/db/DAAP/$properhash.record ] && error failed to remove out-of-date cache record. echo OK } test5() { # 5. Test that we are able to load the big music library. echo -n TESTING that dmapd loads the big music library... [ -d /var/db/BigDisk-local/Storage/Music/ ] || error /var/db/BigDisk-local/Storage/Music does not exist. dmapd -f -m /var/db/BigDisk-local/Storage/Music/ -d $tdir/db -x >/dev/null 2>>$tdir/errors [ $? != 0 ] && error failed to identify at least one duration echo OK } tdir=$(mktemp -d) u=$(id -u -n) g=$(id -g -n) d=$(pwd) which dmapd >/dev/null 2>&1 || error dmapd not installed trap "killdmapds; printerrors; /bin/rm -rf $tdir" SIGTERM SIGINT EXIT export DMAPD_DEBUG=y export LIBDMAPSHARING_ENABLE_LOCAL=y mkdir $tdir/music mkdir -p $tdir/db/DAAP # Start up a few servers for the tests. dmapd -R $tdir -m $d/music -n music-test -i $tdir/music.pid -l $tdir/music.lock -u $u -g $g >/dev/null 2>&1 || error "Could not run dmapd" dmapd -R $tdir -m $d/music -n music-test-wav -i $tdir/music-wav.pid -l $tdir/music-wav.lock -u $u -g $g -t audio/wav -d $tdir >/dev/null 2>&1 || error "Could not run dmapd" dmapd -R $tdir -m $d/music -n music-test-mp3 -i $tdir/music-mp3.pid -l $tdir/music-mp3.lock -u $u -g $g -t audio/mp3 -d $tdir >/dev/null 2>&1 || error "Could not run dmapd" dmapd -R $tdir -m $d/music -n music-test-rt -i $tdir/music-rt.pid -l $tdir/music-tr.lock -u $u -g $g -t audio/mp3 -r >/dev/null 2>&1 || error "Could not run dmapd" dmapd -R $tdir -m $d/movies -n movies-test -i $tdir/movies.pid -l $tdir/movies.lock -u $u -g $g >/dev/null 2>&1 || error "Could not run dmapd" dmapd -R $tdir -p $d/pictures -n pictures-test -i $tdir/pictures.pid -l $tdir/pictures.lock -u $u -g $g >/dev/null 2>&1 || error "Could not run dmapd" if [ 0 = $# ]; then tests="1 2 3 4 5" else tests="$*" fi for i in $tests; do test$i done # Got this far without a real error. rm $tdir/errors