[CalendarServer-changes] [10138] CalDAVTester/branches/users/cdaboo/managed-attachments
source_changes at macosforge.org
source_changes at macosforge.org
Fri Dec 7 13:01:33 PST 2012
Revision: 10138
http://trac.calendarserver.org//changeset/10138
Author: cdaboo at apple.com
Date: 2012-12-07 13:01:33 -0800 (Fri, 07 Dec 2012)
Log Message:
-----------
Merged from trunk.
Modified Paths:
--------------
CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-All
CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CalDAV
CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CardDAV
CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-All
CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CalDAV
CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CardDAV
CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-partitioning.xml
CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-template.xml
CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo.xml
Added Paths:
-----------
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics
CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/timezonestdservice.xml
CalDAVTester/branches/users/cdaboo/managed-attachments/src/jsonPointer.py
CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/
CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py
CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py
CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/jsonPointerMatch.py
Removed Paths:
-------------
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics
CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics
CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py
CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py
Property Changed:
----------------
CalDAVTester/branches/users/cdaboo/managed-attachments/
Property changes on: CalDAVTester/branches/users/cdaboo/managed-attachments
___________________________________________________________________
Modified: svn:mergeinfo
- /CalDAVTester/branches/release/CalDAVTester-3.0-dev:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes:8221-8346
/CalDAVTester/branches/users/cdaboo/conditional-4466:4467-4469
/CalDAVTester/branches/users/cdaboo/implicitauto-2948:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228:5229-5440
/CalDAVTester/trunk:9986-10090
+ /CalDAVTester/branches/release/CalDAVTester-3.0-dev:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes:8221-8346
/CalDAVTester/branches/users/cdaboo/conditional-4466:4467-4469
/CalDAVTester/branches/users/cdaboo/implicitauto-2948:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228:5229-5440
/CalDAVTester/trunk:9986-10136
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-All
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-All 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-All 2012-12-07 21:01:33 UTC (rev 10138)
@@ -20,7 +20,7 @@
#
export PYTHONPATH=/usr/share/caldavd/lib/python:/Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/lib/python/
-./testcaldav.py $@ --print-details-onfail -s scripts/server/serverinfo-caldav.xml \
+./testcaldav.py $@ --ssl --print-details-onfail -s scripts/server/serverinfo-caldav.xml \
CalDAV/caldavIOP.xml \
CalDAV/errors.xml \
CalDAV/get.xml \
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CalDAV
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CalDAV 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CalDAV 2012-12-07 21:01:33 UTC (rev 10138)
@@ -20,7 +20,7 @@
#
export PYTHONPATH=/usr/share/caldavd/lib/python:/Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/lib/python/
-./testcaldav.py $@ --print-details-onfail -s scripts/server/serverinfo-caldav.xml \
+./testcaldav.py $@ --ssl --print-details-onfail -s scripts/server/serverinfo-caldav.xml \
CalDAV/caldavIOP.xml \
CalDAV/errors.xml \
CalDAV/get.xml \
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CardDAV
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CardDAV 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/QuickLook-CardDAV 2012-12-07 21:01:33 UTC (rev 10138)
@@ -20,7 +20,7 @@
#
export PYTHONPATH=/usr/share/caldavd/lib/python:/Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/lib/python/
-./testcaldav.py $@ --print-details-onfail -s scripts/server/serverinfo-caldav.xml \
+./testcaldav.py $@ --ssl --print-details-onfail -s scripts/server/serverinfo-caldav.xml \
CardDAV/ab-client.xml \
CardDAV/errors.xml \
CardDAV/get.xml \
Deleted: CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/timezonestdservice/GB.ics 2012-12-07 19:20:46 UTC (rev 10136)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics 2012-12-07 21:01:33 UTC (rev 10138)
@@ -1,291 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:GB
-X-LIC-LOCATION:GB
-BEGIN:STANDARD
-DTSTART:18471201T000000
-RDATE:18471201T000000
-TZNAME:S
-TZOFFSETFROM:-000115
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=9
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-TZNAME:BDST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
- ,14,15;BYMONTH=8
-TZNAME:BST
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=4
-TZNAME:BDST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-TZNAME:BST
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
- 8,19,20;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
- 5,26,27;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
- 7,28,29;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
- 3,24,25;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19681027T000000
-RDATE:19681027T000000
-TZNAME:BST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19711031T030000
-RDATE:19711031T030000
-TZNAME:S
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
- 7,28,29;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
- 7,28,29;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19960101T000000
-RDATE:19960101T000000
-TZNAME:GMT/BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19960331T010000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
-TZNAME:GMT/BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-TZNAME:GMT/BST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics (from rev 10136, CalDAVTester/trunk/Resource/CalDAV/timezonestdservice/GB.ics)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/GB.ics 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,291 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:GB
+X-LIC-LOCATION:GB
+BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
+TZNAME:BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/timezonestdservice/London.ics 2012-12-07 19:20:46 UTC (rev 10136)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics 2012-12-07 21:01:33 UTC (rev 10138)
@@ -1,291 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Europe/London
-X-LIC-LOCATION:Europe/London
-BEGIN:STANDARD
-DTSTART:18471201T000000
-RDATE:18471201T000000
-TZNAME:S
-TZOFFSETFROM:-000115
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=9
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-TZNAME:BDST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
- ,14,15;BYMONTH=8
-TZNAME:BST
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=4
-TZNAME:BDST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-TZNAME:BST
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
- 8,19,20;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
- 5,26,27;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
- ;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=4
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
- 7,28,29;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
- 3,24,25;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19681027T000000
-RDATE:19681027T000000
-TZNAME:BST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19711031T030000
-RDATE:19711031T030000
-TZNAME:S
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
- 0,21,22;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
- 7,28,29;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
-TZNAME:BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
- 7,28,29;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
-TZNAME:GMT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19960101T000000
-RDATE:19960101T000000
-TZNAME:GMT/BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19960331T010000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
-TZNAME:GMT/BST
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-TZNAME:GMT/BST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics (from rev 10136, CalDAVTester/trunk/Resource/CalDAV/timezonestdservice/London.ics)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/London.ics 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,291 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/London
+X-LIC-LOCATION:Europe/London
+BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
+TZNAME:BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics
===================================================================
--- CalDAVTester/trunk/Resource/CalDAV/timezonestdservice/New_York.ics 2012-12-07 19:20:46 UTC (rev 10136)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics 2012-12-07 21:01:33 UTC (rev 10138)
@@ -1,148 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:America/New_York
-X-LIC-LOCATION:America/New_York
-BEGIN:STANDARD
-DTSTART:18831118T120358
-RDATE:18831118T120358
-TZNAME:EST
-TZOFFSETFROM:-045602
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-TZNAME:EST
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19200328T020000
-RDATE:19200328T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19201031T020000
-RDATE:19201031T020000
-RDATE:19450930T020000
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19210424T020000
-RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19210925T020000
-RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-TZNAME:EWT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19450814T190000
-RDATE:19450814T190000
-TZNAME:EPT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics (from rev 10136, CalDAVTester/trunk/Resource/CalDAV/timezonestdservice/New_York.ics)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Resource/CalDAV/timezonestdservice/New_York.ics 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,148 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/New_York
+X-LIC-LOCATION:America/New_York
+BEGIN:STANDARD
+DTSTART:18831118T120358
+RDATE:18831118T120358
+TZNAME:EST
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RDATE:19200328T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210424T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-All
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-All 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-All 2012-12-07 21:01:33 UTC (rev 10138)
@@ -21,7 +21,7 @@
#
export PYTHONPATH=/usr/share/caldavd/lib/python:/Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/lib/python/
-./testcaldav.py $@ --print-details-onfail -s scripts/server/serverinfo-caldav.xml --all \
+./testcaldav.py $@ --ssl --print-details-onfail -s scripts/server/serverinfo-caldav.xml --all \
--exclude CalDAV/directory.xml \
--exclude CalDAV/proxyauthz.xml \
--exclude CalDAV/quota.xml \
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CalDAV
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CalDAV 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CalDAV 2012-12-07 21:01:33 UTC (rev 10138)
@@ -20,7 +20,7 @@
#
export PYTHONPATH=/usr/share/caldavd/lib/python:/Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/lib/python/
-./testcaldav.py $@ --print-details-onfail -s scripts/server/serverinfo-caldav.xml --all \
+./testcaldav.py $@ --ssl --print-details-onfail -s scripts/server/serverinfo-caldav.xml --all \
--subdir CalDAV \
--exclude CalDAV/directory.xml \
--exclude CalDAV/proxyauthz.xml \
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CardDAV
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CardDAV 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/Validation-CardDAV 2012-12-07 21:01:33 UTC (rev 10138)
@@ -20,7 +20,7 @@
#
export PYTHONPATH=/usr/share/caldavd/lib/python:/Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/lib/python/
-./testcaldav.py $@ --print-details-onfail -s scripts/server/serverinfo-caldav.xml --all \
+./testcaldav.py $@ --ssl --print-details-onfail -s scripts/server/serverinfo-caldav.xml --all \
--subdir CardDAV \
--exclude CardDAV/directory.xml \
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-partitioning.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-partitioning.xml 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-partitioning.xml 2012-12-07 21:01:33 UTC (rev 10138)
@@ -86,7 +86,8 @@
<feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
<feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
<feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
- <feature>timezone-service</feature> <!-- Timezone service extension -->
+ <feature>timezone-service</feature> <!-- Timezone service extension for Wiki-->
+ <feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
<feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
<feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
@@ -286,6 +287,12 @@
<value>$root:timezones</value>
</substitution>
+ <!-- timezone std service-->
+ <substitution>
+ <key>$timezonestdservice:</key>
+ <value>$root:stdtimezones</value>
+ </substitution>
+
<!-- relative path to calendars collection-->
<substitution>
<key>$addressbooks:</key>
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-template.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-template.xml 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo-template.xml 2012-12-07 21:01:33 UTC (rev 10138)
@@ -86,7 +86,8 @@
<feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
<feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
<feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
- <feature>timezone-service</feature> <!-- Timezone service extension -->
+ <feature>timezone-service</feature> <!-- Timezone service extension for Wiki-->
+ <feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
<feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
<feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
@@ -286,6 +287,12 @@
<value>$root:timezones</value>
</substitution>
+ <!-- timezone std service-->
+ <substitution>
+ <key>$timezonestdservice:</key>
+ <value>$root:stdtimezones</value>
+ </substitution>
+
<!-- relative path to calendars collection-->
<substitution>
<key>$addressbooks:</key>
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo.xml 2012-12-07 20:05:11 UTC (rev 10137)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/server/serverinfo.xml 2012-12-07 21:01:33 UTC (rev 10138)
@@ -86,7 +86,8 @@
<feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
<feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
<feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
- <feature>timezone-service</feature> <!-- Timezone service extension -->
+ <feature>timezone-service</feature> <!-- Timezone service extension for Wiki-->
+ <feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
<feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
<feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
@@ -286,6 +287,12 @@
<value>$root:timezones</value>
</substitution>
+ <!-- timezone std service-->
+ <substitution>
+ <key>$timezonestdservice:</key>
+ <value>$root:stdtimezones</value>
+ </substitution>
+
<!-- relative path to calendars collection-->
<substitution>
<key>$addressbooks:</key>
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/timezonestdservice.xml (from rev 10136, CalDAVTester/trunk/scripts/tests/CalDAV/timezonestdservice.xml)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/timezonestdservice.xml (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/timezonestdservice.xml 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,975 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2012 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 standard timezone service</description>
+
+ <require-feature>
+ <feature>caldav</feature>
+ <feature>timezone-std-service</feature>
+ </require-feature>
+
+ <start/>
+
+ <test-suite name='Non-query GET/POST'>
+ <test name='1'>
+ <description>GET on well-known resource</description>
+ <request>
+ <method>GET</method>
+ <ruri>/.well-known/timezone</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>301</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Non-query GET/POST'>
+ <test name='1'>
+ <description>GET on resource</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>PROPFIND on resource</description>
+ <request>
+ <method>PROPFIND</method>
+ <ruri>$timezonestdservice:</ruri>
+ <header>
+ <name>Depth</name>
+ <value>0</value>
+ </header>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/propfinds/1.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>POST on resource</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>PUT on resource - fails</description>
+ <request>
+ <method>PUT</method>
+ <ruri>$timezonestdservice:</ruri>
+ <data>
+ <content-type>text/calendar; charset=utf-8</content-type>
+ <filepath>Resource/CalDAV/recurrenceput/1.txt</filepath>
+ </data>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>DELETE on resource - fails</description>
+ <request>
+ <method>DELETE</method>
+ <ruri>$timezonestdservice:</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ <arg>
+ <name>status</name>
+ <value>403</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Query bogus parameters'>
+ <test name='1'>
+ <description>GET on resource - invalid parameter</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?query=true</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-action</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST on resource - invalid parameter</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?query=true</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-action</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>GET on resource - invalid action</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=true</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-action</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>POST on resource - invalid action</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=true</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-action</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>GET on resource - multiple actions</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=list&action=list</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-action</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>POST on resource - multiple methods</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=list&action=list</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-action</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Query method=list'>
+ <test name='1'>
+ <description>GET on resource</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=list</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/timezones/./tzid~$America/New_York</value>
+ <value>/timezones/./tzid~$America/Phoenix</value>
+ <value>/timezones/./aliases/.~$GB</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST on resource</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=list</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/timezones/./tzid~$America/New_York</value>
+ <value>/timezones/./tzid~$America/Phoenix</value>
+ <value>/timezones/./aliases/.~$GB</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Invalid query action=get'>
+ <test name='1'>
+ <description>GET on resource - no tzid</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=get</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST on resource - no tzid</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=get</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>GET on resource - multiple tzid</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=get&tzid=America/New_York&tzid=America/Los_Angeles</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>POST on resource - multiple tzid</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=get&tzid=America/New_York&tzid=America/Los_Angeles</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>GET on resource - invalid tzid</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=get&tzid=America/Pittsburgh</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$missing-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>POST on resource - invalid tzid</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=get&tzid=America/Pittsburgh</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$missing-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Query action=get'>
+ <test name='1'>
+ <description>GET on resource</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=get&tzid=America/New_York</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/timezonestdservice/New_York.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST on resource</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=get&tzid=America/New_York</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/timezonestdservice/New_York.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>GET on resource</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=get&tzid=Europe/London</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/timezonestdservice/London.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>POST on resource</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=get&tzid=Europe/London</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/timezonestdservice/London.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>GET on resource</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=get&tzid=GB</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/timezonestdservice/GB.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>POST on resource</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=get&tzid=GB</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>calendarDataMatch</callback>
+ <arg>
+ <name>filepath</name>
+ <value>Resource/CalDAV/timezonestdservice/GB.ics</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name='Invalid query action=expand'>
+ <test name='1'>
+ <description>GET on resource - no tzid</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST on resource - no tzid</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>GET on resource - multiple tzid</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&tzid=America/Los_Angeles</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>POST on resource - multiple tzid</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&tzid=America/Los_Angeles</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>GET on resource - invalid tzid</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/Pittsburgh</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$missing-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>POST on resource - invalid tzid</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/Pittsburgh</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>404</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$missing-tzid</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>GET on resource - too many start</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&start=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-start</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='8'>
+ <description>POST on resource - too many start</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&start=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-start</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='9'>
+ <description>GET on resource - invalid start</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=2007</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-start</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='10'>
+ <description>POST on resource - invalid start</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=2007</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-start</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='11'>
+ <description>GET on resource - too many end</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=20090101&end=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='12'>
+ <description>POST on resource - too many end</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=20090101&end=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='13'>
+ <description>GET on resource - invalid end</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=2009</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='14'>
+ <description>POST on resource - invalid end</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=2009</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='15'>
+ <description>GET on resource - start > end</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20090101&end=20080101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='16'>
+ <description>POST on resource - start > end</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20090101&end=20080101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='17'>
+ <description>GET on resource - start == end</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=20080101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='18'>
+ <description>POST on resource - start == end</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=20080101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>status</name>
+ <value>400</value>
+ </arg>
+ <arg>
+ <name>exists</name>
+ <value>/error~$invalid-end</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <test-suite name="Expand">
+ <test name='1'>
+ <description>GET on resource - simple range</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/observances/./onset~$2008-01-01T00:00:00</value>
+ <value>/observances/./onset~$2008-03-09T02:00:00</value>
+ <value>/observances/./onset~$2008-11-02T02:00:00</value>
+ <value>/observances/./utc-offset-from~$-18000</value>
+ <value>/observances/./utc-offset-to~$-18000</value>
+ <value>/observances/./utc-offset-from~$-14400</value>
+ <value>/observances/./utc-offset-to~$-14400</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='2'>
+ <description>POST on resource - simple range</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20080101&end=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/observances/./onset~$2008-01-01T00:00:00</value>
+ <value>/observances/./onset~$2008-03-09T02:00:00</value>
+ <value>/observances/./onset~$2008-11-02T02:00:00</value>
+ <value>/observances/./utc-offset-from~$-18000</value>
+ <value>/observances/./utc-offset-to~$-18000</value>
+ <value>/observances/./utc-offset-from~$-14400</value>
+ <value>/observances/./utc-offset-to~$-14400</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='3'>
+ <description>GET on resource - complex range</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20060101&end=20080101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/observances/./onset~$2006-01-01T00:00:00</value>
+ <value>/observances/./onset~$2006-04-02T02:00:00</value>
+ <value>/observances/./onset~$2006-10-29T02:00:00</value>
+ <value>/observances/./onset~$2007-03-11T02:00:00</value>
+ <value>/observances/./onset~$2007-11-04T02:00:00</value>
+ <value>/observances/./utc-offset-from~$-18000</value>
+ <value>/observances/./utc-offset-to~$-18000</value>
+ <value>/observances/./utc-offset-from~$-14400</value>
+ <value>/observances/./utc-offset-to~$-14400</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='4'>
+ <description>POST on resource - complex range</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/New_York&start=20060101&end=20080101</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/observances/./onset~$2006-01-01T00:00:00</value>
+ <value>/observances/./onset~$2006-04-02T02:00:00</value>
+ <value>/observances/./onset~$2006-10-29T02:00:00</value>
+ <value>/observances/./onset~$2007-03-11T02:00:00</value>
+ <value>/observances/./onset~$2007-11-04T02:00:00</value>
+ <value>/observances/./utc-offset-from~$-18000</value>
+ <value>/observances/./utc-offset-to~$-18000</value>
+ <value>/observances/./utc-offset-from~$-14400</value>
+ <value>/observances/./utc-offset-to~$-14400</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='5'>
+ <description>GET on resource - no DST</description>
+ <request>
+ <method>GET</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/Phoenix&start=20060101&end=20090101</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>contains</name>
+ <value>2006-01-01T00:00:00</value>
+ <value>-25200</value>
+ </arg>
+ <arg>
+ <name>notcontains</name>
+ <value>2007</value>
+ <value>2008</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='6'>
+ <description>POST on resource - start == end</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:?action=expand&tzid=America/Phoenix&start=20060101&end=20090101</ruri>
+ <verify>
+ <callback>statusCode</callback>
+ </verify>
+ <verify>
+ <callback>dataString</callback>
+ <arg>
+ <name>contains</name>
+ <value>2006-01-01T00:00:00</value>
+ <value>-25200</value>
+ </arg>
+ <arg>
+ <name>notcontains</name>
+ <value>2007</value>
+ <value>2008</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ <test name='7'>
+ <description>POST on resource trailing slash - simple range</description>
+ <request>
+ <method>POST</method>
+ <ruri>$timezonestdservice:/?action=expand&tzid=America/New_York&start=20080101&end=20090101</ruri>
+ <verify>
+ <callback>jsonPointerMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>/dtstamp</value>
+ <value>/observances/./onset~$2008-01-01T00:00:00</value>
+ <value>/observances/./onset~$2008-03-09T02:00:00</value>
+ <value>/observances/./onset~$2008-11-02T02:00:00</value>
+ <value>/observances/./utc-offset-from~$-18000</value>
+ <value>/observances/./utc-offset-to~$-18000</value>
+ <value>/observances/./utc-offset-from~$-14400</value>
+ <value>/observances/./utc-offset-to~$-14400</value>
+ </arg>
+ </verify>
+ </request>
+ </test>
+ </test-suite>
+
+ <end/>
+
+</caldavtest>
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/src/jsonPointer.py (from rev 10136, CalDAVTester/trunk/src/jsonPointer.py)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/src/jsonPointer.py (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/jsonPointer.py 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,171 @@
+##
+# Copyright (c) 2012 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.
+##
+
+import json
+
+
+class JSONPointerMatchError(Exception):
+ """
+ Exception for failed pointer matches
+ """
+ pass
+
+
+
+class JSONPointer(object):
+ """
+ Represents a JSON Pointer that can match a specific JSON object.
+ """
+
+ def __init__(self, pointer):
+
+ if not pointer or pointer[0] != "/":
+ raise ValueError("Invalid JSON pointer: %s" % (pointer,))
+ self.segments = self._splitSegments(pointer)
+
+
+ def _splitSegments(self, pointer):
+ """
+ Split a pointer up into segments.
+
+ @param pointer: the pointer
+ @type pointer: C{str}
+
+ @return: list of segments
+ @rtype C{list}
+ """
+ splits = pointer[1:].split("/")
+ if splits == [""]:
+ return None
+ if any(map(lambda x: len(x) == 0, splits)):
+ raise TypeError("Pointer segment is empty: %s" % (pointer,))
+ return map(self._unescape, splits)
+
+
+ def _unescape(self, segment):
+ """
+ Unescape ~0 and ~1 in a path segment.
+
+ @param segment: the segment to unescape
+ @type segment: C{str}
+
+ @return: the unescaped segment
+ @rtype: C{str}
+ """
+ return segment.replace("~1", "/").replace("~0", "~")
+
+
+ def matchs(self, s):
+ """
+ Match this pointer against the string representation of a JSON object.
+
+ @param s: a string representation of a JSON object
+ @type s: C{str}
+ """
+
+ return self.match(json.loads(s))
+
+
+ def match(self, j):
+ """
+ Match this pointer against the JSON object.
+
+ @param j: a JSON object
+ @type j: C{dict} or C{list}
+ """
+
+ try:
+ return self.walk(j, self.segments)
+ except Exception:
+ raise JSONPointerMatchError
+
+
+ def walk(self, j, segments):
+ """
+ Recursively match the next portion of a pointer segment.
+
+ @param j: JSON object to match
+ @type j: C{dict} or C{list}
+ @param segments: list of pointer segments
+ @type segments: C{list}
+ """
+
+ if not segments:
+ return j
+
+ if isinstance(j, dict):
+ return self.walk(j[segments[0]], segments[1:])
+ elif isinstance(j, list):
+ index = -1 if segments[0] == "-" else int(segments[0])
+ return self.walk(j[index], segments[1:])
+ else:
+ raise JSONPointerMatchError
+
+
+
+class JSONMatcher(JSONPointer):
+ """
+ Represents a JSON pointer with syntax allowing a match against multiple JSON objects. If any
+ segment of a path is a single ".", then all object or array members are matched. The result of
+ the match is the array of objects that match. Missing keys and index past the end are ignored.
+ """
+
+ def __init__(self, pointer):
+
+ if not pointer or pointer[0] != "/":
+ raise ValueError("Invalid JSON pointer: %s" % (pointer,))
+ self.segments = self._splitSegments(pointer)
+
+
+ def walk(self, j, segments):
+ """
+ Recursively match the next portion of a pointer segment, talking wildcard "."
+ segment matching into account.
+
+ @param j: JSON object to match
+ @type j: C{dict} or C{list}
+ @param segments: list of pointer segments
+ @type segments: C{list}
+ """
+
+ if not segments:
+ return [j, ]
+
+ results = []
+ if isinstance(j, dict):
+ if segments[0] == ".":
+ keys = j.keys()
+ else:
+ keys = [segments[0]]
+ for k in keys:
+ try:
+ results.extend(self.walk(j[k], segments[1:]))
+ except KeyError:
+ pass
+ elif isinstance(j, list):
+ if segments[0] == ".":
+ r = range(len(j))
+ else:
+ r = [-1 if segments[0] == "-" else int(segments[0])]
+ for index in r:
+ try:
+ results.extend(self.walk(j[index], segments[1:]))
+ except IndexError:
+ pass
+ else:
+ raise JSONPointerMatchError
+
+ return results
Deleted: CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py
===================================================================
--- CalDAVTester/trunk/src/unittest/__init__.py 2012-12-07 19:20:46 UTC (rev 10136)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py 2012-12-07 21:01:33 UTC (rev 10138)
@@ -1,15 +0,0 @@
-##
-# Copyright (c) 2012 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.
-##
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py (from rev 10136, CalDAVTester/trunk/src/unittest/__init__.py)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/__init__.py 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,15 @@
+##
+# Copyright (c) 2012 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.
+##
Deleted: CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py
===================================================================
--- CalDAVTester/trunk/src/unittest/test_jsonPointer.py 2012-12-07 19:20:46 UTC (rev 10136)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py 2012-12-07 21:01:33 UTC (rev 10138)
@@ -1,260 +0,0 @@
-##
-# Copyright (c) 2012 Cyrus Daboo. 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.
-##
-
-import unittest
-from src.jsonPointer import JSONPointer, JSONPointerMatchError, JSONMatcher
-
-class TestJSONPointer(unittest.TestCase):
-
- def testValidPointers(self):
- data = (
- (None, False),
- ("", False),
- (1, False),
- ("/", True),
- ("//", False),
- ("/abc", True),
- ("/abc/", False),
- )
-
- for pointer, result in data:
- try:
- JSONPointer(pointer)
- ok = True
- except (ValueError, TypeError):
- ok = False
- self.assertEqual(ok, result, "Failed test: %s" % (pointer,))
-
-
- def testUnescape(self):
- data = (
- ("/", None),
- ("/~0", ["~", ]),
- ("/abc~1def", ["abc/def", ]),
- ("/abc/~0~1a", ["abc", "~/a", ]),
- ("/~0ab~1c/~0~1a", ["~ab/c", "~/a", ]),
- )
-
- for pointer, result in data:
- j = JSONPointer(pointer)
- self.assertEqual(j.segments, result, "Failed test: %s" % (pointer,))
-
-
- def testMatchOK(self):
- data = (
- # Objects
- ("/", '{"1": "foo"}', {"1": "foo"}),
- ("/1", '{"1": "foo", "2": "bar"}', "foo"),
- ("/2", '{"1": "foo", "2": "bar"}', "bar"),
- ("/1", '{"1": {"1.1": "foo"}}', {"1.1": "foo"}),
- ("/1/1.1", '{"1": {"1.1": "foo", "1.2": "bar"}}', "foo"),
- ("/1/1.2", '{"1": {"1.1": "foo", "1.2": "bar"}}', "bar"),
-
- # Arrays
- ("/", '["1", "2"]', ["1", "2"]),
- ("/0", '["1", "2"]', "1"),
- ("/1", '["1", "2"]', "2"),
- ("/-", '["1", "2"]', "2"),
- ("/0", '[["1", "2"]]', ["1", "2"]),
- ("/-", '[["1", "2"]]', ["1", "2"]),
- ("/0/0", '[["1", "2"]]', "1"),
- ("/0/1", '[["1", "2"]]', "2"),
- ("/0/-", '[["1", "2"]]', "2"),
-
- # Both
- ("/", '{"1": ["foo", "bar"]}', {"1": ["foo", "bar"]}),
- ("/1", '{"1": ["foo", "bar"]}', ["foo", "bar"]),
- ("/1/0", '{"1": ["foo", "bar"]}', "foo"),
- ("/1/1", '{"1": ["foo", "bar"]}', "bar"),
- ("/1/-", '{"1": ["foo", "bar"]}', "bar"),
- ("/", '[{"1.1": "foo", "1.2": "bar"}]', [{"1.1": "foo", "1.2": "bar"}]),
- ("/0", '[{"1.1": "foo", "1.2": "bar"}]', {"1.1": "foo", "1.2": "bar"}),
- ("/-", '[{"1.1": "foo", "1.2": "bar"}]', {"1.1": "foo", "1.2": "bar"}),
- ("/0/1.1", '[{"1.1": "foo", "1.2": "bar"}]', "foo"),
- ("/0/1.2", '[{"1.1": "foo", "1.2": "bar"}]', "bar"),
- )
-
- for pointer, jobj, result in data:
- j = JSONPointer(pointer)
- self.assertEqual(j.matchs(jobj), result, "Failed test: %s" % (pointer,))
-
-
- def testMatchBad(self):
- data = (
- # Objects
- ("/3", '{"1": "foo", "2": "bar"}'),
- ("/a", '{"1": "foo", "2": "bar"}'),
- ("/-", '{"1": "foo", "2": "bar"}'),
- ("/1/3", '{"1": {"1.1": "foo", "1.2": "bar"}}'),
- ("/1/a", '{"1": {"1.1": "foo", "1.2": "bar"}}'),
- ("/1/-", '{"1": {"1.1": "foo", "1.2": "bar"}}'),
-
- # Arrays
- ("/2", '["1", "2"]'),
- ("/0/2", '[["1", "2"]]'),
-
- # Both
- ("/1/3", '{"1": ["foo", "bar"]}'),
- ("/0/3", '[{"1.1": "foo", "1.2": "bar"}]'),
- ("/0/a", '[{"1.1": "foo", "1.2": "bar"}]'),
- ("/0/-", '[{"1.1": "foo", "1.2": "bar"}]'),
-
- # Wrong Object
- ("/1/0", '{"1": "foo"}'),
- ("/1/0", '{"1": 1}'),
- ("/1/0", '{"1": true}'),
- ("/1/0", '{"1": null}'),
- )
-
- for pointer, jobj in data:
- j = JSONPointer(pointer)
- self.assertRaises(JSONPointerMatchError, j.matchs, jobj)
-
-
-
-class TestJSONMatcher(unittest.TestCase):
-
- def testMatchOK(self):
- data = (
- # Objects
- ("/", '{"1": "foo"}', [{"1": "foo"}]),
- ("/1", '{"1": "foo", "2": "bar"}', ["foo"]),
- ("/2", '{"1": "foo", "2": "bar"}', ["bar"]),
- ("/1", '{"1": {"1.1": "foo"}}', [{"1.1": "foo"}]),
- ("/1/1.1", '{"1": {"1.1": "foo", "1.2": "bar"}}', ["foo"]),
- ("/1/1.2", '{"1": {"1.1": "foo", "1.2": "bar"}}', ["bar"]),
-
- # Arrays
- ("/", '["1", "2"]', [["1", "2"]]),
- ("/0", '["1", "2"]', ["1"]),
- ("/1", '["1", "2"]', ["2"]),
- ("/-", '["1", "2"]', ["2"]),
- ("/0", '[["1", "2"]]', [["1", "2"]]),
- ("/-", '[["1", "2"]]', [["1", "2"]]),
- ("/0/0", '[["1", "2"]]', ["1"]),
- ("/0/1", '[["1", "2"]]', ["2"]),
- ("/0/-", '[["1", "2"]]', ["2"]),
-
- # Both
- ("/", '{"1": ["foo", "bar"]}', [{"1": ["foo", "bar"]}]),
- ("/1", '{"1": ["foo", "bar"]}', [["foo", "bar"]]),
- ("/1/0", '{"1": ["foo", "bar"]}', ["foo"]),
- ("/1/1", '{"1": ["foo", "bar"]}', ["bar"]),
- ("/1/-", '{"1": ["foo", "bar"]}', ["bar"]),
- ("/", '[{"1.1": "foo", "1.2": "bar"}]', [[{"1.1": "foo", "1.2": "bar"}]]),
- ("/0", '[{"1.1": "foo", "1.2": "bar"}]', [{"1.1": "foo", "1.2": "bar"}]),
- ("/-", '[{"1.1": "foo", "1.2": "bar"}]', [{"1.1": "foo", "1.2": "bar"}]),
- ("/0/1.1", '[{"1.1": "foo", "1.2": "bar"}]', ["foo"]),
- ("/0/1.2", '[{"1.1": "foo", "1.2": "bar"}]', ["bar"]),
- )
-
- for pointer, jobj, result in data:
- j = JSONMatcher(pointer)
- self.assertEqual(j.matchs(jobj), result, "Failed test: %s" % (pointer,))
-
-
- def testMatchBad(self):
- data = (
- # Objects
- ("/3", '{"1": "foo", "2": "bar"}', False),
- ("/a", '{"1": "foo", "2": "bar"}', False),
- ("/-", '{"1": "foo", "2": "bar"}', False),
- ("/1/3", '{"1": {"1.1": "foo", "1.2": "bar"}}', False),
- ("/1/a", '{"1": {"1.1": "foo", "1.2": "bar"}}', False),
- ("/1/-", '{"1": {"1.1": "foo", "1.2": "bar"}}', False),
-
- # Arrays
- ("/2", '["1", "2"]', False),
- ("/0/2", '[["1", "2"]]', False),
-
- # Both
- ("/1/3", '{"1": ["foo", "bar"]}', False),
- ("/0/3", '[{"1.1": "foo", "1.2": "bar"}]', False),
- ("/0/a", '[{"1.1": "foo", "1.2": "bar"}]', False),
- ("/0/-", '[{"1.1": "foo", "1.2": "bar"}]', False),
-
- # Wrong Object
- ("/1/0", '{"1": "foo"}', True),
- ("/1/0", '{"1": 1}', True),
- ("/1/0", '{"1": true}', True),
- ("/1/0", '{"1": null}', True),
- )
-
- for pointer, jobj, willRaise in data:
- j = JSONMatcher(pointer)
- if willRaise:
- self.assertRaises(JSONPointerMatchError, j.matchs, jobj)
- else:
- self.assertEqual(j.matchs(jobj), [], "Failed test: %s" % (pointer,))
-
-
- def testMatchingOK(self):
- data = (
- (
- "/",
- '{"1":"foo", "2": "bar"}',
- [{"1":"foo", "2": "bar"}, ],
- ),
- (
- "/.",
- '{"1":"foo", "2": "bar"}',
- ["foo", "bar", ],
- ),
- (
- "/./0",
- '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
- ["foo1", "bar1", ],
- ),
- (
- "/./1",
- '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
- ["foo2", "bar2", ],
- ),
- (
- "/./-",
- '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
- ["foo2", "bar2", ],
- ),
- (
- "/./2",
- '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
- [],
- ),
- (
- "/./foo1",
- '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
- ["bar1", "bar3", ],
- ),
- (
- "/./foo2",
- '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
- ["bar2", ],
- ),
- (
- "/./foo4",
- '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
- ["bar4", ],
- ),
- (
- "/./foo3",
- '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
- [],
- ),
- )
-
- for pointer, jobj, result in data:
- j = JSONMatcher(pointer)
- self.assertEqual(j.matchs(jobj), result, "Failed test: %s" % (pointer,))
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py (from rev 10136, CalDAVTester/trunk/src/unittest/test_jsonPointer.py)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/unittest/test_jsonPointer.py 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,260 @@
+##
+# Copyright (c) 2012 Cyrus Daboo. 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.
+##
+
+import unittest
+from src.jsonPointer import JSONPointer, JSONPointerMatchError, JSONMatcher
+
+class TestJSONPointer(unittest.TestCase):
+
+ def testValidPointers(self):
+ data = (
+ (None, False),
+ ("", False),
+ (1, False),
+ ("/", True),
+ ("//", False),
+ ("/abc", True),
+ ("/abc/", False),
+ )
+
+ for pointer, result in data:
+ try:
+ JSONPointer(pointer)
+ ok = True
+ except (ValueError, TypeError):
+ ok = False
+ self.assertEqual(ok, result, "Failed test: %s" % (pointer,))
+
+
+ def testUnescape(self):
+ data = (
+ ("/", None),
+ ("/~0", ["~", ]),
+ ("/abc~1def", ["abc/def", ]),
+ ("/abc/~0~1a", ["abc", "~/a", ]),
+ ("/~0ab~1c/~0~1a", ["~ab/c", "~/a", ]),
+ )
+
+ for pointer, result in data:
+ j = JSONPointer(pointer)
+ self.assertEqual(j.segments, result, "Failed test: %s" % (pointer,))
+
+
+ def testMatchOK(self):
+ data = (
+ # Objects
+ ("/", '{"1": "foo"}', {"1": "foo"}),
+ ("/1", '{"1": "foo", "2": "bar"}', "foo"),
+ ("/2", '{"1": "foo", "2": "bar"}', "bar"),
+ ("/1", '{"1": {"1.1": "foo"}}', {"1.1": "foo"}),
+ ("/1/1.1", '{"1": {"1.1": "foo", "1.2": "bar"}}', "foo"),
+ ("/1/1.2", '{"1": {"1.1": "foo", "1.2": "bar"}}', "bar"),
+
+ # Arrays
+ ("/", '["1", "2"]', ["1", "2"]),
+ ("/0", '["1", "2"]', "1"),
+ ("/1", '["1", "2"]', "2"),
+ ("/-", '["1", "2"]', "2"),
+ ("/0", '[["1", "2"]]', ["1", "2"]),
+ ("/-", '[["1", "2"]]', ["1", "2"]),
+ ("/0/0", '[["1", "2"]]', "1"),
+ ("/0/1", '[["1", "2"]]', "2"),
+ ("/0/-", '[["1", "2"]]', "2"),
+
+ # Both
+ ("/", '{"1": ["foo", "bar"]}', {"1": ["foo", "bar"]}),
+ ("/1", '{"1": ["foo", "bar"]}', ["foo", "bar"]),
+ ("/1/0", '{"1": ["foo", "bar"]}', "foo"),
+ ("/1/1", '{"1": ["foo", "bar"]}', "bar"),
+ ("/1/-", '{"1": ["foo", "bar"]}', "bar"),
+ ("/", '[{"1.1": "foo", "1.2": "bar"}]', [{"1.1": "foo", "1.2": "bar"}]),
+ ("/0", '[{"1.1": "foo", "1.2": "bar"}]', {"1.1": "foo", "1.2": "bar"}),
+ ("/-", '[{"1.1": "foo", "1.2": "bar"}]', {"1.1": "foo", "1.2": "bar"}),
+ ("/0/1.1", '[{"1.1": "foo", "1.2": "bar"}]', "foo"),
+ ("/0/1.2", '[{"1.1": "foo", "1.2": "bar"}]', "bar"),
+ )
+
+ for pointer, jobj, result in data:
+ j = JSONPointer(pointer)
+ self.assertEqual(j.matchs(jobj), result, "Failed test: %s" % (pointer,))
+
+
+ def testMatchBad(self):
+ data = (
+ # Objects
+ ("/3", '{"1": "foo", "2": "bar"}'),
+ ("/a", '{"1": "foo", "2": "bar"}'),
+ ("/-", '{"1": "foo", "2": "bar"}'),
+ ("/1/3", '{"1": {"1.1": "foo", "1.2": "bar"}}'),
+ ("/1/a", '{"1": {"1.1": "foo", "1.2": "bar"}}'),
+ ("/1/-", '{"1": {"1.1": "foo", "1.2": "bar"}}'),
+
+ # Arrays
+ ("/2", '["1", "2"]'),
+ ("/0/2", '[["1", "2"]]'),
+
+ # Both
+ ("/1/3", '{"1": ["foo", "bar"]}'),
+ ("/0/3", '[{"1.1": "foo", "1.2": "bar"}]'),
+ ("/0/a", '[{"1.1": "foo", "1.2": "bar"}]'),
+ ("/0/-", '[{"1.1": "foo", "1.2": "bar"}]'),
+
+ # Wrong Object
+ ("/1/0", '{"1": "foo"}'),
+ ("/1/0", '{"1": 1}'),
+ ("/1/0", '{"1": true}'),
+ ("/1/0", '{"1": null}'),
+ )
+
+ for pointer, jobj in data:
+ j = JSONPointer(pointer)
+ self.assertRaises(JSONPointerMatchError, j.matchs, jobj)
+
+
+
+class TestJSONMatcher(unittest.TestCase):
+
+ def testMatchOK(self):
+ data = (
+ # Objects
+ ("/", '{"1": "foo"}', [{"1": "foo"}]),
+ ("/1", '{"1": "foo", "2": "bar"}', ["foo"]),
+ ("/2", '{"1": "foo", "2": "bar"}', ["bar"]),
+ ("/1", '{"1": {"1.1": "foo"}}', [{"1.1": "foo"}]),
+ ("/1/1.1", '{"1": {"1.1": "foo", "1.2": "bar"}}', ["foo"]),
+ ("/1/1.2", '{"1": {"1.1": "foo", "1.2": "bar"}}', ["bar"]),
+
+ # Arrays
+ ("/", '["1", "2"]', [["1", "2"]]),
+ ("/0", '["1", "2"]', ["1"]),
+ ("/1", '["1", "2"]', ["2"]),
+ ("/-", '["1", "2"]', ["2"]),
+ ("/0", '[["1", "2"]]', [["1", "2"]]),
+ ("/-", '[["1", "2"]]', [["1", "2"]]),
+ ("/0/0", '[["1", "2"]]', ["1"]),
+ ("/0/1", '[["1", "2"]]', ["2"]),
+ ("/0/-", '[["1", "2"]]', ["2"]),
+
+ # Both
+ ("/", '{"1": ["foo", "bar"]}', [{"1": ["foo", "bar"]}]),
+ ("/1", '{"1": ["foo", "bar"]}', [["foo", "bar"]]),
+ ("/1/0", '{"1": ["foo", "bar"]}', ["foo"]),
+ ("/1/1", '{"1": ["foo", "bar"]}', ["bar"]),
+ ("/1/-", '{"1": ["foo", "bar"]}', ["bar"]),
+ ("/", '[{"1.1": "foo", "1.2": "bar"}]', [[{"1.1": "foo", "1.2": "bar"}]]),
+ ("/0", '[{"1.1": "foo", "1.2": "bar"}]', [{"1.1": "foo", "1.2": "bar"}]),
+ ("/-", '[{"1.1": "foo", "1.2": "bar"}]', [{"1.1": "foo", "1.2": "bar"}]),
+ ("/0/1.1", '[{"1.1": "foo", "1.2": "bar"}]', ["foo"]),
+ ("/0/1.2", '[{"1.1": "foo", "1.2": "bar"}]', ["bar"]),
+ )
+
+ for pointer, jobj, result in data:
+ j = JSONMatcher(pointer)
+ self.assertEqual(j.matchs(jobj), result, "Failed test: %s" % (pointer,))
+
+
+ def testMatchBad(self):
+ data = (
+ # Objects
+ ("/3", '{"1": "foo", "2": "bar"}', False),
+ ("/a", '{"1": "foo", "2": "bar"}', False),
+ ("/-", '{"1": "foo", "2": "bar"}', False),
+ ("/1/3", '{"1": {"1.1": "foo", "1.2": "bar"}}', False),
+ ("/1/a", '{"1": {"1.1": "foo", "1.2": "bar"}}', False),
+ ("/1/-", '{"1": {"1.1": "foo", "1.2": "bar"}}', False),
+
+ # Arrays
+ ("/2", '["1", "2"]', False),
+ ("/0/2", '[["1", "2"]]', False),
+
+ # Both
+ ("/1/3", '{"1": ["foo", "bar"]}', False),
+ ("/0/3", '[{"1.1": "foo", "1.2": "bar"}]', False),
+ ("/0/a", '[{"1.1": "foo", "1.2": "bar"}]', False),
+ ("/0/-", '[{"1.1": "foo", "1.2": "bar"}]', False),
+
+ # Wrong Object
+ ("/1/0", '{"1": "foo"}', True),
+ ("/1/0", '{"1": 1}', True),
+ ("/1/0", '{"1": true}', True),
+ ("/1/0", '{"1": null}', True),
+ )
+
+ for pointer, jobj, willRaise in data:
+ j = JSONMatcher(pointer)
+ if willRaise:
+ self.assertRaises(JSONPointerMatchError, j.matchs, jobj)
+ else:
+ self.assertEqual(j.matchs(jobj), [], "Failed test: %s" % (pointer,))
+
+
+ def testMatchingOK(self):
+ data = (
+ (
+ "/",
+ '{"1":"foo", "2": "bar"}',
+ [{"1":"foo", "2": "bar"}, ],
+ ),
+ (
+ "/.",
+ '{"1":"foo", "2": "bar"}',
+ ["foo", "bar", ],
+ ),
+ (
+ "/./0",
+ '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
+ ["foo1", "bar1", ],
+ ),
+ (
+ "/./1",
+ '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
+ ["foo2", "bar2", ],
+ ),
+ (
+ "/./-",
+ '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
+ ["foo2", "bar2", ],
+ ),
+ (
+ "/./2",
+ '{"1":["foo1", "foo2"], "2": ["bar1", "bar2"]}',
+ [],
+ ),
+ (
+ "/./foo1",
+ '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
+ ["bar1", "bar3", ],
+ ),
+ (
+ "/./foo2",
+ '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
+ ["bar2", ],
+ ),
+ (
+ "/./foo4",
+ '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
+ ["bar4", ],
+ ),
+ (
+ "/./foo3",
+ '{"1":{"foo1": "bar1", "foo2": "bar2"}, "2": {"foo1": "bar3", "foo4": "bar4"}}',
+ [],
+ ),
+ )
+
+ for pointer, jobj, result in data:
+ j = JSONMatcher(pointer)
+ self.assertEqual(j.matchs(jobj), result, "Failed test: %s" % (pointer,))
Copied: CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/jsonPointerMatch.py (from rev 10136, CalDAVTester/trunk/verifiers/jsonPointerMatch.py)
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/jsonPointerMatch.py (rev 0)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/jsonPointerMatch.py 2012-12-07 21:01:33 UTC (rev 10138)
@@ -0,0 +1,103 @@
+##
+# Copyright (c) 2010 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+
+"""
+Verifier that matches JSON content using extended JSON pointer syntax.
+
+JSON pointer syntax is extended as follows:
+
+1) A ~$xxx at the end will result in a test for the string "xxx" in the matching JSON object.
+2) A "." as a path segment will match any JSON object member or array item.
+"""
+
+import json
+from src.jsonPointer import JSONMatcher, JSONPointerMatchError
+
+class Verifier(object):
+
+ def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
+ # Get arguments
+ statusCodes = args.get("status", ["200", ])
+ exists = args.get("exists", [])
+ notexists = args.get("notexists", [])
+
+ # status code must match
+ if str(response.status) not in statusCodes:
+ return False, " HTTP Status Code Wrong: %d" % (response.status,)
+
+ # look for response data
+ if not respdata:
+ return False, " No response body"
+
+ # Must be application/json
+ ct = response.msg.getheaders("content-type")
+ if ct[0] != "application/json":
+ return False, " Wrong Content-Type: %s" % (ct,)
+
+ # Read in json
+ try:
+ j = json.loads(respdata)
+ except Exception, e:
+ return False, " Response data is not JSON data: %s" % (e,)
+
+ def _splitPathTests(path):
+ if '[' in path:
+ return path.split('[', 1)
+ else:
+ return path, None
+
+ result = True
+ resulttxt = ""
+ for jpath in exists:
+ if jpath.find("~$") != -1:
+ path, value = jpath.split("~$")
+ else:
+ path, value = jpath, None
+ try:
+ jp = JSONMatcher(path)
+ except Exception:
+ result = False
+ resulttxt += " Invalid JSON pointer for %s\n" % (path,)
+ else:
+ try:
+ jobjs = jp.match(j)
+ if not jobjs:
+ result = False
+ resulttxt += " Items not returned in JSON for %s\n" % (path,)
+ if value and value not in map(str, jobjs):
+ result = False
+ resulttxt += " Item values not returned in JSON for %s\n" % (jpath,)
+ except JSONPointerMatchError:
+ result = False
+ resulttxt += " Items not returned in JSON for %s\n" % (path,)
+
+ for jpath in notexists:
+ try:
+ jp = JSONMatcher(jpath)
+ except Exception:
+ result = False
+ resulttxt += " Invalid JSON pointer for %s\n" % (jpath,)
+ else:
+ try:
+ jp.match(j)
+ except JSONPointerMatchError:
+ pass
+ else:
+ resulttxt += " Items returned in JSON for %s\n" % (jpath,)
+ result = False
+
+ return result, resulttxt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121207/bb6a93ae/attachment-0001.html>
More information about the calendarserver-changes
mailing list