[CalendarServer-changes] [12538] CalDAVTester/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 12 11:23:34 PDT 2014
Revision: 12538
http://trac.calendarserver.org//changeset/12538
Author: cdaboo at apple.com
Date: 2014-02-03 09:58:12 -0800 (Mon, 03 Feb 2014)
Log Message:
-----------
Turn on tests for JSON data. Make JSON calendar verifier use the same logic as the regular iCalendar one.
Modified Paths:
--------------
CalDAVTester/trunk/scripts/server/serverinfo-pod.xml
CalDAVTester/trunk/scripts/server/serverinfo-template.xml
CalDAVTester/trunk/scripts/server/serverinfo.xml
CalDAVTester/trunk/scripts/tests/CalDAV/json.xml
CalDAVTester/trunk/verifiers/calendarDataMatch.py
CalDAVTester/trunk/verifiers/jcalDataMatch.py
Modified: CalDAVTester/trunk/scripts/server/serverinfo-pod.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo-pod.xml 2014-02-02 22:26:27 UTC (rev 12537)
+++ CalDAVTester/trunk/scripts/server/serverinfo-pod.xml 2014-02-03 17:58:12 UTC (rev 12538)
@@ -68,7 +68,7 @@
<!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
<!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
- <!-- <feature>json-data</feature> --> <!-- jCal and jCard support -->
+ <feature>json-data</feature> <!-- jCal and jCard support -->
<!-- CalDAV specific extension -->
<feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
Modified: CalDAVTester/trunk/scripts/server/serverinfo-template.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo-template.xml 2014-02-02 22:26:27 UTC (rev 12537)
+++ CalDAVTester/trunk/scripts/server/serverinfo-template.xml 2014-02-03 17:58:12 UTC (rev 12538)
@@ -63,7 +63,7 @@
<!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
<!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
- <!-- <feature>json-data</feature> --> <!-- jCal and jCard support -->
+ <feature>json-data</feature> <!-- jCal and jCard support -->
<!-- CalDAV specific extension -->
<feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
Modified: CalDAVTester/trunk/scripts/server/serverinfo.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo.xml 2014-02-02 22:26:27 UTC (rev 12537)
+++ CalDAVTester/trunk/scripts/server/serverinfo.xml 2014-02-03 17:58:12 UTC (rev 12538)
@@ -63,7 +63,7 @@
<!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
<!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
- <!-- <feature>json-data</feature> --> <!-- jCal and jCard support -->
+ <feature>json-data</feature> <!-- jCal and jCard support -->
<!-- CalDAV specific extension -->
<feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
Modified: CalDAVTester/trunk/scripts/tests/CalDAV/json.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CalDAV/json.xml 2014-02-02 22:26:27 UTC (rev 12537)
+++ CalDAVTester/trunk/scripts/tests/CalDAV/json.xml 2014-02-03 17:58:12 UTC (rev 12538)
@@ -28,8 +28,8 @@
<start/>
- <test-suite name='PUT iCal/GET json' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='PUT iCal/GET json'>
+ <test name='1'>
<description>PUT iCalendar</description>
<request>
<method>PUT</method>
@@ -43,7 +43,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET jCal</description>
<request>
<method>GET</method>
@@ -61,7 +61,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$calendarpath1:/1.ics</ruri>
@@ -72,8 +72,8 @@
</test>
</test-suite>
- <test-suite name='PUT json/GET json/icalendar + Accept/q' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='PUT json/GET json/icalendar + Accept/q'>
+ <test name='1'>
<description>PUT jCal</description>
<request>
<method>PUT</method>
@@ -87,7 +87,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET jCal</description>
<request>
<method>GET</method>
@@ -105,7 +105,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar - with accept</description>
<request>
<method>GET</method>
@@ -123,7 +123,7 @@
</verify>
</request>
</test>
- <test name='4' ignore='no'>
+ <test name='4'>
<description>GET iCalendar - no accept</description>
<request>
<method>GET</method>
@@ -137,7 +137,7 @@
</verify>
</request>
</test>
- <test name='5' ignore='no'>
+ <test name='5'>
<description>GET jCal - preferred Accept</description>
<request>
<method>GET</method>
@@ -155,7 +155,7 @@
</verify>
</request>
</test>
- <test name='6' ignore='no'>
+ <test name='6'>
<description>GET jCal - q= preferred Accept</description>
<request>
<method>GET</method>
@@ -173,7 +173,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$calendarpath1:/1.ics</ruri>
@@ -184,8 +184,8 @@
</test>
</test-suite>
- <test-suite name='PUT + return-rep' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='PUT + return-rep'>
+ <test name='1'>
<description>PUT jCal/return iCalendar</description>
<request>
<method>PUT</method>
@@ -210,7 +210,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>PUT jCal/return jCal</description>
<request>
<method>PUT</method>
@@ -239,7 +239,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>PUT iCalendar/return iCalendar</description>
<request>
<method>PUT</method>
@@ -264,7 +264,7 @@
</verify>
</request>
</test>
- <test name='4' ignore='no'>
+ <test name='4'>
<description>PUT iCalendar/return jCal</description>
<request>
<method>PUT</method>
@@ -293,7 +293,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$calendarpath1:/1.ics</ruri>
@@ -304,8 +304,8 @@
</test>
</test-suite>
- <test-suite name='Multiget json' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='Multiget json'>
+ <test name='1'>
<description>PUT iCalendar</description>
<request>
<method>PUT</method>
@@ -319,7 +319,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>multiget jCal</description>
<request>
<method>REPORT</method>
@@ -343,14 +343,23 @@
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[@content-type="application/calendar+json"]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[json]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vcalendar]</value>
- <value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vtimezone]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vevent]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*valarm]</value>
</arg>
</verify>
+ <verify>
+ <exclude-feature>
+ <feature>timezones-by-reference</feature>
+ </exclude-feature>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vtimezone]</value>
+ </arg>
+ </verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>multiget with filtered jCal</description>
<request>
<method>REPORT</method>
@@ -374,14 +383,23 @@
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[@content-type="application/calendar+json"]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[json]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vcalendar]</value>
- <value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vtimezone]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[$vevent]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[$valarm]</value>
</arg>
</verify>
+ <verify>
+ <exclude-feature>
+ <feature>timezones-by-reference</feature>
+ </exclude-feature>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vtimezone]</value>
+ </arg>
+ </verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$calendarpath1:/1.ics</ruri>
@@ -392,8 +410,8 @@
</test>
</test-suite>
- <test-suite name='Query json' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='Query json'>
+ <test name='1'>
<description>PUT iCalendar</description>
<request>
<method>PUT</method>
@@ -407,7 +425,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>query jCal</description>
<request>
<method>REPORT</method>
@@ -431,14 +449,23 @@
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[@content-type="application/calendar+json"]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[json]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vcalendar]</value>
- <value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vtimezone]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vevent]</value>
<value>$verify-property-prefix:/{$CALDAV:}calendar-data[*valarm]</value>
</arg>
</verify>
+ <verify>
+ <exclude-feature>
+ <feature>timezones-by-reference</feature>
+ </exclude-feature>
+ <callback>xmlElementMatch</callback>
+ <arg>
+ <name>exists</name>
+ <value>$verify-property-prefix:/{$CALDAV:}calendar-data[*vtimezone]</value>
+ </arg>
+ </verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>query with expanded jCal</description>
<request>
<method>REPORT</method>
@@ -470,7 +497,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$calendarpath1:/1.ics</ruri>
@@ -481,8 +508,8 @@
</test>
</test-suite>
- <test-suite name='Freebusy json' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='Freebusy json'>
+ <test name='1'>
<description>PUT iCalendar</description>
<request>
<method>PUT</method>
@@ -496,7 +523,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>POST json - get back json</description>
<request>
<method>POST</method>
@@ -517,7 +544,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$calendarpath1:/1.ics</ruri>
@@ -528,11 +555,11 @@
</test>
</test-suite>
- <test-suite name='POST;add-member' ignore='no'>
+ <test-suite name='POST;add-member'>
<require-feature>
<feature>add-member</feature>
</require-feature>
- <test name='1' ignore='no'>
+ <test name='1'>
<description>POST;add-member jCal</description>
<request>
<method>POST</method>
@@ -550,7 +577,7 @@
</grabheader>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET jCal</description>
<request>
<method>GET</method>
@@ -568,7 +595,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -586,7 +613,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$posted:</ruri>
@@ -597,11 +624,11 @@
</test>
</test-suite>
- <test-suite name='POST;add-member - return' ignore='no'>
+ <test-suite name='POST;add-member - return'>
<require-feature>
<feature>add-member</feature>
</require-feature>
- <test name='1' ignore='no'>
+ <test name='1'>
<description>POST;add-member jCal</description>
<request>
<method>POST</method>
@@ -631,7 +658,7 @@
</grabheader>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET jCal</description>
<request>
<method>GET</method>
@@ -649,7 +676,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -667,7 +694,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETE</method>
<ruri>$posted:</ruri>
@@ -678,11 +705,11 @@
</test>
</test-suite>
- <test-suite name='Simple BULK json - no return' ignore='no'>
+ <test-suite name='Simple BULK json - no return'>
<require-feature>
<feature>bulk-post</feature>
</require-feature>
- <test name='1' ignore='no'>
+ <test name='1'>
<description>POST jCal</description>
<request>
<method>POST</method>
@@ -711,7 +738,7 @@
</grabelement>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -725,7 +752,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -739,7 +766,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETEALL</method>
<ruri>$calendarpath1:/</ruri>
@@ -750,11 +777,11 @@
</test>
</test-suite>
- <test-suite name='Simple BULK json - return' ignore='no'>
+ <test-suite name='Simple BULK json - return'>
<require-feature>
<feature>bulk-post</feature>
</require-feature>
- <test name='1' ignore='no'>
+ <test name='1'>
<description>POST jCal</description>
<request>
<method>POST</method>
@@ -787,7 +814,7 @@
</grabelement>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -801,7 +828,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -815,7 +842,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETEALL</method>
<ruri>$calendarpath1:/</ruri>
@@ -826,11 +853,11 @@
</test>
</test-suite>
- <test-suite name='CRUD json' ignore='no'>
+ <test-suite name='CRUD json'>
<require-feature>
<feature>bulk-post</feature>
</require-feature>
- <test name='1' ignore='no'>
+ <test name='1'>
<description>POST jCal</description>
<request>
<method>POST</method>
@@ -859,7 +886,7 @@
</grabelement>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -873,7 +900,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar</description>
<request>
<method>GET</method>
@@ -887,7 +914,7 @@
</verify>
</request>
</test>
- <test name='-1' ignore='no'>
+ <test name='-1'>
<request>
<method>DELETEALL</method>
<ruri>$calendarpath1:/</ruri>
@@ -898,8 +925,8 @@
</test>
</test-suite>
- <test-suite name='Timezone prop json' ignore='no'>
- <test name='1' ignore='no'>
+ <test-suite name='Timezone prop json'>
+ <test name='1'>
<description>PROPPATCH jCal</description>
<request>
<method>PROPPATCH</method>
@@ -913,7 +940,7 @@
</verify>
</request>
</test>
- <test name='2' ignore='no'>
+ <test name='2'>
<description>PROPFIND jCal</description>
<request>
<method>PROPFIND</method>
@@ -938,7 +965,7 @@
</verify>
</request>
</test>
- <test name='3' ignore='no'>
+ <test name='3'>
<description>GET iCalendar - with accept</description>
<request>
<method>PROPFIND</method>
@@ -964,7 +991,7 @@
</test>
</test-suite>
- <test-suite name='Timezone service json' ignore='no'>
+ <test-suite name='Timezone service json'>
</test-suite>
<end/>
Modified: CalDAVTester/trunk/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/trunk/verifiers/calendarDataMatch.py 2014-02-02 22:26:27 UTC (rev 12537)
+++ CalDAVTester/trunk/verifiers/calendarDataMatch.py 2014-02-03 17:58:12 UTC (rev 12538)
@@ -24,7 +24,7 @@
class Verifier(object):
- def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
+ def verify(self, manager, uri, response, respdata, args, is_json=False): #@UnusedVariable
# Get arguments
files = args.get("filepath", [])
caldata = args.get("data", [])
@@ -113,13 +113,13 @@
component.removeProperty(property)
try:
- resp_calendar = Calendar.parseText(respdata)
+ resp_calendar = Calendar.parseText(respdata) if not is_json else Calendar.parseJSONData(respdata)
removePropertiesParameters(resp_calendar)
- respdata = resp_calendar.getText()
+ respdata = resp_calendar.getText() if not is_json else resp_calendar.getTextJSON()
- data_calendar = Calendar.parseText(data)
+ data_calendar = Calendar.parseText(data) if not is_json else Calendar.parseJSONData(data)
removePropertiesParameters(data_calendar)
- data = data_calendar.getText()
+ data = data_calendar.getText() if not is_json else data_calendar.getTextJSON()
result = respdata == data
Modified: CalDAVTester/trunk/verifiers/jcalDataMatch.py
===================================================================
--- CalDAVTester/trunk/verifiers/jcalDataMatch.py 2014-02-02 22:26:27 UTC (rev 12537)
+++ CalDAVTester/trunk/verifiers/jcalDataMatch.py 2014-02-03 17:58:12 UTC (rev 12538)
@@ -14,8 +14,7 @@
# limitations under the License.
##
-from difflib import unified_diff
-import json
+from verifiers.calendarDataMatch import Verifier as CalVerifier
"""
Verifier that checks the response body for a semantic match to data in a file.
@@ -23,108 +22,9 @@
class Verifier(object):
- def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
- # Get arguments
- files = args.get("filepath", [])
- caldata = args.get("data", [])
- filters = args.get("filter", [])
+ def verify(self, manager, uri, response, respdata, args):
- if "EMAIL parameter" not in manager.server_info.features:
- filters.append("ATTENDEE:EMAIL")
- filters.append("ORGANIZER:EMAIL")
- filters.append("ATTENDEE:X-CALENDARSERVER-DTSTAMP")
- filters.append("CALSCALE")
- filters.append("PRODID")
- filters.append("DTSTAMP")
- filters.append("CREATED")
- filters.append("LAST-MODIFIED")
- filters.append("X-WR-CALNAME")
-
- for afilter in tuple(filters):
- if afilter[0] == "!" and afilter[1:] in filters:
- filters.remove(afilter[1:])
- filters = filter(lambda x: x[0] != "!", filters)
-
- # status code must be 200, 201, 207
- if response.status not in (200, 201, 207):
- return False, " HTTP Status Code Wrong: %d" % (response.status,)
-
- # look for response data
- if not respdata:
- return False, " No response body"
-
- # look for content-type
- hdrs = response.msg.getheaders("Content-Type")
- if hdrs is None or len(hdrs) == 0:
- return False, " No Content-Type header"
- if len(hdrs) != 1:
- return False, " Wrong number of Content-Type headers"
- if hdrs[0].split(";")[0] != "application/calendar+json":
- return False, " Wrong Content-Type header"
-
- # look for one file
- if len(files) != 1 and len(caldata) != 1:
- return False, " No file to compare response to"
-
- # read in all data from specified file or use provided data
- if len(files):
- fd = open(files[0], "r")
- try:
- try:
- data = fd.read()
- finally:
- fd.close()
- except:
- data = None
- else:
- data = caldata[0] if len(caldata) else None
-
- if data is None:
- return False, " Could not read data file"
-
- data = manager.server_info.extrasubs(manager.server_info.subs(data))
-
- def removePropertiesParameters(component):
-
- # component = [name, props-array, subcomponent-array]
-
- for subcomponent in component[2]:
- removePropertiesParameters(subcomponent)
-
- for pos, property in reversed(tuple(enumerate(component[1]))):
-
- # property = [name, param-dict, value-type, values...]
-
- # Always reset DTSTAMP on these properties
- if property[0] in ("ATTENDEE".lower(), "X-CALENDARSERVER-ATTENDEE-COMMENT".lower()):
- if "X-CALENDARSERVER-DTSTAMP".lower() in property[1]:
- property[1]["X-CALENDARSERVER-DTSTAMP".lower()] = "20080101T000000Z"
-
- for filter in filters:
- if ":" in filter:
- propname, parameter = filter.split(":")
- if property[0] == propname.lower():
- if parameter.lower in property[1]:
- del property[1][parameter.lower()]
- else:
- if property[0] == filter.lower():
- del component[1][pos]
-
- try:
- resp_calendar = json.loads(respdata)
- removePropertiesParameters(resp_calendar)
- respdata = json.dumps(resp_calendar)
-
- data_calendar = json.loads(data)
- removePropertiesParameters(data_calendar)
- data = json.dumps(data_calendar)
-
- result = respdata == data
-
- if result:
- return True, ""
- else:
- error_diff = "\n".join([line for line in unified_diff(data.split("\n"), respdata.split("\n"))])
- return False, " Response data does not exactly match file data%s" % (error_diff,)
- except Exception, e:
- return False, " Response data is not calendar data: %s" % (e,)
+ # Just hand this off to the calendarDataMatch verifier which knows all about
+ # proper calendar normalization rules.
+ verifier = CalVerifier()
+ return verifier.verify(manager, uri, response, respdata, args, is_json=True)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/8aabc3b6/attachment.html>
More information about the calendarserver-changes
mailing list