[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