[CalendarServer-changes] [7203] CalDAVTester/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 16 18:22:18 PDT 2011
Revision: 7203
http://trac.macosforge.org/projects/calendarserver/changeset/7203
Author: cdaboo at apple.com
Date: 2011-03-16 18:22:16 -0700 (Wed, 16 Mar 2011)
Log Message:
-----------
Bulk POST request tests.
Modified Paths:
--------------
CalDAVTester/trunk/scripts/server/serverinfo-partitioning.xml
CalDAVTester/trunk/scripts/server/serverinfo-template.xml
CalDAVTester/trunk/scripts/server/serverinfo.xml
CalDAVTester/trunk/scripts/server/sslserverinfo.xml
CalDAVTester/trunk/scripts/tests/CalDAV/caldavtest.dtd
CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd
Added Paths:
-----------
CalDAVTester/trunk/Resource/CalDAV/bulk/
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/1.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/2.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/3.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/4.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/5.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/6.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/7.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/1.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/2.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/3.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/4.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/5.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/6.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/7.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/1.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/2.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/3.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/4.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/5.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/properties/
CalDAVTester/trunk/Resource/CalDAV/bulk/properties/1.xml
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/1.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/10.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/2.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/3.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/4.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/5.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/6.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/7.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/8.ics
CalDAVTester/trunk/Resource/CalDAV/bulk/simple/9.ics
CalDAVTester/trunk/Resource/CardDAV/bulk/
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/1.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/2.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/3.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/4.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/5.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/6.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/7.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/1.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/2.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/3.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/4.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/5.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/6.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/7.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/1.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/2.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/3.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/4.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/5.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/properties/
CalDAVTester/trunk/Resource/CardDAV/bulk/properties/1.xml
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/1.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/10.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/2.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/3.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/4.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/5.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/6.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/7.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/8.vcf
CalDAVTester/trunk/Resource/CardDAV/bulk/simple/9.vcf
CalDAVTester/trunk/Resource/Common/PROPFIND/getctag.xml
CalDAVTester/trunk/scripts/tests/CalDAV/bulk.xml
CalDAVTester/trunk/scripts/tests/CardDAV/bulk.xml
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/2.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/2.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/2.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/3.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/3.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/3.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/4.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/4.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/4.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<MM:if-match>
+<D:getetag>$etag1:1</D:getetag>
+</MM:if-match>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T193000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:href>$href2:</D:href>
+<MM:if-match>
+<D:getetag>$etag2:2</D:getetag>
+</MM:if-match>
+<MM:delete/>
+</MM:resource>
+<MM:resource>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid03
+DTSTART;TZID=Etc/GMT+5:$now.0:T220000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 3
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/5.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/5.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/5.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid03
+DTSTART;TZID=Etc/GMT+5:$now.0:T220000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 3
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/6.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/6.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/6.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<MM:if-match>
+<D:getetag>$etag1:</D:getetag>
+</MM:if-match>
+<MM:delete/>
+</MM:resource>
+<MM:resource>
+<D:href>$href2:</D:href>
+<MM:if-match>
+<D:getetag>$etag2:</D:getetag>
+</MM:if-match>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T210000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2-2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/7.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/7.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-ifmatch/7.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T210000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2-2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/2.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/2.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/2.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/3.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/3.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/3.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T190000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/4.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/4.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/4.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T190000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/5.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/5.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/5.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/6.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/6.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/6.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T193000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:href>$href2:</D:href>
+<MM:delete/>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/7.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/7.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-multiple/7.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T193000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/2.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/2.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/2.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/3.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/3.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/3.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<D:prop>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T190000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/4.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/4.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/4.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<C:calendar-data><![CDATA[BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+]]>
+</C:calendar-data>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/5.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/5.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/crud-one/5.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/properties/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/properties/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/properties/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<D:propfind xmlns:D="DAV:" xmlns:MM="http://me.com/_namespace/">
+<D:prop>
+<MM:bulk-requests/>
+</D:prop>
+</D:propfind>
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/1.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/1.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/1.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/10.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/10.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/10.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,27 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+RRULE:FREQ=DAILY;COUNT=400
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/2.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/2.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/2.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/3.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/3.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/3.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+5:$now.0:T190000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/4.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/4.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/4.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T190000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/5.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/5.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/5.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/6.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/6.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/6.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid02
+DTSTART;TZID=Etc/GMT+8:$now.0:T190000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 2
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/7.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/7.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/7.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T200000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1-1
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID:user01-uid03
+DTSTART;TZID=Etc/GMT+8:$now.0:T210000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 3
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/8.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/8.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/8.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid03
+DTSTART;TZID=Etc/GMT+8:$now.0:T210000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 3
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CalDAV/bulk/simple/9.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/bulk/simple/9.ics (rev 0)
+++ CalDAVTester/trunk/Resource/CalDAV/bulk/simple/9.ics 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,27 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:user01-uid01
+DTSTART;TZID=Etc/GMT+5:$now.0:T180000
+DURATION:PT1H
+DTSTAMP:20051222T210310Z
+SUMMARY:event 1
+RRULE:FREQ=DAILY
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER;RELATED=START:-PT10M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/2.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/2.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/2.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/3.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/3.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/3.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/4.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/4.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/4.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<MM:if-match>
+<D:getetag>$etag1:1</D:getetag>
+</MM:if-match>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-2 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:href>$href2:</D:href>
+<MM:if-match>
+<D:getetag>$etag2:2</D:getetag>
+</MM:if-match>
+<MM:delete/>
+</MM:resource>
+<MM:resource>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:03;User;;;
+FN:User 03
+EMAIL;type=INTERNET;type=WORK;type=pref:user03 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid03
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/5.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/5.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/5.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:03;User;;;
+FN:User 03
+EMAIL;type=INTERNET;type=WORK;type=pref:user03 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid03
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/6.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/6.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/6.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<MM:if-match>
+<D:getetag>$etag1:</D:getetag>
+</MM:if-match>
+<MM:delete/>
+</MM:resource>
+<MM:resource>
+<D:href>$href2:</D:href>
+<MM:if-match>
+<D:getetag>$etag2:</D:getetag>
+</MM:if-match>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-2 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/7.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/7.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-ifmatch/7.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-2 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/2.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/2.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/2.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/3.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/3.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/3.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-1 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/4.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/4.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/4.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-1 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/5.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/5.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/5.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/6.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/6.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/6.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:href>$href1:</D:href>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-2 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+<MM:resource>
+<D:href>$href2:</D:href>
+<MM:delete/>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/7.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/7.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-multiple/7.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245-2 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/2.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/2.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/2.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/3.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/3.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/3.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<D:prop>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;XXXX Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+]]>
+</C:address-data>
+</D:prop>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/4.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/4.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/4.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MM:multiput xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav" xmlns:MM="http://me.com/_namespace/">
+<MM:resource>
+<D:set>
+<C:address-data><![CDATA[BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
+]]>
+</C:address-data>
+</D:set>
+</MM:resource>
+</MM:multiput>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/5.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/5.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/crud-one/5.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/properties/1.xml
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/properties/1.xml (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/properties/1.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<D:propfind xmlns:D="DAV:" xmlns:MM="http://me.com/_namespace/">
+<D:prop>
+<MM:bulk-requests/>
+</D:prop>
+</D:propfind>
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/1.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/1.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/1.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/10.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/10.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/10.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/2.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/2.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/2.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;XXXX Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/3.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/3.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/3.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/4.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/4.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/4.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,20 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/5.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/5.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/5.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/6.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/6.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/6.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:02;User;;;
+FN:User 02
+EMAIL;type=INTERNET;type=WORK;type=pref:user02 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid02
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/7.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/7.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/7.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,20 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;XXXX Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
+BEGIN:VCARD
+VERSION:3.0
+N:03;User;;;
+FN:User 03
+EMAIL;type=INTERNET;type=WORK;type=pref:user03 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid03
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/8.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/8.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/8.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:03;User;;;
+FN:User 03
+EMAIL;type=INTERNET;type=WORK;type=pref:user03 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid03
+END:VCARD
Added: CalDAVTester/trunk/Resource/CardDAV/bulk/simple/9.vcf
===================================================================
--- CalDAVTester/trunk/Resource/CardDAV/bulk/simple/9.vcf (rev 0)
+++ CalDAVTester/trunk/Resource/CardDAV/bulk/simple/9.vcf 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,10 @@
+BEGIN:VCARD
+VERSION:3.0
+N:01;User;;;
+FN:User 01
+EMAIL;type=INTERNET;type=WORK;type=pref:user01 at example.com
+TEL;type=WORK;type=pref:1-555-555-5555
+TEL;type=CELL:1-444-444-4444
+ADR;type=WORK;type=pref:;;1245 Test;Sesame Street;California;11111;USA
+UID:user01-uid01
+END:VCARD
Added: CalDAVTester/trunk/Resource/Common/PROPFIND/getctag.xml
===================================================================
--- CalDAVTester/trunk/Resource/Common/PROPFIND/getctag.xml (rev 0)
+++ CalDAVTester/trunk/Resource/Common/PROPFIND/getctag.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<D:propfind xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
+<D:prop>
+<CS:getctag/>
+</D:prop>
+</D:propfind>
Modified: CalDAVTester/trunk/scripts/server/serverinfo-partitioning.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo-partitioning.xml 2011-03-17 01:06:33 UTC (rev 7202)
+++ CalDAVTester/trunk/scripts/server/serverinfo-partitioning.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -37,6 +37,7 @@
<feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
<feature>add-member</feature> <!-- Add-member used to create resources -->
+ <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 -->
@@ -79,6 +80,10 @@
<substitutions>
<!-- Useful xpath shortcuts for verifiers -->
<substitution>
+ <key>$multistatus-href-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
+ </substitution>
+ <substitution>
<key>$verify-property-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
@@ -87,6 +92,10 @@
<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>
Modified: CalDAVTester/trunk/scripts/server/serverinfo-template.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo-template.xml 2011-03-17 01:06:33 UTC (rev 7202)
+++ CalDAVTester/trunk/scripts/server/serverinfo-template.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -37,6 +37,7 @@
<feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
<feature>add-member</feature> <!-- Add-member used to create resources -->
+ <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 -->
@@ -81,6 +82,10 @@
<substitutions>
<!-- Useful xpath shortcuts for verifiers -->
<substitution>
+ <key>$multistatus-href-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
+ </substitution>
+ <substitution>
<key>$verify-property-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
@@ -89,6 +94,10 @@
<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>
Modified: CalDAVTester/trunk/scripts/server/serverinfo.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo.xml 2011-03-17 01:06:33 UTC (rev 7202)
+++ CalDAVTester/trunk/scripts/server/serverinfo.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -37,6 +37,7 @@
<feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
<feature>add-member</feature> <!-- Add-member used to create resources -->
+ <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 -->
@@ -81,6 +82,10 @@
<substitutions>
<!-- Useful xpath shortcuts for verifiers -->
<substitution>
+ <key>$multistatus-href-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
+ </substitution>
+ <substitution>
<key>$verify-property-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
@@ -89,6 +94,10 @@
<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>
Modified: CalDAVTester/trunk/scripts/server/sslserverinfo.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/sslserverinfo.xml 2011-03-17 01:06:33 UTC (rev 7202)
+++ CalDAVTester/trunk/scripts/server/sslserverinfo.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -38,6 +38,7 @@
<feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
<feature>add-member</feature> <!-- Add-member used to create resources -->
+ <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 -->
@@ -80,6 +81,10 @@
<substitutions>
<!-- Useful xpath shortcuts for verifiers -->
<substitution>
+ <key>$multistatus-href-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
+ </substitution>
+ <substitution>
<key>$verify-property-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
@@ -88,6 +93,10 @@
<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>
Added: CalDAVTester/trunk/scripts/tests/CalDAV/bulk.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CalDAV/bulk.xml (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CalDAV/bulk.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,1245 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2010 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 bulk POST method in CalDAV</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>bulk-post</feature>
+ </require-feature>
+
+ <start/>
+
+ <test-suite name='bulk-requests property'>
+ <test name='1'>
+ <description>PROPFIND on calendar</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/bulk/properties/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}simple</value>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}crud</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>PROPFIND on calendar home</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pathprefix1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/properties/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}simple</value>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}crud</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - one event' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/1.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/1.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST single existing event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/2.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-bad-response:[*403]</value>
+ <value>$verify-error-response:/{urn:ietf:params:xml:ns:caldav}no-uid-conflict</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/1.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>POST single new different event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - multiple events' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST multiple new events</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/4.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/5.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/6.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>POST one new, one exsting events</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/7.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid03]</value>
+ <value>$verify-bad-response:[*403]</value>
+ <value>$verify-error-response:/{urn:ietf:params:xml:ns:caldav}no-uid-conflict</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href-ignore:</variable>
+ <variable>$href3:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag3:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Check unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/5.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href3:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/8.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag3:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - one event return data' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <header>
+ <name>X-MobileMe-DAV-Options</name>
+ <value>return-changed-data</value>
+ </header>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/9.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</name>
+ <variable>$data:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/simple/10.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>Check valid data against returned data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>data</name>
+ <value>$data:</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - ctag condition' ignore='no'>
+ <test name='1'>
+ <description>PROPFIND on calendar</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/Common/PROPFIND/getctag.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <grabelement>
+ <name>$verify-property-prefix:/{http://calendarserver.org/ns/}getctag</name>
+ <variable>$ctag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>POST single new event conditional fail</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <header>
+ <name>X-MobileMe-DAV-Options</name>
+ <value>return-changed-data</value>
+ </header>
+ <header>
+ <name>If</name>
+ <value><![CDATA[<http://me.com/_namespace/ctag/$ctag:123>]]></value>
+ </header>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/9.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>412</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST single new event conditional ok</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <header>
+ <name>X-MobileMe-DAV-Options</name>
+ <value>return-changed-data</value>
+ </header>
+ <header>
+ <name>If</name>
+ <value><![CDATA[<http://me.com/_namespace/ctag/$ctag:>]]></value>
+ </header>
+ <data substitutions='yes'>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/simple/9.ics</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabheader>
+ <name>CTag</name>
+ <variable>$ctag-new:</variable>
+ </grabheader>
+ </request>
+ </test>
+ <test name='4'>
+ <description>PROPFIND on calendar</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/Common/PROPFIND/getctag.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}getctag[=$ctag-new:]</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}getctag[!$ctag:]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='CRUD POST - one event create' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-one/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-one/2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST single existing event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-one/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-bad-response:[*403]</value>
+ <value>$verify-error-response:/{urn:ietf:params:xml:ns:caldav}no-uid-conflict</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-one/2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>POST single new different event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-one/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-one/5.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='CRUD POST - multiple' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new event</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-multiple/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-multiple/2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST add new and update existing</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-multiple/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>Data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-multiple/4.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-multiple/5.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>POST delete and update existing</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-multiple/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='7' ignore='no'>
+ <description>Data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-multiple/7.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8' ignore='no'>
+ <description>Data gone</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='CRUD POST - multiple if-match' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST two new events</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-ifmatch/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>POST new, update and delete existing - if-match fail</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-ifmatch/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid03]</value>
+ <value>$verify-bad-response:[*412]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ <variable>$href3:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag3:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/2.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/3.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href3:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/5.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag3:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8' ignore='no'>
+ <description>POST update and delete existing - if-match ok</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$calendarpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/bulk/crud-ifmatch/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}calendar-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='9' ignore='no'>
+ <description>Data gone</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10' ignore='no'>
+ <description>Data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/7.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href3:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/bulk/crud-ifmatch/5.ics</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag3:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
Modified: CalDAVTester/trunk/scripts/tests/CalDAV/caldavtest.dtd
===================================================================
--- CalDAVTester/trunk/scripts/tests/CalDAV/caldavtest.dtd 2011-03-17 01:06:33 UTC (rev 7202)
+++ CalDAVTester/trunk/scripts/tests/CalDAV/caldavtest.dtd 2011-03-17 01:22:16 UTC (rev 7203)
@@ -58,7 +58,7 @@
<!ELEMENT property (#PCDATA)>
<!ELEMENT variable (#PCDATA)>
- <!ELEMENT grabelement (name, variable)>
+ <!ELEMENT grabelement (name, variable+)>
<!ELEMENT test-suite (require-feature?, exclude-feature?, test*)>
<!ATTLIST test-suite name CDATA #REQUIRED
Added: CalDAVTester/trunk/scripts/tests/CardDAV/bulk.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/bulk.xml (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/bulk.xml 2011-03-17 01:22:16 UTC (rev 7203)
@@ -0,0 +1,1222 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE CardDAVtest SYSTEM "CardDAVtest.dtd">
+
+<!--
+ Copyright (c) 2006-2010 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 bulk POST method in CardDAV</description>
+
+ <require-feature>
+ <feature>carddav</feature>
+ <feature>bulk-post</feature>
+ </require-feature>
+
+ <start/>
+
+ <test-suite name='bulk-requests property'>
+ <test name='1'>
+ <description>PROPFIND on address book</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/properties/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}simple</value>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}crud</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>PROPFIND on addressbook home</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$addressbookhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/properties/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}simple</value>
+ <value>$verify-property-prefix:/{http://me.com/_namespace/}bulk-requests/{http://me.com/_namespace/}crud</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - one vcard' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/1.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/1.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST single existing vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/2.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-bad-response:[*403]</value>
+ <value>$verify-error-response:/{urn:ietf:params:xml:ns:carddav}no-uid-conflict</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/1.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>POST single new different vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/3.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/3.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - multiple vcards' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST multiple new vcards</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/4.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/5.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/6.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>POST one new, one exsting vcards</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/7.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid03]</value>
+ <value>$verify-bad-response:[*403]</value>
+ <value>$verify-error-response:/{urn:ietf:params:xml:ns:carddav}no-uid-conflict</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href-ignore:</variable>
+ <variable>$href3:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag3:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Check unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/5.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href3:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/8.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag3:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - one vcard return data' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <header>
+ <name>X-MobileMe-DAV-Options</name>
+ <value>return-changed-data</value>
+ </header>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/9.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/simple/10.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Simple POST - ctag condition' ignore='no'>
+ <test name='1'>
+ <description>PROPFIND on address book</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/getctag.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <grabelement>
+ <name>$verify-property-prefix:/{http://calendarserver.org/ns/}getctag</name>
+ <variable>$ctag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>POST single new vcard conditional fail</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <header>
+ <name>X-MobileMe-DAV-Options</name>
+ <value>return-changed-data</value>
+ </header>
+ <header>
+ <name>If</name>
+ <value><![CDATA[<http://me.com/_namespace/ctag/$ctag:123>]]></value>
+ </header>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/9.vcf</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>412</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST single new vcard conditional ok</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <header>
+ <name>X-MobileMe-DAV-Options</name>
+ <value>return-changed-data</value>
+ </header>
+ <header>
+ <name>If</name>
+ <value><![CDATA[<http://me.com/_namespace/ctag/$ctag:>]]></value>
+ </header>
+ <data substitutions='yes'>
+ <content-type>text/vcard; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/simple/9.vcf</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ </arg>
+ </verify>
+ <grabheader>
+ <name>CTag</name>
+ <variable>$ctag-new:</variable>
+ </grabheader>
+ </request>
+ </test>
+ <test name='4'>
+ <description>PROPFIND on address book</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/getctag.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}getctag[=$ctag-new:]</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}getctag[!$ctag:]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='CRUD POST - one vcard create' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-one/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-one/2.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST single existing vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-one/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-bad-response:[*403]</value>
+ <value>$verify-error-response:/{urn:ietf:params:xml:ns:carddav}no-uid-conflict</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-one/2.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>POST single new different vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-one/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-one/5.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='CRUD POST - multiple' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST single new vcard</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-multiple/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Check valid data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-multiple/2.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>POST add new and update existing</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-multiple/3.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>Data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-multiple/4.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-multiple/5.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>POST delete and update existing</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-multiple/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='7' ignore='no'>
+ <description>Data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-multiple/7.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8' ignore='no'>
+ <description>Data gone</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='CRUD POST - multiple if-match' ignore='no'>
+ <test name='1' ignore='no'>
+ <description>POST two new vcards</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-ifmatch/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid01]</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid02]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag1:</variable>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='2' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/2.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/3.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4' ignore='no'>
+ <description>POST new, update and delete existing - if-match fail</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-ifmatch/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ <value>$verify-property-prefix:/{http://calendarserver.org/ns/}uid[=user01-uid03]</value>
+ <value>$verify-bad-response:[*412]</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ <variable>$href3:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag3:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='5' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/2.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/3.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href3:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/5.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag3:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8' ignore='no'>
+ <description>POST update and delete existing - if-match ok</description>
+ <request print-response='no'>
+ <method>POST</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <data substitutions='yes'>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CardDAV/bulk/crud-ifmatch/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}getetag</value>
+ </arg>
+ <arg>
+ <name>notexists</name>
+ <value>$verify-property-prefix:/{urn:ietf:params:xml:ns:carddav}address-data</value>
+ </arg>
+ </verify>
+ <grabelement>
+ <name>$multistatus-href-prefix:</name>
+ <variable>$href1:</variable>
+ <variable>$href2:</variable>
+ </grabelement>
+ <grabelement>
+ <name>$verify-property-prefix:/{DAV:}getetag</name>
+ <variable>$etag2:</variable>
+ </grabelement>
+ </request>
+ </test>
+ <test name='9' ignore='no'>
+ <description>Data gone</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href1:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10' ignore='no'>
+ <description>Data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href2:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/7.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11' ignore='no'>
+ <description>Data unchanged</description>
+ <request>
+ <method>GET</method>
+ <ruri>$href3:</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CardDAV/bulk/crud-ifmatch/5.vcf</value>
+ </arg>
+ </verify>
+ <verify>
+ <callback>header</callback>
+ <arg>
+ <name>ETag</name>
+ <value>$etag3:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1' ignore='no'>
+ <description>Clean up</description>
+ <request>
+ <method>DELETEALL</method>
+ <ruri>$addressbookpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
Modified: CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd 2011-03-17 01:06:33 UTC (rev 7202)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd 2011-03-17 01:22:16 UTC (rev 7203)
@@ -21,13 +21,15 @@
<!ELEMENT require-feature (feature*)>
<!ELEMENT feature (#PCDATA)>
+ <!ELEMENT exclude-feature (feature*)>
+ <!ELEMENT feature (#PCDATA)>
<!ELEMENT start (request*)>
<!ELEMENT end (request*)>
<!ELEMENT pause EMPTY>
- <!ELEMENT request (require-feature?, method, ruri*, header*, data?, verify*, grabheader*, grabproperty*, grabelement*)>
+ <!ELEMENT request (require-feature?, exclude-feature?, method, ruri*, header*, data?, verify*, grabheader*, grabproperty*, grabelement*)>
<!ATTLIST request auth (yes|no) "yes"
user CDATA ""
pswd CDATA ""
@@ -56,13 +58,13 @@
<!ELEMENT property (#PCDATA)>
<!ELEMENT variable (#PCDATA)>
- <!ELEMENT grabelement (name, variable)>
+ <!ELEMENT grabelement (name, variable+)>
- <!ELEMENT test-suite (require-feature?, test*)>
+ <!ELEMENT test-suite (require-feature?, exclude-feature?, test*)>
<!ATTLIST test-suite name CDATA #REQUIRED
ignore (yes|no) "no">
- <!ELEMENT test (require-feature?, description?, (request|pause)+)>
+ <!ELEMENT test (require-feature?, exclude-feature?, description?, (request|pause)+)>
<!ATTLIST test name CDATA #REQUIRED
count CDATA "1"
stats (yes|no) "no"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110316/15fb0a57/attachment-0001.html>
More information about the calendarserver-changes
mailing list