#!/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_TOP_LEVEL_ELEMENT>"
} > $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