diff options
author | Thomas Bruederli <bruederli@kolabsys.com> | 2013-07-17 15:19:33 (GMT) |
---|---|---|
committer | Thomas Bruederli <bruederli@kolabsys.com> | 2013-07-17 15:19:33 (GMT) |
commit | 358afce60a38f8e6da0dba9fdc0241237e2947d5 (patch) | |
tree | 337150ac8f96dc78a18e1aa7d122b11f455ddbf0 /test | |
parent | 113f921dfeece7e3115fd861016c4943e0cc0571 (diff) | |
download | iRony-358afce60a38f8e6da0dba9fdc0241237e2947d5.tar.gz |
Add integration tests based on the CalDAVTester suite
Diffstat (limited to 'test')
34 files changed, 3124 insertions, 0 deletions
diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..296974d --- /dev/null +++ b/test/README.md @@ -0,0 +1,56 @@ +Unit Tests for iRony CalDAV/CardDAV/WebDAV Server +================================================= + +The tests are based on the [CalDAVTester][1] suite and require the Python-based +suite to be installed and set up before. + + +Installation +------------ + +Download and configure the CalDAVTester suite according to the descroptions +in the [wiki][1]. Install it anywhere on your system. + +Make sure the pxcalendar package is installed. Do this by running + + $ cd <path-to-caldavtester-directory> + $ ./run.py -s + + + +Configure Tests +--------------- + +The settings for the Kolab server to test are saved in `serverinfo.xml` +located in this `test` folder. + +Adjust the following properties in your local `serverinfo.xml` file: + +* serverinfo.host + +as well as the values of the following substitution keys: + +* $root: +* $userid%d: +* $username%d: +* $username-encoded%d: +* $firstname%d: +* $lastname%d: +* $pswd%d: + +Make sure that two users matching the patterns of $userid%d and subsequent do +exist on the Kolab server that is to be tested with. Default user accounts +are set to dav.user01@<domain> and dav.user02@<domain> with password "12345". + + +Running the Tests +----------------- + +This `test` directory contains a helper script `runtests.sh` that runs all +tests with the CalDAVTester suite. Run it as follows: + + $ cd <iRony-directory>/test + $ ./runtests.sh <path-to-caldavtester-directory> + + +[1]: http://trac.calendarserver.org/wiki/CalDAVTester diff --git a/test/Resource/CalDAV/caldaviop/1/1_1.txt b/test/Resource/CalDAV/caldaviop/1/1_1.txt new file mode 100644 index 0000000..02d4093 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/1/1_1.txt @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T090000 +DURATION:PT1H +LOCATION:Durham +SUMMARY:Meeting 1.1 +UID:1-1_1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/1/1_2.txt b/test/Resource/CalDAV/caldaviop/1/1_2.txt new file mode 100644 index 0000000..26c859a --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/1/1_2.txt @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232548Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T100000 +DURATION:PT1H +RRULE:FREQ=WEEKLY;COUNT=4 +SUMMARY:Meeting 1.2 +UID:1-1_2 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/1/1_3.txt b/test/Resource/CalDAV/caldaviop/1/1_3.txt new file mode 100644 index 0000000..b7e1415 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/1/1_3.txt @@ -0,0 +1,34 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddr1: +ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr2: +ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr3: +DTSTAMP:20051228T232640Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T111500 +DURATION:PT1H +ORGANIZER;CN=$username1::$cuaddr1: +SUMMARY:Meeting 1.3 +UID:1-1_3 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/1/1_4.txt b/test/Resource/CalDAV/caldaviop/1/1_4.txt new file mode 100644 index 0000000..5a69565 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/1/1_4.txt @@ -0,0 +1,34 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T234558Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T120000 +DURATION:PT1H +SUMMARY:Meeting 1.4 +UID:1-1_4 +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;RELATED=START:-PT15M +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_1.txt b/test/Resource/CalDAV/caldaviop/2/2_1.txt new file mode 100644 index 0000000..1e40ee2 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_1.txt @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T090000 +DURATION:PT1H +LAST-MODIFIED:20051229T031237Z +LOCATION:Durham +SEQUENCE:1 +SUMMARY:Meeting 1.1bis +UID:1-1_1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_2.txt b/test/Resource/CalDAV/caldaviop/2/2_2.txt new file mode 100644 index 0000000..4e6ca18 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_2.txt @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T090000 +DURATION:PT1H +LAST-MODIFIED:20051229T031253Z +LOCATION:Seattle bis +SEQUENCE:2 +SUMMARY:Meeting 1.1bis +UID:1-1_1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_3.txt b/test/Resource/CalDAV/caldaviop/2/2_3.txt new file mode 100644 index 0000000..51b0f06 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_3.txt @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0110T090000 +DURATION:PT1H +LAST-MODIFIED:20051229T031307Z +LOCATION:Seattle bis +SEQUENCE:3 +SUMMARY:Meeting 1.1bis +UID:1-1_1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_4.txt b/test/Resource/CalDAV/caldaviop/2/2_4.txt new file mode 100644 index 0000000..f37ef76 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_4.txt @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;ROLE=CHAIR:$cuaddr1: +ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr2: +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0110T090000 +DURATION:PT1H +LAST-MODIFIED:20051229T031335Z +LOCATION:Seattle bis +ORGANIZER;CN=$username1::$cuaddr1: +SEQUENCE:4 +SUMMARY:Meeting 1.1bis +UID:1-1_1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_5.txt b/test/Resource/CalDAV/caldaviop/2/2_5.txt new file mode 100644 index 0000000..857e604 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_5.txt @@ -0,0 +1,40 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;ROLE=CHAIR:$cuaddr1: +ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr2: +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0110T090000 +DURATION:PT1H +LAST-MODIFIED:20051229T031502Z +LOCATION:Seattle bis +ORGANIZER;CN=$username1::$cuaddr1: +SEQUENCE:5 +SUMMARY:Meeting 1.1bis +UID:1-1_1 +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;RELATED=START:-PT15M +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_6.txt b/test/Resource/CalDAV/caldaviop/2/2_6.txt new file mode 100644 index 0000000..b0267b5 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_6.txt @@ -0,0 +1,43 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232548Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T100000 +DURATION:PT1H +LAST-MODIFIED:20051229T031626Z +RRULE:FREQ=WEEKLY;COUNT=4 +SEQUENCE:1 +SUMMARY:Meeting 1.2 +UID:1-1_2 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20051228T232548Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T100000 +DURATION:PT1H +LAST-MODIFIED:20051229T031626Z +SEQUENCE:1 +SUMMARY:Meeting 1.2bis +UID:1-1_2 +RECURRENCE-ID:$now.year.1:0109T150000Z +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_7.txt b/test/Resource/CalDAV/caldaviop/2/2_7.txt new file mode 100644 index 0000000..6231689 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_7.txt @@ -0,0 +1,35 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddr1: +ATTENDEE;PARTSTAT=DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr2: +ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr3: +DTSTAMP:20051228T232640Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T111500 +DURATION:PT1H +ORGANIZER;CN=$username1::$cuaddr1: +SEQUENCE:1 +SUMMARY:Meeting 1.3 +UID:1-1_3 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_8.txt b/test/Resource/CalDAV/caldaviop/2/2_8.txt new file mode 100644 index 0000000..564b4d6 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_8.txt @@ -0,0 +1,44 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051228T232548Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T100000 +DURATION:PT1H +EXDATE;TZID=US/Eastern:$now.year.1:0130T100000 +LAST-MODIFIED:20051229T031649Z +RRULE:FREQ=WEEKLY;COUNT=4 +SEQUENCE:2 +SUMMARY:Meeting 1.2 +UID:1-1_2 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20051228T232548Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T100000 +DURATION:PT1H +LAST-MODIFIED:20051229T031626Z +SEQUENCE:2 +SUMMARY:Meeting 1.2bis +UID:1-1_2 +RECURRENCE-ID:$now.year.1:0109T150000Z +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/2/2_9.txt b/test/Resource/CalDAV/caldaviop/2/2_9.txt new file mode 100644 index 0000000..50e6c66 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/2/2_9.txt @@ -0,0 +1,40 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;ROLE=CHAIR:$cuaddr1: +ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:$cuaddr2: +DTSTAMP:20051228T232517Z +DTSTART;TZID=US/Eastern:$now.year.1:0110T120000 +DURATION:PT1H +LAST-MODIFIED:20051229T031502Z +LOCATION:Seattle bis +ORGANIZER;CN=$username1::$cuaddr1: +SEQUENCE:5 +SUMMARY:Meeting 1.1bis +UID:1-1_1 +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;RELATED=START:-PT15M +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_1.txt b/test/Resource/CalDAV/caldaviop/4/4_1.txt new file mode 100644 index 0000000..b4ef093 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_1.txt @@ -0,0 +1,30 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035051Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T110000 +DURATION:PT1H +SUMMARY:Meeting 4.1 +UID:4-4_1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_2.txt b/test/Resource/CalDAV/caldaviop/4/4_2.txt new file mode 100644 index 0000000..7f28371 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_2.txt @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035131Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T120000 +DURATION:PT1H +RRULE:FREQ=DAILY;COUNT=5 +SUMMARY:Meeting 4.2 +UID:4-4_2 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_3.txt b/test/Resource/CalDAV/caldaviop/4/4_3.txt new file mode 100644 index 0000000..f46dc65 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_3.txt @@ -0,0 +1,39 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035241Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T130000 +DURATION:PT1H +RRULE:FREQ=DAILY;COUNT=5 +SUMMARY:Meeting 4.3 +UID:4-4_3 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20051229T035241Z +DTSTART;TZID=US/Eastern:$now.year.1:0110T130000 +DURATION:PT2H +RECURRENCE-ID:$now.year.1:0110T180000Z +SUMMARY:Meeting 4.3 +UID:4-4_3 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_4a.txt b/test/Resource/CalDAV/caldaviop/4/4_4a.txt new file mode 100644 index 0000000..8cd09bc --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_4a.txt @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035317Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T140000 +DURATION:PT1H +RRULE:FREQ=DAILY;COUNT=5 +SUMMARY:Meeting 4.4 +UID:4-4_4 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_4b.txt b/test/Resource/CalDAV/caldaviop/4/4_4b.txt new file mode 100644 index 0000000..fc3ef20 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_4b.txt @@ -0,0 +1,34 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035317Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T140000 +DURATION:PT1H +EXDATE;TZID=US/Eastern:$now.year.1:0110T140000 +LAST-MODIFIED:20051229T035328Z +RRULE:FREQ=DAILY;COUNT=5 +SEQUENCE:1 +SUMMARY:Meeting 4.4 +UID:4-4_4 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_5a.txt b/test/Resource/CalDAV/caldaviop/4/4_5a.txt new file mode 100644 index 0000000..21a066d --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_5a.txt @@ -0,0 +1,39 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035352Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T150000 +DURATION:PT1H +RRULE:FREQ=DAILY;COUNT=5 +SUMMARY:Meeting 4.5 +UID:4-4_5 +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20051229T035352Z +DTSTART;TZID=US/Eastern:$now.year.1:0110T150000 +DURATION:PT2H +RECURRENCE-ID:$now.year.1:0110T200000Z +SUMMARY:Meeting 4.5 +UID:4-4_5 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/caldaviop/4/4_5b.txt b/test/Resource/CalDAV/caldaviop/4/4_5b.txt new file mode 100644 index 0000000..a5ce450 --- /dev/null +++ b/test/Resource/CalDAV/caldaviop/4/4_5b.txt @@ -0,0 +1,34 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051229T035352Z +DTSTART;TZID=US/Eastern:$now.year.1:0109T150000 +DURATION:PT1H +EXDATE;TZID=US/Eastern:$now.year.1:0110T150000 +LAST-MODIFIED:20051229T035404Z +RRULE:FREQ=DAILY;COUNT=5 +SEQUENCE:1 +SUMMARY:Meeting 4.5 +UID:4-4_5 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/ctag/1.xml b/test/Resource/CalDAV/ctag/1.xml new file mode 100644 index 0000000..657fa27 --- /dev/null +++ b/test/Resource/CalDAV/ctag/1.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" ?> +<D:propfind xmlns:D="DAV:" xmlns:A="http://calendarserver.org/ns/"> +<D:prop> +<A:getctag/> +</D:prop> +</D:propfind> diff --git a/test/Resource/CalDAV/ctag/2.ics b/test/Resource/CalDAV/ctag/2.ics new file mode 100644 index 0000000..b259a29 --- /dev/null +++ b/test/Resource/CalDAV/ctag/2.ics @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051222T205953Z +CREATED:20060101T150000Z +DTSTART;TZID=US/Eastern:$now.year.1:0101T100000 +DURATION:PT1H +SUMMARY:event 1 +UID:2 +ORGANIZER;CN=$username1::$cuaddr2: +ATTENDEE;CN=$username2::$cuaddr1: +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/ctag/3.xml b/test/Resource/CalDAV/ctag/3.xml new file mode 100644 index 0000000..2ab1ce8 --- /dev/null +++ b/test/Resource/CalDAV/ctag/3.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<D:propfind xmlns:D="DAV:" xmlns:A="http://calendarserver.org/ns/" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="com.apple.ical:"> +<D:prop> +<D:resourcetype/> +<D:displayname/> +<A:getctag/> +<I:calendarcolor/> +<C:calendar-description/> +<D:resourcetype/> +</D:prop> +</D:propfind> diff --git a/test/Resource/CalDAV/current-user-principal/1.xml b/test/Resource/CalDAV/current-user-principal/1.xml new file mode 100644 index 0000000..dffedc6 --- /dev/null +++ b/test/Resource/CalDAV/current-user-principal/1.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" ?> +<D:propfind xmlns:D="DAV:"> +<D:prop> +<D:current-user-principal/> +</D:prop> +</D:propfind> diff --git a/test/Resource/CalDAV/event/1.txt b/test/Resource/CalDAV/event/1.txt new file mode 100644 index 0000000..c5b7f9b --- /dev/null +++ b/test/Resource/CalDAV/event/1.txt @@ -0,0 +1,30 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051222T205953Z +DTSTART;TZID=US/Eastern:$now.year.1:0101T100000 +DURATION:PT1H +SUMMARY:event 1 +UID:1 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/event/2.txt b/test/Resource/CalDAV/event/2.txt new file mode 100644 index 0000000..68a601b --- /dev/null +++ b/test/Resource/CalDAV/event/2.txt @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Mountain +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:MDT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:MST +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051222T210052Z +DTSTART;TZID=US/Mountain:$now.year.1:0101T110000 +DURATION:PT1H +SUMMARY:event 2 +DESCRIPTION:Some notes +UID:2 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/event/3.txt b/test/Resource/CalDAV/event/3.txt new file mode 100644 index 0000000..7cb5da6 --- /dev/null +++ b/test/Resource/CalDAV/event/3.txt @@ -0,0 +1,32 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Pacific +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:PDT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:PST +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051222T210146Z +DTSTART;TZID=US/Pacific:$now.year.1:0101T130000 +DURATION:PT1H +LAST-MODIFIED:20051222T210203Z +SEQUENCE:1 +SUMMARY:event 3 +UID:3 +END:VEVENT +END:VCALENDAR diff --git a/test/Resource/CalDAV/event/4.txt b/test/Resource/CalDAV/event/4.txt new file mode 100644 index 0000000..b078d46 --- /dev/null +++ b/test/Resource/CalDAV/event/4.txt @@ -0,0 +1,34 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Example Inc.//Example Calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +LAST-MODIFIED:20040110T032845Z +TZID:US/Eastern +BEGIN:DAYLIGHT +DTSTART:20000404T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZNAME:EDT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20001026T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZNAME:EST +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20051222T210310Z +DTSTART;TZID=US/Eastern:$now.year.1:0101T180000 +DURATION:PT1H +SUMMARY:event 4 +UID:4 +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;RELATED=START:-PT10M +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/test/runtests.sh b/test/runtests.sh new file mode 100755 index 0000000..f4b4160 --- /dev/null +++ b/test/runtests.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# +# Copyright (C) 2013, Kolab Systems AG <contact@kolabsys.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +## +# Initializes the CalDAVTester environment and runs all test scripts +# + +CALDAVTESTER=$1 +PYTHONPATH=`$CALDAVTESTER/run.py -p` + +export PYTHONPATH="$PYTHONPATH:$CALDAVTESTER/../pycalendar/src" + +$CALDAVTESTER/testcaldav.py --print-details-onfail -s serverinfo.xml \ + CalDAV/current-user-principal.xml \ + CalDAV/caldavIOP.xml \ + CalDAV/ctag.xml + + diff --git a/test/scripts/tests/CalDAV/caldavIOP.xml b/test/scripts/tests/CalDAV/caldavIOP.xml new file mode 100644 index 0000000..0665bda --- /dev/null +++ b/test/scripts/tests/CalDAV/caldavIOP.xml @@ -0,0 +1,360 @@ +<?xml version="1.0" standalone="no"?> + +<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd"> + +<!-- + Copyright (c) 2006-2013 Apple Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<caldavtest> + + <require-feature> + <feature>caldav</feature> + </require-feature> + + <start/> + + <test-suite name='1. Event Creation'> + <test name='1.1'> + <description>Create new single-instance meeting titled "Meeting 1.1" with the location "Durham".</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/1/1_1.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='1.2'> + <description>Create new meeting titled "Meeting 1.2" recurring every Monday from 10:00 AM to 11:00 AM for 4 weeks.</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_2.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/1/1_2.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='1.3'> + <description>Create new single-instance meeting titled "Meeting 1.3" with 2 other attendees.</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_3.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/1/1_3.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='1.4'> + <description>Create new single-instance meeting titled "Meeting 1.4" with an alarm set to trigger 15 minutes prior to the schedule time of the meeting.</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_4.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/1/1_4.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + </test-suite> + + <test-suite name='2. Event Modification'> + <test name='2.1'> + <description>Modify the title of meeting "Meeting 1.1" to "Meeting 1.1bis".</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_1.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.2'> + <description>Modify the location of the meeting "Meeting 1.1bis" to "Seattle bis".</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_2.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.3'> + <description>Reschedule meeting "Meeting 1.1bis" to the next day.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_3.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.4'> + <description>Add an attendee to "Meeting 1.1bis".</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_4.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.5'> + <description>Add an alarm to "Meeting 1.1bis".</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_5.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.6'> + <description>Modify the title of the 1st instance of the recurring meeting created in 1.2.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_2.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_6.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.7'> + <description>Modify the participation status of 1st instance to DECLINED.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_3.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_7.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.8'> + <description>Cancel the 4th instance of the recurring meeting created in 1.2.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_2.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_8.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='2.9'> + <description>One client changes "Meeting 1.1bis" to a different time, second client 'refreshes' its display to see the modification.</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/1-1_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/2/2_9.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + </test-suite> + + <test-suite name='4. Event Deletion'> + <test name='4.1'> + <description>Delete a single non-recurring meeting.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_1.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>DELETE</method> + <ruri>$calendarpath1:/4-4_1.ics</ruri> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='4.2'> + <description>Delete a single recurring meeting with no overridden instances.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_2.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_2.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>DELETE</method> + <ruri>$calendarpath1:/4-4_2.ics</ruri> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='4.3'> + <description>Delete a single recurring meeting with overridden instances.</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_3.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_3.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>DELETE</method> + <ruri>$calendarpath1:/4-4_3.ics</ruri> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='4.4'> + <description>Delete a non-overridden instance of a recurring meeting.</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_4.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_4a.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_4.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_4b.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='4.5'> + <description>Delete an overridden instance of a recurring meeting.</description> + <request end-delete='yes'> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_5.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_5a.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/4-4_5.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/caldaviop/4/4_5b.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + </test-suite> + + <end> + <request user="$userid1:" pswd="$pswd1:"> + <method>DELETEALL</method> + <ruri>$calendarpath1:/</ruri> + </request> + <request user="$userid1:" pswd="$pswd1:"> + <method>DELETEALL</method> + <ruri>$inboxpath1:/</ruri> + </request> + <request user="$userid2:" pswd="$pswd2:"> + <method>DELETEALL</method> + <ruri>$calendarpath2:/</ruri> + </request> + <request user="$userid2:" pswd="$pswd2:"> + <method>DELETEALL</method> + <ruri>$inboxpath2:/</ruri> + </request> + <request user="$userid3:" pswd="$pswd3:"> + <method>DELETEALL</method> + <ruri>$calendarpath3:/</ruri> + </request> + <request user="$userid3:" pswd="$pswd3:"> + <method>DELETEALL</method> + <ruri>$inboxpath3:/</ruri> + </request> + </end> + +</caldavtest> diff --git a/test/scripts/tests/CalDAV/ctag.xml b/test/scripts/tests/CalDAV/ctag.xml new file mode 100644 index 0000000..fbcb0ed --- /dev/null +++ b/test/scripts/tests/CalDAV/ctag.xml @@ -0,0 +1,802 @@ +<?xml version="1.0" standalone="no"?> + +<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd"> + +<!-- + Copyright (c) 2006-2013 Apple Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<caldavtest> + <description>Test the collection entity tag behavior on calendar collections</description> + + <require-feature> + <feature>caldav</feature> + <feature>ctag</feature> + </require-feature> + + <start> + <request end-delete="yes"> + <method>PUT</method> + <ruri>$calendarpath1:/1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/event/1.txt</filepath> + </data> + </request> + <request> + <method>MKCALENDAR</method> + <ruri>$calendarhome1:/movecopy/</ruri> + </request> + <request> + <method>PUT</method> + <ruri>$calendarhome1:/movecopy/2.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/event/2.txt</filepath> + </data> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarhome1:/movecopy/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag2:</variable> + </grabproperty> + </request> + </start> + + <test-suite name='PUT/DELETE/COPY/MOVE' ignore='no'> + <test name='1'> + <description>Check for CTag</description> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='2'> + <description>Check for CTag</description> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag1:</value> + </arg> + </verify> + </request> + </test> + <test name='3'> + <description>Check for CTag change on DELETE</description> + <request> + <method>DELETE</method> + <ruri>$calendarpath1:/1.ics</ruri> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='4'> + <description>Check for CTag change on PUT of new resource</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/event/1.txt</filepath> + </data> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='5'> + <description>Check for CTag change on PUT of existing resource</description> + <request> + <method>PUT</method> + <ruri>$calendarpath1:/1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/event/1.txt</filepath> + </data> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='6'> + <require-feature> + <feature>MOVE Method</feature> + </require-feature> + <description>Check for CTag change on MOVE of new resource</description> + <request> + <method>MOVE</method> + <ruri>$calendarpath1:/1.ics</ruri> + <header> + <name>Destination</name> + <value>$host:$calendarhome1:/movecopy/1.ics</value> + </header> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarhome1:/movecopy/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag2:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag2:</variable> + </grabproperty> + </request> + </test> + <test name='7'> + <require-feature> + <feature>COPY Method</feature> + </require-feature> + <exclude-feature> + <feature>no-duplicate-uids</feature> + </exclude-feature> + <description>Check for CTag change on COPY of new resource</description> + <request> + <method>COPY</method> + <ruri>$calendarhome1:/movecopy/2.ics</ruri> + <header> + <name>Destination</name> + <value>$host:$calendarpath1:/2.ics</value> + </header> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarhome1:/movecopy/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag2:</value> + </arg> + </verify> + </request> + </test> + <test name='8'> + <require-feature> + <feature>COPY Method</feature> + </require-feature> + <exclude-feature> + <feature>no-duplicate-uids</feature> + </exclude-feature> + <description>Check for CTag change on COPY of existing resource</description> + <request> + <method>COPY</method> + <ruri>$calendarhome1:/movecopy/2.ics</ruri> + <header> + <name>Destination</name> + <value>$host:$calendarpath1:/2.ics</value> + </header> + <verify> + <callback>statusCode</callback> + </verify> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarhome1:/movecopy/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag2:</value> + </arg> + </verify> + </request> + </test> + <!-- TODO: kolab_storage_cache::uid2msguid() returns false resutls after copy (multiple messages for one UID exist) --> + <test name='9' ignore='yes'> + <require-feature> + <feature>MOVE Method</feature> + </require-feature> + <exclude-feature> + <feature>no-duplicate-uids</feature> + </exclude-feature> + <description>Check for no CTag change on failed MOVE of existing resource</description> + <request> + <method>MOVE</method> + <ruri>$calendarpath1:/1.ics</ruri> + <header> + <name>Destination</name> + <value>$host:$calendarhome1:/movecopy/2.ics</value> + </header> + <verify> + <callback>statusCode</callback> + <arg> + <name>status</name> + <value>404</value> + </arg> + </verify> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag1:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + <request> + <method>PROPFIND</method> + <ruri>$calendarhome1:/movecopy/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag2:</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag2:</variable> + </grabproperty> + </request> + </test> + </test-suite> + + <!-- TODO: enable these tests once scheduling is implemented --> + <test-suite name='Scheduling' ignore='no'> + <require-feature> + <feature>schedule-inbox</feature> + </require-feature> + + <test name='1'> + <description>Check for CTag on calendar</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag3:</variable> + </grabproperty> + </request> + </test> + <test name='2'> + <description>Check for CTag on inbox</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$inboxpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag4:</variable> + </grabproperty> + </request> + </test> + <test name='3'> + <description>PUT invite</description> + <request user="$userid2:" pswd="$pswd2:" print-response='no'> + <method>PUT</method> + <ruri>$calendarpath2:/2.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/2.ics</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name="4"> + <description>Test calendar ctag change</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag3:</value> + </arg> + </verify> + </request> + </test> + <test name="5"> + <require-feature> + <feature>schedule-ext</feature> + </require-feature> + <description>Test inbox ctag change</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$inboxpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag!$getctag4:</value> + </arg> + </verify> + </request> + </test> + </test-suite> + + <test-suite name='Same for each Depth' ignore='no'> + <test name='1'> + <description>Check for CTag Depth:0</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='2'> + <description>Check for CTag Depth:1</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarhome1:/</ruri> + <header> + <name>Depth</name> + <value>1</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>only</name> + <value>$calendarpath1:/</value> + </arg> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag1:</value> + </arg> + </verify> + </request> + </test> + <test name='3'> + <description>Add/update resource</description> + <request end-delete="yes"> + <method>PUT</method> + <ruri>$calendarpath1:/1.ics</ruri> + <data> + <content-type>text/calendar; charset=utf-8</content-type> + <filepath>Resource/CalDAV/event/1.txt</filepath> + </data> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='4'> + <description>Check for CTag Depth:0</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='5'> + <description>Check for CTag Depth:1</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarhome1:/</ruri> + <header> + <name>Depth</name> + <value>1</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>only</name> + <value>$calendarpath1:/</value> + </arg> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag1:</value> + </arg> + </verify> + </request> + </test> + <test name='6'> + <description>Delete resource</description> + <request> + <method>DELETE</method> + <ruri>$calendarpath1:/1.ics</ruri> + <verify> + <callback>statusCode</callback> + </verify> + </request> + </test> + <test name='7'> + <description>Check for CTag Depth:0</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarpath1:/</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag</value> + </arg> + </verify> + <grabproperty> + <property>{http://calendarserver.org/ns/}getctag</property> + <variable>$getctag1:</variable> + </grabproperty> + </request> + </test> + <test name='8'> + <description>Check for CTag Depth:1</description> + <request print-response='no'> + <method>PROPFIND</method> + <ruri>$calendarhome1:/</ruri> + <header> + <name>Depth</name> + <value>1</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/ctag/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>only</name> + <value>$calendarpath1:/</value> + </arg> + <arg> + <name>okprops</name> + <value>{http://calendarserver.org/ns/}getctag$$getctag1:</value> + </arg> + </verify> + </request> + </test> + </test-suite> + + <end> + <request> + <method>DELETEALL</method> + <ruri>$calendarpath1:/</ruri> + </request> + <request user="$userid2:" pswd="$pswd2:"> + <method>DELETEALL</method> + <ruri>$calendarpath2:/</ruri> + </request> + <request> + <method>DELETEALL</method> + <ruri>$inboxpath1:/</ruri> + </request> + <request user="$userid2:" pswd="$pswd2:"> + <method>DELETEALL</method> + <ruri>$inboxpath2:/</ruri> + </request> + <request> + <method>DELETE</method> + <ruri>$calendarhome1:/movecopy/</ruri> + </request> + </end> + +</caldavtest> diff --git a/test/scripts/tests/CalDAV/current-user-principal.xml b/test/scripts/tests/CalDAV/current-user-principal.xml new file mode 100644 index 0000000..4324903 --- /dev/null +++ b/test/scripts/tests/CalDAV/current-user-principal.xml @@ -0,0 +1,178 @@ +<?xml version="1.0" standalone="no"?> + +<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd"> + +<!-- + Copyright (c) 2006-2013 Apple Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<caldavtest> + <description>Test DAV:current-user-principal support</description> + + <require-feature> + <feature>caldav</feature> + <feature>current-user-principal</feature> + </require-feature> + + <start/> + + <test-suite name='Check for the property on /' ignore='no'> + <test name='1' ignore='no'> + <description>Check for authenticated property on /</description> + <request> + <method>PROPFIND</method> + <ruri>$root:</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri1:</href>]]></value> + </arg> + </verify> + </request> + </test> + <test name='2' ignore='no'> + <description>Check for unauthenticated property on /</description> + <request auth="no"> + <method>PROPFIND</method> + <ruri>$root:</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath> + </data> + <verify> + <callback>statusCode</callback> + <arg> + <name>status</name> + <value>401</value> + </arg> + </verify> +<!-- <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value><![CDATA[{DAV:}current-user-principal$<unauthenticated xmlns="DAV:"/>]]></value> + </arg> + </verify> +--> + </request> + </test> + <test name='3' ignore='no'> + <description>Check for authenticated property on / (user02)</description> + <request user="$userid2:" pswd="$pswd2:"> + <method>PROPFIND</method> + <ruri>$root:</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri2:</href>]]></value> + </arg> + </verify> + </request> + </test> + </test-suite> + + <test-suite name='Check for the property on /principals/' ignore='no'> + <test name='1' ignore='no'> + <description>Check for authenticated property on /</description> + <request> + <method>PROPFIND</method> + <ruri>$principalcollection:</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri1:</href>]]></value> + </arg> + </verify> + </request> + </test> + <test name='2' ignore='no'> + <description>Check for unauthenticated property on /</description> + <request auth="no"> + <method>PROPFIND</method> + <ruri>$principalcollection:</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath> + </data> + <verify> + <callback>statusCode</callback> + <arg> + <name>status</name> + <value>401</value> + </arg> + </verify> + </request> + </test> + <test name='3' ignore='no'> + <description>Check for authenticated property on / (user02)</description> + <request user="$userid2:" pswd="$pswd2:"> + <method>PROPFIND</method> + <ruri>$principalcollection:</ruri> + <header> + <name>Depth</name> + <value>0</value> + </header> + <data> + <content-type>text/xml; charset=utf-8</content-type> + <filepath>Resource/CalDAV/current-user-principal/1.xml</filepath> + </data> + <verify> + <callback>propfindItems</callback> + <arg> + <name>okprops</name> + <value><![CDATA[{DAV:}current-user-principal$<href xmlns="DAV:">$principaluri2:</href>]]></value> + </arg> + </verify> + </request> + </test> + </test-suite> + + <end/> +</caldavtest> diff --git a/test/serverinfo.xml b/test/serverinfo.xml new file mode 100644 index 0000000..30c4df3 --- /dev/null +++ b/test/serverinfo.xml @@ -0,0 +1,809 @@ +<?xml version="1.0" standalone="no"?> + +<!DOCTYPE serverinfo SYSTEM "serverinfo.dtd"> + +<!-- + Copyright (c) 2006-2013 Apple Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<serverinfo> + <host>localhost</host> + <nonsslport>80</nonsslport> + <sslport>443</sslport> + <authtype>basic</authtype> + + <features> + <!-- Generic WebDAV extensions --> + <feature>COPY Method</feature> <!-- COPY method --> + <feature>MOVE Method</feature> <!-- MOVE method --> + <feature>Extended MKCOL</feature> <!-- Extended MKCOL --> + + <!-- ACL related --> + <!-- <feature>ACL Method</feature> --> <!-- ACL method --> + <!-- <feature>acl-principal-prop-set REPORT</feature> --> <!-- ACL acl-principal-prop-set REPORT --> + <!-- <feature>principal-match REPORT</feature> --> <!-- ACL principal-match REPORT --> + <!-- <feature>principal-property-search REPORT</feature> --> <!-- ACL principal-property-search REPORT --> + <!-- <feature>principal-search-property-set REPORT</feature> --> <!-- ACL principal-search-property-set REPORT --> + + <!-- <feature>add-member</feature> --> <!-- Add-member used to create resources --> + <!-- <feature>brief</feature> --> <!-- Brief header for PROPFIND, REPORT --> + <!-- <feature>bulk-post</feature> --> <!-- Bulk POST requests --> + <feature>ctag</feature> <!-- ctag extension --> + <feature>current-user-principal</feature> <!-- current-user-principal extension --> + <!-- <feature>directory listing</feature> --> <!-- GET on collection --> + <!-- <feature>extended-principal-search</feature> --> <!-- Extended principal-property-search REPORT extension --> + <!-- <feature>expand-property</feature> --> <!-- Expand property REPORT --> + <!-- <feature>only-proxy-groups</feature> --> <!-- Group-membership only includes delegated-to groups --> + <!-- <feature>limits</feature> --> <!-- max-collections and max-resources limits --> + <!-- <feature>prefer</feature> --> <!-- Prefer header overall support --> + <!-- <feature>prefer-minimal</feature> --> <!-- Prefer header return=minimal --> + <!-- <feature>prefer-representation</feature> --> <!-- Prefer header return=representation --> + <!-- <feature>prefer-noroot</feature> --> <!-- Prefer header depth-noroot --> + <!-- <feature>quota</feature> --> <!-- WebDAV QUOTA --> + <!-- <feature>quota-on-resources</feature> --> <!-- WebDAV QUOTA on calendar and address book object resources --> + <!-- <feature>resource-id</feature> --> <!-- WebDAV BIND DAV:resource-id property --> + <!-- <feature>sync-report</feature> --> <!-- WebDAV collection sync REPORT --> + <!-- <feature>sync-report-home</feature> --> <!-- WebDAV collection sync REPORT on Homes --> + <feature>well-known</feature> <!-- well-known feature --> + + <!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books --> + <!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes --> + + <!-- CalDAV specific extension --> + <feature>caldav</feature> <!-- Basic CalDAV feature enabler --> + <!-- <feature>auto-accept</feature> --> <!-- Auto-accept for rooms & locations --> + <!-- <feature>auto-accept-modes</feature> --> <!-- Auto-accept modes --> + <!--<feature>dropbox</feature> --> <!-- dropbox extension --> + <!-- <feature>default-alarms</feature> --> <!-- default alarms extension --> + <!-- <feature>EMAIL parameter</feature> --> <!-- Server normalizes cuaddress and adds EMAIL parameter --> + <!-- <feature>extended-freebusy</feature> --> <!-- Extended freebusy response --> + <!-- <feature>implicit-scheduling</feature> --> <!-- CalDAV scheduling - implicit --> + <!-- <feature>location-resource-tracking</feature> --> <!-- Server tracks who makes unscheduled changes to locations and resources --> + <!-- <feature>managed-attachments</feature> --> <!-- CalDAV Managed Attachments --> + <!-- <feature>maskuid</feature> --> <!-- maskuid extension --> + <!-- <feature>partitioning</feature> --> <!-- Partitioned server --> + <!-- <feature>no-duplicate-uids</feature> --> <!-- duplicate UIDs in same home not supported --> + <!-- <feature>partstat-timestamp</feature> --> <!-- Time stamps when PARTSTAT changes extension --> + <!-- <feature>private-comments</feature> --> <!-- private-comments extension --> + <!-- <feature>private-events</feature> --> <!-- private-events extension --> + <!-- <feature>proxy</feature> --> <!-- calendar-user-proxy extension --> + <!-- <feature>proxy-authz</feature> --> <!-- sudo user extension --> + <!-- <feature>remove-duplicate-alarms</feature> --> <!-- Server removes any duplicate alarms on PUT --> + <!-- <feature>query-extended</feature> --> <!-- calendar-query-extended extension --> + <!-- <feature>shared-calendars</feature> --> <!-- Shared calendars extension --> + <!--><feature>schedule-inbox</feature> --> <!-- Scheduling Extension --> + <!-- <feature>schedule-changes</feature> --> <!-- schedule-changes property extension --> + <!-- <feature>split-calendars</feature> --> <!-- Calendars are split by component type --> + <!-- <feature>supported-component-sets</feature> --> <!-- CALDAV:supported-calendar-component-sets on calendar homes --> + <!-- <feature>supported-component-sets-one</feature> --> <!-- Only single component calendars allowed to be created --> + <!-- <feature>timerange-low-limit</feature> --> <!-- Time-range only valid one year back --> + <!-- <feature>timerange-high-limit</feature> --> <!-- Time-range only valid 5 years ahead --> + <!-- <feature>timezone-service</feature> --> <!-- Timezone service extension for Wiki--> + <!-- <feature>timezone-std-service</feature> --> <!-- Timezone standard service extension --> + <!-- <feature>vavailability</feature> --> <!-- VAVAILABILITY on inbox --> + <!-- <feature>webcal</feature> --> <!-- Internet calendar subscription via GET on calendar collection --> + + <!-- CardDAV specific extension --> + <!-- <feature>carddav</feature> --> <!-- Basic CardDAV feature enabler --> + <!-- <feature>default-addressbook</feature> --> <!-- Default address book behavior --> + <!-- <feature>global-addressbook</feature> --> <!-- Global address book for each user --> + <!-- <feature>shared-addressbooks</feature> --> <!-- Shared address books extension --> + <!-- <feature>directory-gateway</feature> --> <!-- Directory gateway extension --> + + </features> + + <substitutions> + <!-- relative path to caldav root--> + <substitution> + <key>$root:</key> + <value>/dav/</value> + </substitution> + + <!-- Useful xpath shortcuts for verifiers --> + <substitution> + <key>$multistatus-response-prefix:</key> + <value>/{DAV:}multistatus/{DAV:}response</value> + </substitution> + <substitution> + <key>$multistatus-href-prefix:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value> + </substitution> + <substitution> + <key>$verify-response-prefix:</key> + <value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value> + </substitution> + <substitution> + <key>$verify-property-prefix:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value> + </substitution> + <substitution> + <key>$verify-bad-response:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value> + </substitution> + <substitution> + <key>$verify-error-response:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value> + </substitution> + <substitution> + <key>$CALDAV:</key> + <value>urn:ietf:params:xml:ns:caldav</value> + </substitution> + <substitution> + <key>$CARDDAV:</key> + <value>urn:ietf:params:xml:ns:carddav</value> + </substitution> + <substitution> + <key>$CS:</key> + <value>http://calendarserver.org/ns/</value> + </substitution> + + <!-- Server configuration settings --> + <!-- $host: and $hostssl: are implicitly added by CalDAVTester based + on the host/nonsslport/sslport values and ssl command line switch --> + + <!-- relative path to main principal collection--> + <substitution> + <key>$principalcollection:</key> + <value>$root:principals/</value> + </substitution> + + <!-- the core recored type collections--> + <substitution> + <key>$uidstype:</key> + <value>__uids__</value> + </substitution> + <substitution> + <key>$userstype:</key> + <value>users</value> + </substitution> + <substitution> + <key>$groupstype:</key> + <value>groups</value> + </substitution> + <substitution> + <key>$locationstype:</key> + <value>locations</value> + </substitution> + <substitution> + <key>$resourcestype:</key> + <value>resources</value> + </substitution> + + <!-- relative path to record type principal collections--> + <substitution> + <key>$principals_uids:</key> + <value>$principalcollection:$uidstype:/</value> + </substitution> + <substitution> + <key>$principals_users:</key> + <value>$principalcollection:$userstype:/</value> + </substitution> + <substitution> + <key>$principals_groups:</key> + <value>$principalcollection:$groupstype:/</value> + </substitution> + <substitution> + <key>$principals_resources:</key> + <value>$principalcollection:$resourcestype:/</value> + </substitution> + <substitution> + <key>$principals_locations:</key> + <value>$principalcollection:$locationstype:/</value> + </substitution> + + <!-- relative path to calendars collection--> + <substitution> + <key>$calendars:</key> + <value>$root:calendars/</value> + </substitution> + + <!-- relative path to record type calendar collections--> + <substitution> + <key>$calendars_uids:</key> + <value>$calendars:$uidstype:/</value> + </substitution> + <substitution> + <key>$calendars_users:</key> + <value>$calendars:$userstype:/</value> + </substitution> + <substitution> + <key>$calendars_groups:</key> + <value>$calendars:$groupstype:/</value> + </substitution> + <substitution> + <key>$calendars_resources:</key> + <value>$calendars:$resourcestype:/</value> + </substitution> + <substitution> + <key>$calendars_locations:</key> + <value>$calendars:$locationstype:/</value> + </substitution> + + <!-- primary calendar name--> + <substitution> + <key>$calendar:</key> + <value>Calendar</value> + </substitution> + + <!-- primary tasks-only calendar name--> + <substitution> + <key>$tasks:</key> + <value>Tasks</value> + </substitution> + + <!-- inbox name--> + <substitution> + <key>$inbox:</key> + <value>inbox</value> + </substitution> + + <!-- outbox name--> + <substitution> + <key>$outbox:</key> + <value>outbox</value> + </substitution> + + <!-- dropbox name--> + <substitution> + <key>$dropbox:</key> + <value>dropbox</value> + </substitution> + + <!-- attachments name--> + <substitution> + <key>$attachments:</key> + <value>dropbox</value> + </substitution> + + <!-- notification name--> + <substitution> + <key>$notification:</key> + <value>notification</value> + </substitution> + + <!-- freebusy name--> + <substitution> + <key>$freebusy:</key> + <value>freebusy</value> + </substitution> + + <!-- server-to-server inbox--> + <substitution> + <key>$servertoserver:</key> + <value>$root:inbox</value> + </substitution> + + <!-- timezone service--> + <substitution> + <key>$timezoneservice:</key> + <value>$root:timezones</value> + </substitution> + + <!-- timezone std service--> + <substitution> + <key>$timezonestdservice:</key> + <value>$root:stdtimezones</value> + </substitution> + + <!-- relative path to calendars collection--> + <substitution> + <key>$addressbooks:</key> + <value>$root:addressbooks/</value> + </substitution> + + <!-- relative path to record type calendar collections--> + <substitution> + <key>$addressbooks_uids:</key> + <value>$addressbooks:$uidstype:/</value> + </substitution> + <substitution> + <key>$addressbooks_users:</key> + <value>$addressbooks:$userstype:/</value> + </substitution> + <substitution> + <key>$addressbooks_groups:</key> + <value>$addressbooks:$groupstype:/</value> + </substitution> + + <!-- primary addressbook name --> + <substitution> + <key>$addressbook:</key> + <value>Contacts</value> + </substitution> + + <!-- directory name --> + <substitution> + <key>$directory:</key> + <value>$root:directory/</value> + </substitution> + + <!-- global-addressbook name --> + <substitution> + <key>$global_addressbook:</key> + <value>global-addressbook</value> + </substitution> + + <!-- POST add-member URI suffix --> + <substitution> + <key>$add-member:</key> + <value>;add-member</value> + </substitution> + + <!-- user id for admin user --> + <substitution> + <key>$useradmin:</key> + <value>admin</value> + </substitution> + <!-- guid for admin user --> + <substitution> + <key>$useradminguid:</key> + <value>admin</value> + </substitution> + <!-- password for admin user --> + <substitution> + <key>$pswdadmin:</key> + <value>admin</value> + </substitution> + + <!-- relative path to admin principal resource--> + <substitution> + <key>$principal_admin:</key> + <value>$principalcollection:$useradmin:/</value> + </substitution> + <substitution> + <key>$principaluri_admin:</key> + <value>$principalcollection:$useradminguid:/</value> + </substitution> + + <!-- user id for apprentice user --> + <substitution> + <key>$userapprentice:</key> + <value>apprentice</value> + </substitution> + <!-- guid for apprentice user --> + <substitution> + <key>$userapprenticeguid:</key> + <value>apprentice</value> + </substitution> + <!-- password for apprentice user --> + <substitution> + <key>$pswdapprentice:</key> + <value>apprentice</value> + </substitution> + + <!-- relative path to apprentice principal resource--> + <substitution> + <key>$principal_apprentice:</key> + <value>$principalcollection:$userapprentice:/</value> + </substitution> + <substitution> + <key>$principaluri_apprentice:</key> + <value>$principalcollection:$userapprenticeguid:/</value> + </substitution> + + <!-- user id for proxy user --> + <substitution> + <key>$userproxy:</key> + <value>superuser</value> + </substitution> + <!-- password for proxy user --> + <substitution> + <key>$pswdproxy:</key> + <value>superuser</value> + </substitution> + + <!-- User accounts --> + <repeat count="2"> + <!-- user id --> + <substitution> + <key>$userid%d:</key> + <value>dav.user%02d@brotherli.ch</value> + </substitution> + <!-- user guid --> + <substitution> + <key>$userguid%d:</key> + <value>$userid%d:</value> + </substitution> + <!-- user name --> + <substitution> + <key>$username%d:</key> + <value>DAV User%02d</value> + </substitution> + <!-- user name URI encoded --> + <substitution> + <key>$username-encoded%d:</key> + <value>DAV%%20User%02d</value> + </substitution> + <!-- first name --> + <substitution> + <key>$firstname%d:</key> + <value>DAV</value> + </substitution> + <!-- last name --> + <substitution> + <key>$lastname%d:</key> + <value>User %02d</value> + </substitution> + <!-- password --> + <substitution> + <key>$pswd%d:</key> + <value>12345</value> + </substitution> + <!-- relative path to user principal resource--> + <substitution> + <key>$principal%d:</key> + <value>$principalcollection:$userid%d:/</value> + </substitution> + <substitution> + <key>$principaluri%d:</key> + <value>$principalcollection:$userguid%d:/</value> + </substitution> + <substitution> + <key>$principal%dnoslash:</key> + <value>$principalcollection:$userid%d:</value> + </substitution> + + <!-- relative path to user calendar home--> + <substitution> + <key>$calendarhome%d:</key> + <value>$calendars:$userguid%d:</value> + </substitution> + <!-- relative path to user alternate calendar home--> + <substitution> + <key>$calendarhomealt%d:</key> + <value>$calendars:$userid%d:</value> + </substitution> + <!-- relative path to user calendar--> + <substitution> + <key>$calendarpath%d:</key> + <value>$calendarhome%d:/$calendar:</value> + </substitution> + <!-- relative path to user alternate calendar--> + <substitution> + <key>$calendarpathalt%d:</key> + <value>$calendarhomealt%d:/$calendar:</value> + </substitution> + <!-- relative path to user tasks calendar--> + <substitution> + <key>$taskspath%d:</key> + <value>$calendarhome%d:/$tasks:</value> + </substitution> + <!-- relative path to user inbox--> + <substitution> + <key>$inboxpath%d:</key> + <value>$calendarhome%d:/$inbox:</value> + </substitution> + <!-- relative path to user outbox--> + <substitution> + <key>$outboxpath%d:</key> + <value>$calendarhome%d:/$outbox:</value> + </substitution> + <!-- relative path to user dropbox--> + <substitution> + <key>$dropboxpath%d:</key> + <value>$calendarhome%d:/$dropbox:</value> + </substitution> + <!-- relative path to user notification--> + <substitution> + <key>$notificationpath%d:</key> + <value>$calendarhome%d:/$notification:</value> + </substitution> + <!-- relative path to user freebusy--> + <substitution> + <key>$freebusypath%d:</key> + <value>$calendarhome%d:/$freebusy:</value> + </substitution> + <substitution> + <key>$email%d:</key> + <value>$userid%d:@example.com</value> + </substitution> + <!-- calendar user address of user--> + <substitution> + <key>$cuaddr%d:</key> + <value>mailto:$email%d:</value> + </substitution> + <substitution> + <key>$cuaddralt%d:</key> + <value>$principaluri%d:</value> + </substitution> + <substitution> + <key>$cuaddraltnoslash%d:</key> + <value>$principals_uids:$userguid%d:</value> + </substitution> + <substitution> + <key>$cuaddrurn%d:</key> + <value>urn:uuid:$userguid%d:</value> + </substitution> + + <!-- relative path to user addressbook home--> + <substitution> + <key>$addressbookhome%d:</key> + <value>$addressbooks_uids:$userguid%d:</value> + </substitution> + <!-- relative path to user addressbook--> + <substitution> + <key>$addressbookpath%d:</key> + <value>$addressbooks_uids:$userguid%d:/$addressbook:</value> + </substitution> + </repeat> + + <!-- Public accounts --> + <repeat count="0"> + <!-- user id --> + <substitution> + <key>$publicuserid%d:</key> + <value>public%02d</value> + </substitution> + <!-- user guid --> + <substitution> + <key>$publicuserguid%d:</key> + <value>public%02d</value> + </substitution> + <!-- user name --> + <substitution> + <key>$publicusername%d:</key> + <value>Public %02d</value> + </substitution> + <!-- password --> + <substitution> + <key>$publicpswd%d:</key> + <value>public%02d</value> + </substitution> + <!-- relative path to user principal resource--> + <substitution> + <key>$publicprincipal%d:</key> + <value>$principals_users:$publicuserid%d:/</value> + </substitution> + <substitution> + <key>$publicprincipaluri%d:</key> + <value>$principals_uids:$publicuserguid%d:/</value> + </substitution> + <!-- relative path to user calendar home--> + <substitution> + <key>$publiccalendarhome%d:</key> + <value>$calendars:$publicuserguid%d:</value> + </substitution> + <!-- relative path to user calendar--> + <substitution> + <key>$publiccalendarpath%d:</key> + <value>$calendars:$publicuserguid%d:/$calendar:</value> + </substitution> + <substitution> + <key>$publicemail%d:</key> + <value>$publicuserid%d:@example.com</value> + </substitution> + <!-- calendar user address of user--> + <substitution> + <key>$publiccuaddr%d:</key> + <value>mailto:$publicemail%d:</value> + </substitution> + <substitution> + <key>$publiccuaddralt%d:</key> + <value>$publicprincipaluri%d:</value> + </substitution> + <substitution> + <key>$publiccuaddrurn%d:</key> + <value>urn:uuid:$publicuserguid%d:</value> + </substitution> + </repeat> + + <!-- Resource accounts --> + <repeat count="0"> + <substitution> + <key>$resourceid%d:</key> + <value>resource%02d</value> + </substitution> + <!-- resource guid--> + <substitution> + <key>$resourceguid%d:</key> + <value>resource%02d</value> + </substitution> + <!-- resource name--> + <substitution> + <key>$resourcename%d:</key> + <value>Resource %02d</value> + </substitution> + <!-- relative path to first resource calendar home--> + <substitution> + <key>$rcalendarhome%d:</key> + <value>$calendars:$resourceguid%d:</value> + </substitution> + <!-- relative path to first resource calendar home--> + <substitution> + <key>$rcalendarpath%d:</key> + <value>$calendars:$resourceguid%d:/$calendar:</value> + </substitution> + <!-- relative path to first resource inbox--> + <substitution> + <key>$rinboxpath%d:</key> + <value>$calendars:$resourceguid%d:/$inbox:</value> + </substitution> + <!-- relative path to first resource outbox--> + <substitution> + <key>$routboxpath%d:</key> + <value>$calendars:$resourceguid%d:/$outbox:</value> + </substitution> + <!-- relative path to first resource principal resource--> + <substitution> + <key>$rprincipal%d:</key> + <value>$principals_resources:$resourceid%d:/</value> + </substitution> + <substitution> + <key>$rprincipaluri%d:</key> + <value>$principals_uids:$resourceguid%d:/</value> + </substitution> + <substitution> + <key>$rcuaddralt%d:</key> + <value>$rprincipaluri%d:</value> + </substitution> + <substitution> + <key>$rcuaddrurn%d:</key> + <value>urn:uuid:$resourceguid%d:</value> + </substitution> + </repeat> + + <!-- Location accounts --> + <repeat count="0"> + <substitution> + <key>$locationid%d:</key> + <value>location%02d</value> + </substitution> + <!-- location guid--> + <substitution> + <key>$locationguid%d:</key> + <value>location%02d</value> + </substitution> + <!-- location name--> + <substitution> + <key>$locationname%d:</key> + <value>Location %02d</value> + </substitution> + <!-- relative path to first location calendar home--> + <substitution> + <key>$lcalendarhome%d:</key> + <value>$calendars:$locationguid%d:</value> + </substitution> + <!-- relative path to first location calendar home--> + <substitution> + <key>$lcalendarpath%d:</key> + <value>$calendars:$locationguid%d:/$calendar:</value> + </substitution> + <!-- relative path to first location inbox--> + <substitution> + <key>$linboxpath%d:</key> + <value>$calendars:$locationguid%d:/$inbox:</value> + </substitution> + <!-- relative path to first location outbox--> + <substitution> + <key>$loutboxpath%d:</key> + <value>$calendars:$locationguid%d:/$outbox:</value> + </substitution> + <!-- relative path to first location principal resource--> + <substitution> + <key>$lprincipal%d:</key> + <value>$principals_resources:$locationid%d:/</value> + </substitution> + <substitution> + <key>$lprincipaluri%d:</key> + <value>$principals_uids:$locationguid%d:/</value> + </substitution> + <substitution> + <key>$lcuaddralt%d:</key> + <value>$lprincipaluri%d:</value> + </substitution> + <substitution> + <key>$lcuaddrurn%d:</key> + <value>urn:uuid:$locationguid%d:</value> + </substitution> + </repeat> + + + <!-- Group accounts --> + <repeat count="0"> + <substitution> + <key>$groupid%d:</key> + <value>group%02d</value> + </substitution> + <!-- group guid--> + <substitution> + <key>$groupguid%d:</key> + <value>group%02d</value> + </substitution> + <!-- group name--> + <substitution> + <key>$groupname%d:</key> + <value>Group %02d</value> + </substitution> + <!-- relative path to first group principal resource--> + <substitution> + <key>$gprincipal%d:</key> + <value>$principals_resources:$groupid%d:/</value> + </substitution> + <substitution> + <key>$gprincipaluri%d:</key> + <value>$principals_uids:$groupguid%d:/</value> + </substitution> + <substitution> + <key>$gcuaddralt%d:</key> + <value>$gprincipaluri%d:</value> + </substitution> + <substitution> + <key>$gcuaddrurn%d:</key> + <value>urn:uuid:$groupguid%d:</value> + </substitution> + </repeat> + + <!-- User with non-ascii name --> + <substitution> + <key>$i18nid:</key> + <value>i18nuser</value> + </substitution> + <!-- group guid--> + <substitution> + <key>$i18nguid:</key> + <value>i18nuser</value> + </substitution> + <!-- group name--> + <substitution> + <key>$i18nname:</key> + <value>まだ</value> + </substitution> + <!-- password --> + <substitution> + <key>$i18npswd:</key> + <value>i18nuser</value> + </substitution> + <!-- relative path to user calendar--> + <substitution> + <key>$i18ncalendarpath:</key> + <value>$calendars:$i18nguid:/$calendar:</value> + </substitution> + <substitution> + <key>$i18nemail:</key> + <value>$i18nid:@example.com</value> + </substitution> + <!-- CUAddrs --> + <substitution> + <key>$i18ncuaddr:</key> + <value>mailto:$i18nemail:</value> + </substitution> + <substitution> + <key>$i18ncuaddrurn:</key> + <value>urn:uuid:$i18nguid:</value> + </substitution> + + <!-- relative path to disabled group principal resource--> + <substitution> + <key>$principaldisabled:</key> + <value>$principals_groups:disabledgroup/</value> + </substitution> + <substitution> + <key>$principaluridisabled:</key> + <value>$principals_uids:disabledgroup/</value> + </substitution> + <!-- calendar user address of disabled group--> + <substitution> + <key>$cuaddrdisabled:</key> + <value>$principals_uids:disabledgroup/</value> + </substitution> + + <!-- calendar user address of second user--> + <substitution> + <key>$cuaddr2:</key> + <value>MAILTO:$email2:</value> + </substitution> + + </substitutions> +</serverinfo> |