#!/bin/bash # # CalConnectCalDAVTest # # Copyright (c) 2005, Simon Vaillancourt. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files, to # deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # NAME # CalConnectCalDAVTest - Test script used at the June 2005 CalConnect # InterOp Test event (see http://www.calconnect.org/ # for more information. # DESCRIPTION # This script uses davtool and wget to send requests to a CalDAV # server and generate a report of every exchange done so it can be # later "visually" validated, the only validation done at runtime # is of the HTTP return code sent by the server. # # HOW TO USE # 1) Make sure you have working versions of wget and davtool in your # PATH. # # 2) Create a configuration file with the following exported # variables: # T_USERNAME1 # User name used to perform the tests. # # T_USERPASSWORD1 # Password of the user. # # T_USERMAIL1 # User email (used to specify organizer and # ATTENDEE properties). # # T_USERMAIL2 # Email of a user used for an additional ATTENDEE. # # T_CALENDARHOSTNAME # Host name of the CalDAV Server. # # T_CALENDARRELATIVEURL # Relative URL of the calendar collection for T_USERNAME1. # # Example of a config file: # #!/bin/bash # export T_USERNAME1=svaillan_ocal1_5066 # export T_USERPASSWORD1=test1 # export T_USERMAIL1=svaillan5066@example.com # export T_USERMAIL2=svaillan9256@example.com # export T_CALENDARHOSTNAME=http://caldav.example.com:8988 # export T_CALENDARRELATIVEURL=/ocaldav/servlet/MyCalDAVServlet/calendars/$T_USERNAME1 # # 3) Run the script passing the config file as a parameter and # redirect output to a report file: # CalConnectCalDAVTest myconfigfile > Report.txt # # HISTORY # yyyy-mm-dd # 2005-12-20 : Updated query formats to CalDAV 08 # 2005-09-11 : Fixed a MAIL_TO typo and a wrong uid was used in test 2.9 # 2005-09-07 : Added REPEAT to VALARM # 2005-06-13 : First public release. # 2005-06-02 : Fixed a few problems found during the interop and # some tests for encoded URLs in reports and # requests. # ############################################################################# # InitialSetup ############################################################################# InitialSetup() { # The config file must define these values: T_CALENDARHOSTNAME= T_CALENDARRELATIVEURL= T_USERNAME1= T_USERPASSWORD1= T_USERMAIL1= T_USERMAIL2= . $1 T_CALENDARURL=$T_CALENDARHOSTNAME$T_CALENDARRELATIVEURL T_DAVTOOL=davtool T_WGET=wget T_WRKDIR=/tmp/wrkdir.$$ trap 'rm -rf $T_WRKDIR' 0 1 2 15 mkdir $T_WRKDIR T_REQFILE=$T_WRKDIR/reqfile.txt T_RESPFILE=$T_WRKDIR/respfile.txt T_UIDPREFIX="CalConnectCalDAVTest." T_MEETINGUID1="${T_UIDPREFIX}Meeting1" T_MEETINGUID2="${T_UIDPREFIX}Meeting2%40encoded" T_MEETINGUID2_DECODED="${T_UIDPREFIX}Meeting2@encoded" T_MEETINGUID3="${T_UIDPREFIX}Meeting3" T_MEETINGUID4="${T_UIDPREFIX}Meeting4" T_MEETINGUID5="${T_UIDPREFIX}Meeting5" T_MEETINGUID6="${T_UIDPREFIX}Meeting6" T_MEETINGUID7="${T_UIDPREFIX}Meeting7" } ############################################################################# # DAVToolWrapper ############################################################################# DAVToolWrapper() { $T_DAVTOOL $@ 1> $T_WRKDIR/dtwrapper.out 2> $T_WRKDIR/dtwrapper2.out RET=$? echo DAVTOOL STDOUT: cat $T_WRKDIR/dtwrapper.out echo echo DAVTOOL STDERR: cat $T_WRKDIR/dtwrapper2.out HTTP_CODE=`cat $T_WRKDIR/dtwrapper2.out | grep "^[0-9]\{3\} " | cut -d ' ' -f 1` if [ "$RET" = "0" ] ; then if [ "$HTTP_CODE" = "" ] ; then echo HTTP_CODE could not be retrieved! RET=1 elif [ "$HTTP_CODE" -ge "400" ] ; then RET=1 fi fi return $RET } ############################################################################# # WGetWrapper ############################################################################# WGetWrapper() { $T_WGET -o $T_WRKDIR/wgetwrapper1.out -O $T_WRKDIR/wgetwrapper2.out --http-user=$T_USERNAME1 --http-passwd=$T_USERPASSWORD1 --proxy=off $@ 2>&1 RET=$? echo WGET OUTPUT: cat $T_WRKDIR/wgetwrapper1.out echo WGET RESPONSE: cat $T_WRKDIR/wgetwrapper2.out return $RET } ############################################################################# # QueryCleanParams ############################################################################# QueryCleanParams() { T_METHOD="REPORT" T_TOP_LEVEL_ELEMENT="C:calendar-query" T_PROPBEGIN="" T_PROPEND="" unset T_EXPAND_RECURR T_FILTER_VCALCOMP="" } ############################################################################# # QueryDumpToFile ############################################################################# QueryDumpToFile() { echo "" echo "<$T_TOP_LEVEL_ELEMENT xmlns:D=\"DAV:\" xmlns:C=\"urn:ietf:params:xml:ns:caldav\">" if [ "$T_PROPBEGIN" != "" ] ; then echo "$T_PROPBEGIN" if [ "$T_CALENDAR_DATA_VCALCOMP" != "" ] ; then echo "$T_CALENDAR_DATA_VCALCOMP" if [ "$T_EXPAND_RECURR" != "" ] ; then echo "" fi echo "" fi echo "$T_PROPEND" fi if [ "$T_FILTER_VCALCOMP" != "" ] ; then echo "$T_FILTER_VCALCOMP" fi if [ "$T_FBELEMENT" != "" ] ; then echo "$T_FBELEMENT" fi if [ "$T_HREF" != "" ] ; then echo "$T_HREF" fi echo "" } > $T_REQFILE ############################################################################# # QuerySubmit ############################################################################# QuerySubmit() { QueryDumpToFile echo "REQUEST FILE DUMP($T_REQFILE):" cat $T_REQFILE CMD="DAVToolWrapper $T_CALENDARURL -t text/xml -m $T_METHOD -i $T_REQFILE -u $T_USERNAME1 -p $T_USERPASSWORD1" echo "COMMAND LINE: $CMD" $CMD RET=$? QUERY_HTTP_CODE=$HTTP_CODE if [ "$RET" != "0" ] ; then T_TESTMSG="DAVTOOL returned an error $RET(QUERY) when running test \"$T_TESTCODE\"($QUERY_HTTP_CODE)" T_TESTRETURNCODE=1 else T_TESTMSG="HTTP return code: $QUERY_HTTP_CODE" fi } ############################################################################# # ICSCleanParams ############################################################################# ICSCleanParams() { unset T_RRULE unset T_DTSTART unset T_DTEND unset T_DTSTART2 unset T_DTEND2 unset T_UID unset T_SUMMARY unset T_SUMMARY2 unset T_LOCATION unset T_LOCATION2 unset T_ATTENDEE1 unset T_ATTENDEE2 unset T_RDATE2 unset T_RECURRENCEID2 unset T_VALARM_TRIGGER unset T_EXDATE T_GETURLTEMPLATE="DAVToolWrapper %s -m GET -u $T_USERNAME1 -p $T_USERPASSWORD1\n" } ############################################################################# # ICSDumpToFile ############################################################################# ICSDumpToFile() { echo "BEGIN:VCALENDAR" echo "VERSION:2.0" echo "PRODID:-//CalConnectCalDAVTest//CalConnectCalDAVTest" if [ "$T_RRULE" != "" ] ; then echo "BEGIN:VTIMEZONE" echo "TZID:EST5EDT" echo "BEGIN:DAYLIGHT" echo "RRULE:FREQ=YEARLY;UNTIL=20750407T020000Z;BYMONTH=4;BYDAY=1SU" echo "TZNAME:Eastern Standard Time\, Eastern Daylight Time" echo "TZOFFSETTO:-0400" echo "TZOFFSETFROM:-0500" echo "DTSTART:19910401T020000" echo "END:DAYLIGHT" echo "BEGIN:STANDARD" echo "RRULE:FREQ=YEARLY;UNTIL=20751031T020000Z;BYMONTH=10;BYDAY=-1SU" echo "TZNAME:Eastern Standard Time\, Eastern Daylight Time" echo "TZOFFSETTO:-0500" echo "TZOFFSETFROM:-0400" echo "DTSTART:19911025T020000" echo "END:STANDARD" echo "END:VTIMEZONE" echo "BEGIN:VEVENT" echo "RRULE$T_RRULE"; else echo "BEGIN:VEVENT" fi if [ "$T_UID" != "" ] ; then echo "UID:$T_UID" fi if [ "$T_EXDATE" != "" ] ; then echo "EXDATE$T_EXDATE" fi if [ "$T_LOCATION" != "" ] ; then echo "LOCATION$T_LOCATION" fi if [ "$T_SUMMARY" != "" ] ; then echo "SUMMARY$T_SUMMARY" fi if [ "$T_DTSTART" != "" ] ; then echo "DTSTART$T_DTSTART" fi if [ "$T_DTEND" != "" ] ; then echo "DTEND$T_DTEND" fi if [ "$T_ATTENDEE1" != "" ] ; then echo "ATTENDEE$T_ATTENDEE1" fi if [ "$T_ATTENDEE2" != "" ] ; then echo "ATTENDEE$T_ATTENDEE2" fi if [ "$T_VALARM_TRIGGER" != "" ] ; then echo "BEGIN:VALARM" echo "TRIGGER$T_VALARM_TRIGGER" echo "DURATION:PT15M" echo "REPEAT:2" echo "DESCRIPTION:A display alarm" echo "ACTION:DISPLAY" echo "END:VALARM" fi if [ "$T_RDATE2" != "" ] ; then echo "RDATE$T_RDATE2" echo "END:VEVENT" echo "BEGIN:VEVENT" echo "UID:$T_UID" if [ "$T_SUMMARY2" != "" ] ; then echo "SUMMARY$T_SUMMARY2" fi if [ "$T_LOCATION2" != "" ] ; then echo "LOCATION$T_LOCATION2" fi echo "RECURRENCE-ID$T_RECURRENCE_ID2" echo "DTSTART$T_DTSTART2" echo "DTEND$T_DTEND2" if [ "$T_ATTENDEE1" != "" ] ; then echo "ATTENDEE$T_ATTENDEE1" fi if [ "$T_ATTENDEE2" != "" ] ; then echo "ATTENDEE$T_ATTENDEE2" fi echo "END:VEVENT" else echo "END:VEVENT" fi echo "END:VCALENDAR" } > $T_REQFILE ############################################################################# # CleanUp ############################################################################# CleanUp() { $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID1} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID2} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID3} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID4} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID5} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID6} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 $T_DAVTOOL $T_CALENDARURL/${T_MEETINGUID7} -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1 } >/dev/null 2>&1 ############################################################################# # TestWrapper ############################################################################# TestWrapper() { T_TESTCODE=$2 T_TESTDESC=$3 T_TESTRETURNCODE=0 T_TESTMSG="" echo ".[STARTING TEST $T_TESTCODE($1)]: $T_TESTDESC" time $1 if [ "$T_TESTRETURNCODE" != "0" ] ; then echo ".[FAILED TEST $T_TESTCODE] : $T_TESTMSG" else echo ".[PASSED TEST $T_TESTCODE] : $T_TESTMSG" fi } ############################################################################# # DeleteURL ############################################################################# DeleteURL() { CMD="DAVToolWrapper $1 -m DELETE -u $T_USERNAME1 -p $T_USERPASSWORD1" echo CMD=$CMD $CMD RET=$? if [ "$RET" != "0" ] ; then T_TESTRETURNCODE=1 T_TESTMSG="Delete $1(Ret=$RET)" else T_TESTMSG="Delete $1(Ret=$RET)" fi } ############################################################################# # ICSSubmit ############################################################################# ICSSubmit() { ICSDumpToFile echo "REQUEST FILE DUMP($T_REQFILE):" cat $T_REQFILE CMD="DAVToolWrapper $T_CALENDARURL/$T_UID.ics -t text/calendar -m PUT -i $T_REQFILE -u $T_USERNAME1 -p $T_USERPASSWORD1" echo "COMMAND LINE: $CMD" $CMD RET=$? PUT_HTTP_CODE=$HTTP_CODE if [ "$RET" != "0" ] ; then T_TESTMSG="DAVTOOL returned an error $RET(PUT) when running test \"$T_TESTCODE\"($PUT_HTTP_CODE)" T_TESTRETURNCODE=1 else CMD=`printf "$T_GETURLTEMPLATE" $T_CALENDARURL/$T_UID.ics` echo "COMMAND LINE: $CMD" $CMD RET=$? if [ "$RET" != "0" ] ; then T_TESTMSG="\"$CMD\" returned an error $RET(GET) when running test \"$T_TESTCODE\" ($PUT_HTTP_CODE)" T_TESTRETURNCODE=1 else T_TESTMSG="HTTP status code : $PUT_HTTP_CODE" fi fi } ############################################################################# # CreateMeeting11 ############################################################################# CreateMeeting11() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1" T_LOCATION=":Durham" T_DTSTART=":20050606T190000Z" T_DTEND=":20050606T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit } ############################################################################# # CreateMeeting12 ############################################################################# CreateMeeting12() { ICSCleanParams T_UID="${T_MEETINGUID2}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.2" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit } ############################################################################# # CreateMeeting13 ############################################################################# CreateMeeting13() { ICSCleanParams T_UID="${T_MEETINGUID3}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.3" T_LOCATION=":Durham" T_DTSTART=":20050606T190000Z" T_DTEND=":20050606T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" T_ATTENDEE2=":MAILTO:$T_USERMAIL2" ICSSubmit } ############################################################################# # CreateMeeting14 ############################################################################# CreateMeeting14() { ICSCleanParams T_UID="${T_MEETINGUID4}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.4" T_LOCATION=":Durham" T_DTSTART=":20050606T190000Z" T_DTEND=":20050606T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" T_VALARM_TRIGGER=":-PT15M" ICSSubmit } ############################################################################# # ModifyMeeting21 ############################################################################# ModifyMeeting21() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1bis" T_LOCATION=":Durham" T_DTSTART=":20050606T190000Z" T_DTEND=":20050606T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit } ############################################################################# # ModifyMeeting22 ############################################################################# ModifyMeeting22() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1bis" T_LOCATION=":Seattle bis" T_DTSTART=":20050606T190000Z" T_DTEND=":20050606T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit } ############################################################################# # ModifyMeeting23 ############################################################################# ModifyMeeting23() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1bis" T_LOCATION=":Seattle bis" T_DTSTART=":20050607T190000Z" T_DTEND=":20050607T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit } ############################################################################# # ModifyMeeting24 ############################################################################# ModifyMeeting24() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1bis" T_LOCATION=":Seattle bis" T_DTSTART=":20050607T190000Z" T_DTEND=":20050607T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" T_ATTENDEE2=":MAILTO:$T_USERMAIL2" ICSSubmit } ############################################################################# # ModifyMeeting25 ############################################################################# ModifyMeeting25() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1bis" T_LOCATION=":Seattle bis" T_DTSTART=":20050607T190000Z" T_DTEND=":20050607T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" T_ATTENDEE2=":MAILTO:$T_USERMAIL2" T_VALARM_TRIGGER=":-PT15M" ICSSubmit } ############################################################################# # ModifyMeeting26 ############################################################################# ModifyMeeting26() { ICSCleanParams T_UID="${T_MEETINGUID2}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.2" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_RDATE2=";TZID=EST5EDT:20050606T100000" T_RECURRENCE_ID2=$T_RDATE2 T_DTSTART2=$T_DTSTART T_DTEND2=$T_DTEND T_SUMMARY2=":${T_UIDPREFIX}Meeting 1.2 bis" ICSSubmit } ############################################################################# # ModifyMeeting27 ############################################################################# ModifyMeeting27() { ICSCleanParams T_UID="${T_MEETINGUID2}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.2" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_RDATE2=";TZID=EST5EDT:20050606T100000" T_RECURRENCE_ID2=$T_RDATE2 T_DTSTART2=$T_DTSTART T_DTEND2=$T_DTEND T_ATTENDEE1=";PARTSTAT=DECLINED:MAILTO:$T_USERMAIL1" T_SUMMARY2=":${T_UIDPREFIX}Meeting 1.2 bis" ICSSubmit } ############################################################################# # ModifyMeeting28 ############################################################################# ModifyMeeting28() { ICSCleanParams T_UID="${T_MEETINGUID2}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.2" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_RDATE2=";TZID=EST5EDT:20050606T100000" T_EXDATE=";TZID=EST5EDT:20050627T100000" T_RECURRENCE_ID2=$T_RDATE2 T_DTSTART2=$T_DTSTART T_DTEND2=$T_DTEND T_ATTENDEE1=";PARTSTAT=DECLINED:MAILTO:$T_USERMAIL1" T_SUMMARY2=":${T_UIDPREFIX}Meeting 1.2 bis" ICSSubmit } ############################################################################# # ModifyMeeting29 ############################################################################# ModifyMeeting29() { ICSCleanParams T_UID="${T_MEETINGUID1}" T_SUMMARY=":${T_UIDPREFIX}Meeting 1.1bis" T_LOCATION=":Seattle bis" T_DTSTART=":20050608T190000Z" T_DTEND=":20050608T200000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" T_GETURLTEMPLATE="WGetWrapper %s\n" ICSSubmit } ############################################################################# # Query3111 ############################################################################# Query3111() { QueryCleanParams QuerySubmit } ############################################################################# # Query3112 ############################################################################# Query3112() { QueryCleanParams T_PROPBEGIN="" T_PROPEND="" QuerySubmit } ############################################################################# # Query3113 ############################################################################# Query3113() { QueryCleanParams T_CALENDAR_DATA_VCALCOMP="" QuerySubmit } ############################################################################# # Query3114 ############################################################################# Query3114() { QueryCleanParams T_CALENDAR_DATA_VCALCOMP=' ' QuerySubmit } ############################################################################# # Query3121 ############################################################################# Query3121() { QueryCleanParams T_FILTER_VCALCOMP="" QuerySubmit } ############################################################################# # Query3122 ############################################################################# Query3122() { QueryCleanParams T_FILTER_VCALCOMP="" T_CALENDAR_DATA_VCALCOMP="" QuerySubmit } ############################################################################# # Query3131 ############################################################################# Query3131() { QueryCleanParams T_FILTER_VCALCOMP="" QuerySubmit } ############################################################################# # Query3132 ############################################################################# Query3132() { QueryCleanParams T_FILTER_VCALCOMP="" QuerySubmit } ############################################################################# # Query3141 ############################################################################# Query3141() { QueryCleanParams T_FILTER_VCALCOMP="" QuerySubmit } ############################################################################# # Query3142 ############################################################################# Query3142() { QueryCleanParams T_FILTER_VCALCOMP="mailto:$T_USERMAIL" QuerySubmit } ############################################################################# # Query3143 ############################################################################# Query3143() { QueryCleanParams T_FILTER_VCALCOMP="mailto:$T_USERMAIL" QuerySubmit } ############################################################################# # Query3151 ############################################################################# Query3151() { QueryCleanParams T_FILTER_VCALCOMP="" QuerySubmit } ############################################################################# # Query3152 ############################################################################# Query3152() { QueryCleanParams T_FILTER_VCALCOMP="mailto:$T_USERMAIL2" QuerySubmit } ############################################################################# # Query321 ############################################################################# Query321() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:calendar-multiget" unset T_FILTER_VCALCOMP T_HREF="$T_CALENDARURL/${T_MEETINGUID1}.ics" QuerySubmit } ############################################################################# # Query322 ############################################################################# Query322() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:calendar-multiget" unset T_FILTER_VCALCOMP T_HREF="$T_CALENDARRELATIVEURL/${T_MEETINGUID1}.ics$T_CALENDARURL/${T_MEETINGUID2}.ics$T_CALENDARURL/${T_UIDPREFIX}DontexistMeeting11.ics" QuerySubmit } ############################################################################# # Query323 ############################################################################# Query323() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:calendar-multiget" unset T_FILTER_VCALCOMP T_HREF="$T_CALENDARURL/${T_MEETINGUID1}.ics" T_PROPBEGIN="" T_PROPEND="" QuerySubmit } ############################################################################# # Query324 ############################################################################# Query324() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:calendar-multiget" unset T_FILTER_VCALCOMP T_HREF="$T_CALENDARURL/${T_MEETINGUID1}.ics$T_CALENDARURL/${T_MEETINGUID2}.ics$T_CALENDARURL/${T_UIDPREFIX}DontexistMeeting11.ics" T_PROPBEGIN="" T_PROPEND="" QuerySubmit } ############################################################################# # Query325 ############################################################################# Query325() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:calendar-multiget" unset T_FILTER_VCALCOMP T_CALENDAR_DATA_VCALCOMP=' ' T_HREF="$T_CALENDARURL/${T_MEETINGUID1}.ics" QuerySubmit } ############################################################################# # Query326 ############################################################################# Query326() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:calendar-multiget" unset T_FILTER_VCALCOMP T_CALENDAR_DATA_VCALCOMP=' ' T_HREF="$T_CALENDARURL/${T_MEETINGUID1}.ics$T_CALENDARURL/${T_MEETINGUID2}.ics$T_CALENDARURL/${T_UIDPREFIX}DontexistMeeting11.ics" QuerySubmit } ############################################################################# # Query331 ############################################################################# Query331() { QueryCleanParams T_TOP_LEVEL_ELEMENT="C:free-busy-query" unset T_FILTER_VCALCOMP unset T_PROPBEGIN unset T_HREF T_FBELEMENT="" QuerySubmit unset T_FBELEMENT } ############################################################################# # Delete41 ############################################################################# Delete41() { DeleteURL "$T_CALENDARURL/${T_MEETINGUID1}.ics" DeleteURL "$T_CALENDARURL/${T_MEETINGUID2_DECODED}.ics" DeleteURL "$T_CALENDARURL/${T_MEETINGUID3}.ics" } ############################################################################# # Delete42 ############################################################################# Delete42() { ICSCleanParams T_UID=${T_MEETINGUID5} T_SUMMARY=":${T_UIDPREFIX}Meeting 4.2" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit DeleteURL $T_CALENDARURL/${T_UID}.ics } ############################################################################# # Delete43 ############################################################################# Delete43() { DeleteURL $T_CALENDARURL/${T_MEETINGUID4}.ics } ############################################################################# # Delete44 ############################################################################# Delete44() { ICSCleanParams T_UID="${T_MEETINGUID6}" T_SUMMARY=":${T_UIDPREFIX}Meeting 4.4" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_ATTENDEE1=":MAILTO:$T_USERMAIL1" ICSSubmit T_EXDATE=";TZID=EST5EDT:20050627T100000" ICSSubmit DeleteURL $T_CALENDARURL/${T_UID}.ics } ############################################################################# # Delete45 ############################################################################# Delete45() { ICSCleanParams T_UID="${T_MEETINGUID7}" T_SUMMARY=":${T_UIDPREFIX}Meeting 4.5" T_LOCATION=":Durham" T_DTSTART=";TZID=EST5EDT:20050606T100000" T_DTEND=";TZID=EST5EDT:20050606T110000" T_RRULE=":FREQ=WEEKLY;UNTIL=20050628T000000Z" T_RDATE2=";TZID=EST5EDT:20050606T100000" T_EXDATE=";TZID=EST5EDT:20050627T100000" T_RECURRENCE_ID2=$T_RDATE2 T_DTSTART2=$T_DTSTART T_DTEND2=$T_DTEND T_ATTENDEE1=";PARTSTAT=DECLINED:MAILTO:$T_USERMAIL1" T_SUMMARY2=":${T_UIDPREFIX}Meeting 4.5 bis" ICSSubmit T_EXDATE=";TZID=EST5EDT:20050606T100000" ICSSubmit DeleteURL $T_CALENDARURL/${T_UID}.ics } ############################################################################# # RunAllTests ############################################################################# RunAllTests() { echo .-------------------------------------------------------------------------------- echo .CalDAV Interop Testing Event - June 2005 echo .-------------------------------------------------------------------------------- echo .Pre-Test Cleanup CleanUp echo .-------------------------------------------------------------------------------- echo .Test 1. Event Creation echo .-------------------------------------------------------------------------------- TestWrapper CreateMeeting11 "1.1" "New single instance meeting." TestWrapper CreateMeeting12 "1.2" "New recurring meeting." TestWrapper CreateMeeting13 "1.3" "New single instance meeting with 2 attendees." TestWrapper CreateMeeting14 "1.4" "New single instance meeting with an alarm." echo .-------------------------------------------------------------------------------- echo .Test 2. Event Modification echo .-------------------------------------------------------------------------------- TestWrapper ModifyMeeting21 "2.1" "Modify meeting title." TestWrapper ModifyMeeting22 "2.2" "Modify meeting location." TestWrapper ModifyMeeting23 "2.3" "Reschedule meeting to next day." TestWrapper ModifyMeeting24 "2.4" "Add an attendee." TestWrapper ModifyMeeting25 "2.5" "Add an alarm." TestWrapper ModifyMeeting26 "2.6" "Modify title of first instance of recurring meeting." TestWrapper ModifyMeeting27 "2.7" "Modify partstat of 1st instance to DECLINED." TestWrapper ModifyMeeting28 "2.8" "Cancel 4th instance of recurring meeting." TestWrapper ModifyMeeting29 "2.9" "One client changes meeting time, other clients sees the modif." echo .-------------------------------------------------------------------------------- echo .Test 3. Event Retrieval echo .-------------------------------------------------------------------------------- echo .Test 3.1 Calendar Query Report echo .-------------------------------------------------------------------------------- echo .Test 3.1.1 No Filtering echo .-------------------------------------------------------------------------------- TestWrapper Query3111 "3.1.1.1" "Query all component, return all data." TestWrapper Query3112 "3.1.1.2" "Query all component, return getetag and all data." TestWrapper Query3113 "3.1.1.3" "Query all component, return VEVENT." TestWrapper Query3114 "3.1.1.4" "Query all component, return some properties." echo .-------------------------------------------------------------------------------- echo ".Test 3.1.2 Time-range filtering" echo .-------------------------------------------------------------------------------- TestWrapper Query3121 "3.1.2.1" "Query all components within a one day time-range with a non-overridden recurring" TestWrapper Query3122 "3.1.2.2" "Query all components within a one week time-range return VEVENT, with overridden instance" echo .-------------------------------------------------------------------------------- echo ".Test 3.1.3 Component based filtering" echo .-------------------------------------------------------------------------------- TestWrapper Query3131 "3.1.3.1" "Query all components with VALARM component" TestWrapper Query3132 "3.1.3.2" "Query all components with VALARM whose TRIGGER is within time-range" echo .-------------------------------------------------------------------------------- echo ".Test 3.1.4 Property based filtering" echo .-------------------------------------------------------------------------------- TestWrapper Query3141 "3.1.4.1" "Query all components that contain ORGANIZER property" TestWrapper Query3142 "3.1.4.2" "Query all components that contain ORGANIZER property with case-insensitive text value" TestWrapper Query3143 "3.1.4.3" "Query all components that contain ORGANIZER property with case-sensitive text value" echo .-------------------------------------------------------------------------------- echo ".Test 3.1.5 Parameter based filtering" echo .-------------------------------------------------------------------------------- TestWrapper Query3151 "3.1.5.1" "Query all components with DTSTART with a TZID" TestWrapper Query3152 "3.1.5.2" "Query all components with ATTENDEE with PART-STAT=NEEDS-ACTION" echo .-------------------------------------------------------------------------------- echo ".Test 3.2 Calendar-multiget report" echo .-------------------------------------------------------------------------------- TestWrapper Query321 "3.2.1" "Query a specific href and return all data" TestWrapper Query322 "3.2.2" "Query multiple hrefs some of which do not exist, return all data" TestWrapper Query323 "3.2.3" "Query a specific href and return getetag and all calendar data" TestWrapper Query324 "3.2.4" "Query multiple hrefs some of which dont exist return getetag and all calendar data" TestWrapper Query325 "3.2.5" "Query specific href, return VEVENT(DTSTART,DTEND,DURATION,SUMMARY,UID,SEQUENCE,RRULE,RDATE,EXRULE,EXDATE,RECURRENCE-ID" TestWrapper Query326 "3.2.6" "Query multiple hrefs, return VEVENT(DTSTART,DTEND,DURATION,SUMMARY,UID,SEQUENCE,RRULE,RDATE,EXRULE,EXDATE,RECURRENCE-ID" echo .-------------------------------------------------------------------------------- echo ".Test 3.3 free-busy-query report" echo .-------------------------------------------------------------------------------- TestWrapper Query331 "3.3.1" "free-busy-query time range" echo .-------------------------------------------------------------------------------- echo .Test 4. Event Deletion echo .-------------------------------------------------------------------------------- TestWrapper Delete41 "4.1" "Delete single non-recurring meeting." TestWrapper Delete42 "4.2" "Delete single recurring meeting." TestWrapper Delete43 "4.3" "Delete single recurring meeting with overridden instances." TestWrapper Delete44 "4.4" "Delete a non-overriden instance of a recurring meeting." TestWrapper Delete45 "4.5" "Delete an overriden instance of a recurring meeting." echo .-------------------------------------------------------------------------------- echo .Test 5. Event Access Control echo .-------------------------------------------------------------------------------- } 2>&1 ############################################################################# # Main ############################################################################# if [ -f "$1" ] ; then echo ".Config file to be used: \"$1\"" else echo "usage: runtest " exit 1 fi which wget >/dev/null 2>&1 wgetret=$? which davtool >/dev/null 2>&1 davtoolret=$? if [ "$wgetret" != "0" ] ; then echo "ERROR: The wget utility must be in your PATH." exit 1 fi if [ "$davtoolret" != "0" ] ; then echo "ERROR: The davtool utility must be in your PATH." exit 1 fi InitialSetup $1 ( time RunAllTests $1 ) > $T_WRKDIR/report.txt 2>&1 echo -------------------------------------------------------------------------------- echo SUMMARY REPORT echo -------------------------------------------------------------------------------- grep ^\\. $T_WRKDIR/report.txt | cut -c2-256 echo -------------------------------------------------------------------------------- echo DETAILED REPORT echo -------------------------------------------------------------------------------- cat $T_WRKDIR/report.txt