[CalendarServer-changes] [15341] CalDAVTester/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu Nov 19 17:55:39 PST 2015
Revision: 15341
http://trac.calendarserver.org//changeset/15341
Author: cdaboo at apple.com
Date: 2015-11-19 17:55:39 -0800 (Thu, 19 Nov 2015)
Log Message:
-----------
v5/v8 podding tests.
Modified Paths:
--------------
CalDAVTester/trunk/verifiers/calendarDataMatch.py
Added Paths:
-----------
CalDAVTester/trunk/scripts/tests-pod-v5_v8/
CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/
CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/caldavtest.dtd
CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/calendaruserproxy.xml
CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/implicitsimple.xml
CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/sharing.xml
CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/simple.xml
Added: CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/caldavtest.dtd
===================================================================
--- CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/caldavtest.dtd (rev 0)
+++ CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/caldavtest.dtd 2015-11-20 01:55:39 UTC (rev 15341)
@@ -0,0 +1,90 @@
+<!--
+ Copyright (c) 2006-2015 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.
+ -->
+
+<!ELEMENT caldavtest (description?, require-feature?, start, test-suite*, end) >
+ <!ATTLIST caldavtest ignore-all (yes|no) "no">
+
+ <!ELEMENT description (#PCDATA)>
+
+ <!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?, exclude-feature?, method, ruri*, header*, data?, verify*,
+ graburi?, grabcount?, grabheader*, grabproperty*, grabelement*, grabjson*, grabcalproperty*, grabcalparameter*)>
+ <!ATTLIST request host2 (yes|no) "no"
+ auth (yes|no) "yes"
+ user CDATA ""
+ pswd CDATA ""
+ end-delete (yes|no) "no"
+ print-response (yes|no) "no"
+ iterate-data (yes|no) "no"
+ wait-for-success (yes|no) "no">
+
+ <!ELEMENT method (#PCDATA)>
+ <!ELEMENT ruri (#PCDATA)>
+ <!ATTLIST ruri quote (yes|no) "yes">
+ <!ELEMENT header (name, value)>
+ <!ELEMENT name (#PCDATA)>
+ <!ELEMENT value (#PCDATA)>
+ <!ELEMENT data (content-type, (filepath | generator), substitute*)>
+ <!ATTLIST data substitutions (yes|no) "yes"
+ generate (yes|no) "no">
+ <!ELEMENT content-type (#PCDATA)>
+ <!ELEMENT filepath (#PCDATA)>
+ <!ELEMENT generator (callback, arg*)>
+ <!ELEMENT substitute (name, value)>
+
+ <!ELEMENT verify (require-feature?, exclude-feature?, callback, arg*)>
+
+ <!ELEMENT callback (#PCDATA)>
+ <!ELEMENT arg (name, value*)>
+
+ <!ELEMENT graburi (#PCDATA)>
+
+ <!ELEMENT grabcount (#PCDATA)>
+
+ <!ELEMENT grabheader (name, variable)>
+
+ <!ELEMENT grabproperty (property, variable)>
+ <!ELEMENT property (#PCDATA)>
+ <!ELEMENT variable (#PCDATA)>
+
+ <!ELEMENT grabelement (name, parent*, variable+)>
+
+ <!ELEMENT grabjson (pointer, variable+)>
+
+ <!ELEMENT grabcalproperty (name, variable)>
+ <!ELEMENT grabcalparameter (name, variable)>
+
+ <!ELEMENT test-suite (require-feature?, exclude-feature?, test*)>
+ <!ATTLIST test-suite name CDATA #REQUIRED
+ ignore (yes|no) "no"
+ only (yes|no) "no"
+ change-uid (yes|no) "no">
+
+ <!ELEMENT test (require-feature?, exclude-feature?, description?, (request|pause)+)>
+ <!ATTLIST test name CDATA #REQUIRED
+ count CDATA "1"
+ stats (yes|no) "no"
+ ignore (yes|no) "no"
+ only (yes|no) "no">
Added: CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/calendaruserproxy.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/calendaruserproxy.xml (rev 0)
+++ CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/calendaruserproxy.xml 2015-11-20 01:55:39 UTC (rev 15341)
@@ -0,0 +1,3229 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2015 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.
+
+ DRI: Cyrus Daboo, cdaboo at apple.com
+ -->
+
+<caldavtest>
+ <description>Test proxy user features</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>proxy</feature>
+ <feature>podding</feature>
+ </require-feature>
+
+ <start>
+ <request end-delete="yes">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/delete/1.txt</filepath>
+ </data>
+ </request>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:" end-delete="yes">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/delete/1.txt</filepath>
+ </data>
+ </request>
+ </start>
+
+ <test-suite name='Proxy on podB'>
+ <test name='1'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Verify no access to resource</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>Add podB user as read proxy for podA user01</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value><![CDATA[{DAV:}group-member-set$<href xmlns="DAV:">$pprincipaluri1:</href>]]></value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>Verify single group membership</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership/{DAV:}href[=$principaluri1:calendar-proxy-read/]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>Verify access to resource</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>200</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <description>Verify no access for write</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <description>Clear podB user as read-only proxy for podA user01</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>Verify no access to resource</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Add podB user as read-write proxy for podA user01</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set/{DAV:}href[=$pprincipaluri1:]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='14'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='15'>
+ <description>Verify single group membership</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership/{DAV:}href[=$principaluri1:calendar-proxy-write/]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>Verify access to resource</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>200</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>Verify access to resource</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/5.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='18'>
+ <description>Verify access for writing</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>DELETE</method>
+ <ruri>$calendarpath1:/2.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='19'>
+ <description>Clear podB user as read-write proxy for podA user01</description>
+ <request>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='20'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='21'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='22'>
+ <description>Verify no access to resource</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Proxy on podB - requests from podB'>
+ <test name='1'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Verify no access to resource</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>Add podB user as read proxy for podA user01</description>
+ <request host2='yes'>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>Verify single group membership</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>Verify access to resource</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <description>Verify no access for write</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <description>Clear podB user as read-only proxy for podA user01</description>
+ <request host2='yes'>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>Verify no access to resource</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Add podB user as read-write proxy for podA user01</description>
+ <request host2='yes'>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/2.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='14'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='15'>
+ <description>Verify single group membership</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>Verify access to resource</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>Verify access to resource</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/5.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='18'>
+ <description>Verify access for writing</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$calendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>DELETE</method>
+ <ruri>$calendarpath1:/2.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='19'>
+ <description>Clear podB user as read-write proxy for podA user01</description>
+ <request host2='yes'>
+ <method>PROPPATCH</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='20'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='21'>
+ <description>Verify no group memberships right now</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='22'>
+ <description>Verify no access to resource</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Proxy on podA'>
+ <test name='1'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Verify no access to resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>Add podA user02 as read proxy for podB user</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set/{DAV:}href[=$principaluri2:]</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>Verify single group membership</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership/{DAV:}href[=$pprincipaluri1:calendar-proxy-read/]</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>Verify access to resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <description>Verify no access for writing</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <description>Clear podA user02 as read-only proxy for podB user</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>Verify no access to resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Add podA user02 as read-write proxy for podB user</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set/{DAV:}href[=$principaluri2:]</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='14'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='15'>
+ <description>Verify single group membership</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership/{DAV:}href[=$pprincipaluri1:calendar-proxy-write/]</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>Verify access to resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>Verify write access to resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/5.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='18'>
+ <description>Verify access for new resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>DELETE</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='19'>
+ <description>Clear podA user02 as read-write proxy for podB user</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='20'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='21'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:" host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='22'>
+ <description>Verify no access to resource</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Proxy on podA - requests from podB'>
+ <test name='1'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Verify no access to resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>Add podA user02 as read proxy for podB user</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set/{DAV:}href[=$principaluri2:]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>Verify single group membership</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership/{DAV:}href[=$pprincipaluri1:calendar-proxy-read/]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>Verify access to resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>200</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <description>Verify no access for writing</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <description>Clear podA user02 as read-only proxy for podB user</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-read/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>Verify no access to resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Add podA user02 as read-write proxy for podB user</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/6.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-member-set/{DAV:}href[=$principaluri2:]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='14'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='15'>
+ <description>Verify single group membership</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership[|]</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{DAV:}group-member-set[|]</value>
+ <value>$verify-property-prefix:/{DAV:}group-membership/{DAV:}href[=$pprincipaluri1:calendar-proxy-write/]</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>Verify access to resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>200</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>Verify write access to resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/5.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='18'>
+ <description>Verify access for new resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$pcalendarpath1:/2.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/3.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>DELETE</method>
+ <ruri>$pcalendarpath1:/2.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='19'>
+ <description>Clear podA user02 as read-write proxy for podB user</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPPATCH</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/4.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set</value>
+ </arg>
+ </verify>
+ </request>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:calendar-proxy-write/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='20'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='21'>
+ <description>Verify no group memberships right now</description>
+ <request user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$principal2:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/calendaruserproxy/1.xml</filepath>
+ </data>
+ <verify>
+ <callback>propfindItems</callback>
+ <arg>
+ <name>okprops</name>
+ <value>{DAV:}group-member-set$</value>
+ <value>{DAV:}group-membership$</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='22'>
+ <description>Verify no access to resource</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GET</method>
+ <ruri>$pcalendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
Added: CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/implicitsimple.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/implicitsimple.xml (rev 0)
+++ CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/implicitsimple.xml 2015-11-20 01:55:39 UTC (rev 15341)
@@ -0,0 +1,532 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2015 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>Podding cross-pod scheduling</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>implicit-scheduling</feature>
+ <feature>podding</feature>
+ </require-feature>
+
+ <start>
+ <request user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$inboxpath1:/</ruri>
+ <ruri>$inboxpath2:/</ruri>
+ <ruri>$pinboxpath1:/</ruri>
+ </request>
+ </start>
+
+ <test-suite name='#1 scheduling across nodes'>
+ <test name='1'>
+ <description>Organizer invites Attendees</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/implicitschedule/suite1/1.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Organizer checks data</description>
+ <request>
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Attendee Inbox Items</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath2:/</ruri>
+ </request>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$pinboxpath1:/</ruri>
+ </request>
+ </test>
+ <test name='4'>
+ <description>Attendees have data</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GETNEW</method>
+ <ruri>$calendarpath2:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:">
+ <method>GETNEW</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>PodA -> Accepted</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>GETNEW</method>
+ <ruri>$calendarpath2:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/implicitschedule/suite1/4.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>Organizer Inbox Item</description>
+ <request>
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath1:/</ruri>
+ </request>
+ </test>
+ <test name='8'>
+ <description>Organizer data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/5.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>PodB no Inbox Item</description>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pinboxpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>count</name>
+ <value>0</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>PodB data changed</description>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:" wait-for-success="yes">
+ <method>GETNEW</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/6.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>PodB -> Decline</description>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:">
+ <method>GETNEW</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/implicitschedule/suite1/7.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Organizer Inbox Item</description>
+ <request>
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath1:/</ruri>
+ </request>
+ </test>
+ <test name='14'>
+ <description>Organizer data changed</description>
+ <request>
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/8.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>PodA no Inbox Item</description>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>PROPFIND</method>
+ <ruri>$inboxpath2:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>count</name>
+ <value>0</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>PodA data changed</description>
+ <request user="$userid2:" pswd="$pswd2:" wait-for-success="yes">
+ <method>GETNEW</method>
+ <ruri>$calendarpath2:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/9.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1'>
+ <description>Clean-up</description>
+ <request user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <ruri>$inboxpath1:/</ruri>
+ </request>
+ <request user="$userid2:" pswd="$pswd2:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath2:/</ruri>
+ </request>
+ <request host2="yes" user="$puserid1:" pswd="$ppswd1:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$pinboxpath1:/</ruri>
+ </request>
+ <request user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$calendarpath2:/</ruri>
+ </request>
+ <request host2="yes" user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='#2 scheduling across nodes - from podB'>
+ <test name='1'>
+ <description>Organizer invites Attendees</description>
+ <request host2='yes'>
+ <method>PUT</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/implicitschedule/suite1/1.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>Organizer checks data</description>
+ <request host2='yes'>
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/2.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>Attendee Inbox Items</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath2:/</ruri>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$pinboxpath1:/</ruri>
+ </request>
+ </test>
+ <test name='4'>
+ <description>Attendees have data</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GETNEW</method>
+ <ruri>$calendarpath2:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GETNEW</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/3.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>PodA -> Accepted</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>GETNEW</method>
+ <ruri>$calendarpath2:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>PUT</method>
+ <ruri>$</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/implicitschedule/suite1/4.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>Organizer Inbox Item</description>
+ <request host2='yes'>
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath1:/</ruri>
+ </request>
+ </test>
+ <test name='8'>
+ <description>Organizer data changed</description>
+ <request host2='yes'>
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/5.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>PodB no Inbox Item</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PROPFIND</method>
+ <ruri>$pinboxpath1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>count</name>
+ <value>0</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>PodB data changed</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:" wait-for-success="yes">
+ <method>GETNEW</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/6.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>PodB -> Decline</description>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>GETNEW</method>
+ <ruri>$pcalendarpath1:/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>PUT</method>
+ <ruri>$</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV-pod/implicitschedule/suite1/7.ics</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>Organizer Inbox Item</description>
+ <request host2='yes'>
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath1:/</ruri>
+ </request>
+ </test>
+ <test name='14'>
+ <description>Organizer data changed</description>
+ <request host2='yes'>
+ <method>GET</method>
+ <ruri>$calendarpath1:/1.ics</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/8.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>PodA no Inbox Item</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>PROPFIND</method>
+ <ruri>$inboxpath2:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>1</value>
+ </header>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>count</name>
+ <value>0</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>PodA data changed</description>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:" wait-for-success="yes">
+ <method>GETNEW</method>
+ <ruri>$calendarpath2:/</ruri>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV-pod/implicitschedule/suite1/9.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='-1'>
+ <description>Clean-up</description>
+ <request host2='yes' user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$calendarpath1:/</ruri>
+ <ruri>$inboxpath1:/</ruri>
+ </request>
+ <request host2='yes' user="$userid2:" pswd="$pswd2:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$inboxpath2:/</ruri>
+ </request>
+ <request host2='yes' user="$puserid1:" pswd="$ppswd1:">
+ <method>WAITDELETEALL 1</method>
+ <ruri>$pinboxpath1:/</ruri>
+ </request>
+ <request host2='yes' user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$calendarpath2:/</ruri>
+ <ruri>$pcalendarpath1:/</ruri>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
Added: CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/sharing.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/sharing.xml (rev 0)
+++ CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/sharing.xml 2015-11-20 01:55:39 UTC (rev 15341)
@@ -0,0 +1,161 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2015 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 calendar sharing replies</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>shared-calendars</feature>
+ </require-feature>
+
+ <start>
+ <request user="$userid1:" pswd="$pswd1:">
+ <method>DELETEALL</method>
+ <ruri>$notificationpath1:/</ruri>
+ </request>
+ <request host2="yes" user="$puserid2:" pswd="$ppswd2:">
+ <method>DELETEALL</method>
+ <ruri>$pnotificationpath2:/</ruri>
+ </request>
+ </start>
+
+ <test-suite name='User on podA tries to share with user on podB'>
+ <test name='1'>
+ <description>Create calendar</description>
+ <request end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$calendarhome1:/shared/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST invitation</description>
+ <request>
+ <method>POST</method>
+ <ruri>$calendarhome1:/shared/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/POST/sharinginvite2-pod.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>prefix</name>
+ <value/>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$pcuaddr2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>POST invitation</description>
+ <request host2="yes">
+ <method>POST</method>
+ <ruri>$calendarhome1:/shared/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/POST/sharinginvite2-pod.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>prefix</name>
+ <value/>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$pcuaddr2:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='User on podB tries to share with user on podA'>
+ <test name='1'>
+ <description>Create calendar</description>
+ <request host2="yes" user="$puserid2:" pswd="$ppswd2:" end-delete="yes">
+ <method>MKCALENDAR</method>
+ <ruri>$pcalendarhome2:/shared/</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST invitation</description>
+ <request user="$puserid2:" pswd="$ppswd2:">
+ <method>POST</method>
+ <ruri>$pcalendarhome2:/shared/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/POST/sharinginvite1.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>POST invitation</description>
+ <request host2="yes" user="$puserid2:" pswd="$ppswd2:">
+ <method>POST</method>
+ <ruri>$pcalendarhome2:/shared/</ruri>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/POST/sharinginvite1.xml</filepath>
+ </data>
+ <verify>
+ <callback>multistatusItems</callback>
+ <arg>
+ <name>prefix</name>
+ <value/>
+ </arg>
+ <arg>
+ <name>badhrefs</name>
+ <value>$cuaddr1:</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end>
+ <request user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$notificationpath1:/</ruri>
+ </request>
+ <request host2="yes" user="$useradmin:" pswd="$pswdadmin:">
+ <method>DELETEALL</method>
+ <ruri>$pnotificationpath2:/</ruri>
+ </request>
+ </end>
+
+</caldavtest>
Added: CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/simple.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/simple.xml (rev 0)
+++ CalDAVTester/trunk/scripts/tests-pod-v5_v8/CalDAV-v5_v8/simple.xml 2015-11-20 01:55:39 UTC (rev 15341)
@@ -0,0 +1,281 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2015 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>Simple podding test</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>podding</feature>
+ </require-feature>
+
+ <start/>
+
+ <test-suite name='Access principals via podA'>
+ <test name='1'>
+ <description>PROPFIND of user on podA as user on podA</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$principal1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>PROPFIND of user on podB as user on podA</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Access principals via podB'>
+ <test name='3'>
+ <description>PROPFIND of user on podA as user on podB</description>
+ <request host2='yes' user='$puserid1:' pswd='$ppswd1:'>
+ <method>PROPFIND</method>
+ <ruri>$principal1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>PROPFIND of user on podB as user on podB</description>
+ <request host2='yes' user='$puserid1:' pswd='$ppswd1:'>
+ <method>PROPFIND</method>
+ <ruri>$pprincipal1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Access calendar homes via podA'>
+ <test name='1'>
+ <description>PROPFIND of user on podA as user on podA</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>PROPFIND of user on podB as user on podA</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$pcalendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>PROPFIND of user on podA as user on podB</description>
+ <request user='$puserid1:' pswd='$ppswd1:'>
+ <method>PROPFIND</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>PROPFIND of user on podB as user on podB</description>
+ <request user='$puserid1:' pswd='$ppswd1:'>
+ <method>PROPFIND</method>
+ <ruri>$pcalendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Access calendar homes via podB'>
+ <test name='1'>
+ <description>PROPFIND of user on podA as user on podA</description>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>PROPFIND of user on podB as user on podA</description>
+ <request host2='yes'>
+ <method>PROPFIND</method>
+ <ruri>$pcalendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>PROPFIND of user on podA as user on podB</description>
+ <request host2='yes' user='$puserid1:' pswd='$ppswd1:'>
+ <method>PROPFIND</method>
+ <ruri>$calendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>PROPFIND of user on podB as user on podB</description>
+ <request host2='yes' user='$puserid1:' pswd='$ppswd1:'>
+ <method>PROPFIND</method>
+ <ruri>$pcalendarhome1:/</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/xml; charset=utf-8</content-type>
+ <filepath>Resource/Common/PROPFIND/count.xml</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
Modified: CalDAVTester/trunk/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/trunk/verifiers/calendarDataMatch.py 2015-11-19 22:08:32 UTC (rev 15340)
+++ CalDAVTester/trunk/verifiers/calendarDataMatch.py 2015-11-20 01:55:39 UTC (rev 15341)
@@ -171,6 +171,10 @@
data = data_calendar.getText(includeTimezones=Calendar.NO_TIMEZONES, format=format)
result = resp_calendar == data_calendar
+ if not result:
+ respdata = respdata.replace("\r\n ", "")
+ data = respdata.replace("\r\n ", "").replace("urn:x-uid:", "urn:uuid:")
+ result = respdata == data
if result:
return True, ""
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20151119/e6288fa1/attachment-0001.html>
More information about the calendarserver-changes
mailing list