#!/bin/bash #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # # This file is part of the Campcaster project. # http://campcaster.campware.org/ # # Campcaster is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Campcaster is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Campcaster; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- #DEBUG=yes #DEBUG_I=yes if [ "x$1" != "x" ]; then COMM=$1 shift GUNID=$1 fi METADATA=" Media title testRunner 00:00:03.000000 " METAREGEX="(<\\?xml version=\"1\\.0\"( encoding=\"UTF-8\")?\\?> )?\ \ \ Media title testRunner\ 00:00:03\\.000000\ [0-9]{4}(-[0-9]{2}){2}T[0-9]{2}(:[0-9]{2}){2}([-+][0-9]{1,2}:[0-9]{2})?\ \ " echo "" XRDIR=`dirname $0` XMLRPC=`cd var/install; php -q getXrUrl.php` || exit $? echo "# storageServer XMLRPC URL: $XMLRPC" cd $XRDIR #XR_CLI="./xr_cli_test.py -s ${XMLRPC}" XR_CLI="php -q xr_cli_test.php -s ${XMLRPC}" login() { echo -n "# login: " SESSID=`$XR_CLI login root q` || \ { ERN=$?; echo $SESSID; exit $ERN; } echo "sessid: $SESSID" } test() { echo "# test: " $XR_CLI test $SESSID stringForUppercase || exit $? } existsAudioClip() { echo -n "# existsAudioClip (${GUNID}): " $XR_CLI existsAudioClip $SESSID $GUNID || exit $? } storeAudioClip() { if [ "x$1" = "x" ]; then MEDIA=../tests/ex1.mp3; else MEDIA=$1; fi if [ "x$2" = "x" ]; then GUNID=""; else GUNID=$2; fi MD5=`md5sum $MEDIA`; for i in $MD5; do MD5=$i; break; done if [ $DEBUG_I ]; then echo "md5=$MD5"; fi echo -n "# storeAudioClipOpen: " RES=`$XR_CLI storeAudioClipOpen "$SESSID" "$GUNID" "$METADATA" "stored file.mp3" "$MD5"` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN if [ $DEBUG_I ]; then echo $URL; fi if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo -n "# curl (PUT): " curl -C 0 -T $MEDIA $URL || { ERN=$?; echo $RGUNID; exit $ERN; } echo "status: $?" if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo -n "# storeAudioClipClose: " RGUNID=`$XR_CLI storeAudioClipClose "$SESSID" "$TOKEN"` || \ { ERN=$?; echo $RGUNID; exit $ERN; } echo $RGUNID } accessRawAudioData() { echo -n "# accessRawAudioData: " RES=`$XR_CLI accessRawAudioData $SESSID $GUNID` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN if [ $DEBUG_I ]; then echo $URL; fi if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo -n "# releaseRawAudioData: " $XR_CLI releaseRawAudioData $TOKEN || exit $? } downloadRAD() { echo -n "# downloadRawAudioDataOpen: " RES=`$XR_CLI downloadRawAudioDataOpen $SESSID $GUNID` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN if [ $DEBUG_I ]; then echo $URL; fi if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo -n "# curl: " curl -Ifs $URL > /dev/null || { ERN=$?; echo $URL; exit $ERN; } echo "status: $?" echo -n "# downloadRawAudioDataClose: " $XR_CLI downloadRawAudioDataClose $SESSID $TOKEN || exit $? } downloadMeta() { echo -n "# downloadMetadataOpen: " RES=`$XR_CLI downloadMetadataOpen $SESSID $GUNID` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN if [ $DEBUG_I ]; then echo $URL; fi if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo -n "# curl: " METAOUT=`curl -fs $URL;` || { ERN=$?; echo $RES; exit $ERN; } echo "OK" if [ $DEBUG_I ]; then echo $METAOUT; echo -n "Press enter ..."; read KEY; fi echo -n "# metadata check:" METAOUT=`echo $METAOUT | sed -e 's/\\n/ /g'` if [[ "x$METAOUT" =~ "x$METAREGEX" ]]; then echo " OK" else echo " NOT MATCH ($?)" echo " Expected match to regex:"; echo $METAREGEX echo " Downloaded:"; echo ${METAOUT} exit 1 fi echo -n "# downloadMetadataClose: " $XR_CLI downloadMetadataClose $SESSID $TOKEN || exit $? } deleteAudioClip() { echo -n "# deleteAudioClip: " # disabled: # $XR_CLI deleteAudioClip $SESSID $GUNID || exit $? $XR_CLI deleteAudioClip $SESSID $GUNID 0 } updateAudioClipMetadata() { echo -n "#updateAudioClipMetadata: " $XR_CLI updateAudioClipMetadata $SESSID $GUNID "$METADATA" || exit $? } getAudioClip() { echo -n "#getAudioClip: " $XR_CLI getAudioClip $SESSID $GUNID || exit $? } searchMetadata() { echo -n "# searchMetadata: " RES=`$XR_CLI searchMetadata $SESSID 'title' 'testRunner'` || \ { ERN=$?; echo $RES; exit $ERN; } echo $RES } browseCategory() { echo -n "# browseCategory: " RES=`$XR_CLI browseCategory $SESSID 'title' 'title' 'testRunner'` || \ { ERN=$?; echo $RES; exit $ERN; } echo $RES } storeWebstream() { URL="http://localhost/x" echo -n "# storeWebstream: " RGUNID=`$XR_CLI storeWebstream "$SESSID" '' "$METADATA" "new stream" "$URL"` || \ { ERN=$?; echo $RGUNID; exit $ERN; } echo $RGUNID } PLID="123456789abcdef8" createPlaylist() { echo -n "# createPlaylist: " $XR_CLI deletePlaylist $SESSID $PLID 1 $XR_CLI createPlaylist $SESSID $PLID "newPlaylist.xml" || exit $? } accessPlaylist() { echo -n "# accessPlaylist: " RES=`$XR_CLI accessPlaylist $SESSID $PLID` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN if [ $DEBUG_I ]; then echo $URL; fi echo "# curl: " CURLOUT=`curl -fs $URL;` || { ERN=$?; echo $RES; exit $ERN; } if [ $DEBUG ]; then echo $CURLOUT; fi # echo $CURLOUT if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo "# status: $?" if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi echo -n "# releasePlaylist: " $XR_CLI releasePlaylist $TOKEN || exit $? } editPlaylist() { DATE=`date '+%H:%M:%S'` PLAYLIST=" My First Playlist Me, myself and I 01:30:00.000000 " echo -n "# editPlaylist: " RES=`$XR_CLI editPlaylist $SESSID $PLID` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN # deletePlaylist if [ $DEBUG_I ]; then echo $URL; fi if [ $DEBUG_I ]; then echo -n "Press enter ..."; read KEY; fi if [ $DEBUG_I ]; then echo " Playlist:"; echo $PLAYLIST; fi echo -n "# savePlaylist: " $XR_CLI savePlaylist $SESSID $TOKEN "$PLAYLIST" || exit $? } existsPlaylist() { echo -n "# existsPlaylist (${PLID}): " EXISTS=`$XR_CLI existsPlaylist $SESSID $PLID` || \ { ERN=$?; echo $EXISTS; exit $ERN; } echo $EXISTS } deletePlaylist() { if [ "$EXISTS" != "FALSE" ]; then echo -n "# deletePlaylist (${PLID}): " # disabled: # $XR_CLI deletePlaylist $SESSID $PLID || exit $? $XR_CLI deletePlaylist $SESSID $PLID 0 echo "# status: $?" fi } exportPlaylist() { storeAudioClip ../tests/0000000000010001 0000000000010001 storeAudioClip ../tests/0000000000010002 0000000000010002 echo -n "# exportPlaylistOpen (${PLID}): " # RES=`$XR_CLI exportPlaylistOpen $SESSID $PLID smil` || \ RES=`$XR_CLI exportPlaylistOpen $SESSID $PLID lspl` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN echo -n "# curl: " curl -Ifs $URL > /dev/null || { ERN=$?; echo $URL; exit $ERN; } echo "status: $?" echo -n "# exportPlaylistClose (${TOKEN}): " RES=`$XR_CLI exportPlaylistClose $TOKEN` || \ { ERN=$?; echo $RES; exit $ERN; } echo $RES } importPlaylist() { echo -n "# importPlaylistOpen: " ARCHIVE=../tests/exportedPl_lspl.tar # ARCHIVE=../tests/exportedPl_smil.tar $XR_CLI deletePlaylist $SESSID 0000000000000001 1 $XR_CLI deletePlaylist $SESSID 0000000000000003 1 $XR_CLI deleteAudioClip $SESSID 0000000000010001 1 $XR_CLI deleteAudioClip $SESSID 0000000000010002 1 $XR_CLI deleteAudioClip $SESSID 0000000000010003 1 CHSUM=`md5sum $ARCHIVE | cut -d ' ' -f 1 ` RES=`$XR_CLI importPlaylistOpen $SESSID $CHSUM` || \ { ERN=$?; echo $RES; exit $ERN; } unset URL for i in $RES; do if [ -z $URL ] ; then URL=$i; else TOKEN=$i; fi; done echo $TOKEN echo -n "# curl (PUT $URL): " curl -C 0 -T $ARCHIVE $URL || { ERN=$?; echo "curl error"; exit $ERN; } echo "status: $?" echo -n "# importPlaylistClose (${TOKEN}): " RES=`$XR_CLI importPlaylistClose $TOKEN` || \ { ERN=$?; echo $RES; exit $ERN; } echo $RES GUNID=0000000000010001; existsAudioClip; GUNID=0000000000010002; existsAudioClip; GUNID=0000000000010003; existsAudioClip; PLID=0000000000000001; existsPlaylist; PLID=0000000000000003; existsPlaylist; } prefTest() { PREFKEY="testKey" PREFVAL="test preference value" echo -n "# savePref ($PREFKEY): " $XR_CLI savePref $SESSID "$PREFKEY" "$PREFVAL"|| exit $? echo -n "# loadPref ($PREFKEY): " VAL=`$XR_CLI loadPref $SESSID "$PREFKEY"` || \ { ERN=$?; echo $VAL; exit $ERN; } echo "$VAL " if [ "x$VAL" != "x$PREFVAL" ] ; then echo " NOT MATCH" echo " Expected:"; echo $PREFVAL echo " Returned:"; echo $VAL exit 1 else echo "# pref value check: OK" fi echo -n "# delPref: " $XR_CLI delPref $SESSID "$PREFKEY"|| exit $? if [ $DEBUG ]; then echo -n "# loadPref: " VAL=`$XR_CLI loadPref $SESSID "$PREFKEY"` || echo $? else echo $VAL fi } groupPrefTest() { PREFKEY="Station frequency" PREFVAL="89.5 FM" GR="StationPrefs" echo -n "# saveGroupPref ($PREFKEY): " $XR_CLI saveGroupPref $SESSID "$GR" "$PREFKEY" "$PREFVAL"|| exit $? echo -n "# loadGroupPref ($PREFKEY): " VAL=`$XR_CLI loadGroupPref $SESSID "$GR" "$PREFKEY"` || \ { ERN=$?; echo $VAL; exit $ERN; } echo "$VAL " if [ "x$VAL" != "x$PREFVAL" ] ; then echo " NOT MATCH" echo " Expected:"; echo $PREFVAL echo " Returned:"; echo $VAL exit 1 else echo "# pref value check: OK" fi echo -n "# saveGroupPref (clear it): " $XR_CLI saveGroupPref $SESSID "$GR" "$PREFKEY" ""|| exit $? } logout() { echo -n "# logout: " $XR_CLI logout $SESSID || exit $? } searchTest() { echo "#XMLRPC search test" login storeAudioClip GUNID=$RGUNID searchMetadata OK="AC(1): $GUNID | PL(0): " if [ "$RES" == "$OK" ]; then echo "match: OK" else echo "results doesn't match ($OK)"; deleteAudioClip; exit 1; fi browseCategory OK="RES(1): Media title testRunner" if [ "$RES" == "$OK" ]; then echo "match: OK" else echo "results doesn't match ($OK)"; deleteAudioClip; exit 1; fi deleteAudioClip logout echo "#XMLRPC: search: OK." echo "" } preferenceTest(){ echo "#XMLRPC preference test" login prefTest groupPrefTest logout echo "#XMLRPC: preference: OK." echo "" } playlistTest(){ echo "#XMLRPC playlists test" login existsPlaylist deletePlaylist createPlaylist existsPlaylist accessPlaylist editPlaylist accessPlaylist exportPlaylist importPlaylist deletePlaylist existsPlaylist logout echo "#XMLRPC: playlists: OK." echo "" } webstreamTest(){ echo "#XMLRPC webstream test" login storeWebstream; GUNID=$RGUNID # GUNID="4e58a66cf6e9f539" # downloadMeta getAudioClip deleteAudioClip logout echo "#XMLRPC: webstream: OK." echo "" } storageTest(){ echo "#XMLRPC: storage test" login storeAudioClip GUNID=$RGUNID existsAudioClip accessRawAudioData downloadRAD downloadMeta deleteAudioClip existsAudioClip logout echo "#XMLRPC: storage: OK." echo "" } usage(){ echo "Usage: $0 [] [args]" echo -e "commands:\n test\n existsAudioClip\n accessRawAudioData" echo -e " storeAudioClip\n deleteAudioClip\n updateAudioClipMetadata" echo -e " getAudioClip\n searchMetadata\n" echo -e " preferences\n playlists\n storage\n" } if [ "$COMM" = "test" ]; then login test logout elif [ "$COMM" = "existsAudioClip" ]; then login existsAudioClip logout elif [ "$COMM" = "accessRawAudioData" ]; then login accessRawAudioData logout elif [ "$COMM" = "storeAudioClip" ]; then login storeAudioClip logout elif [ "$COMM" = "deleteAudioClip" ]; then login deleteAudioClip logout elif [ "$COMM" = "updateAudioClipMetadata" ]; then login updateAudioClipMetadata logout elif [ "$COMM" = "getAudioClip" ]; then login getAudioClip logout elif [ "$COMM" = "searchMetadata" ]; then searchTest elif [ "$COMM" = "preferences" ]; then preferenceTest elif [ "$COMM" = "playlists" ]; then playlistTest elif [ "$COMM" = "webstream" ]; then webstreamTest elif [ "$COMM" = "storage" ]; then storageTest elif [ "x$COMM" = "x" ]; then storageTest playlistTest preferenceTest searchTest elif [ "$COMM" = "help" ]; then usage else echo "Unknown command" usage fi