summaryrefslogtreecommitdiff
path: root/test/scripts/tests
diff options
context:
space:
mode:
Diffstat (limited to 'test/scripts/tests')
-rw-r--r--test/scripts/tests/CalDAV/caldavIOP.xml360
-rw-r--r--test/scripts/tests/CalDAV/ctag.xml802
-rw-r--r--test/scripts/tests/CalDAV/current-user-principal.xml178
3 files changed, 1340 insertions, 0 deletions
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>