[CalendarServer-changes] [5256] CalDAVTester/branches/users/cdaboo/sharing-5228/verifiers/ xmlDataMatch.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 5 12:18:38 PST 2010
Revision: 5256
http://trac.macosforge.org/projects/calendarserver/changeset/5256
Author: cdaboo at apple.com
Date: 2010-03-05 12:18:37 -0800 (Fri, 05 Mar 2010)
Log Message:
-----------
XML data verifier that can normalize and strip out certain elements before comparing.
Added Paths:
-----------
CalDAVTester/branches/users/cdaboo/sharing-5228/verifiers/xmlDataMatch.py
Added: CalDAVTester/branches/users/cdaboo/sharing-5228/verifiers/xmlDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/sharing-5228/verifiers/xmlDataMatch.py (rev 0)
+++ CalDAVTester/branches/users/cdaboo/sharing-5228/verifiers/xmlDataMatch.py 2010-03-05 20:18:37 UTC (rev 5256)
@@ -0,0 +1,85 @@
+##
+# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+from difflib import unified_diff
+import StringIO
+from xml.etree.ElementTree import ElementTree, tostring
+
+"""
+Verifier that checks the response body for an exact match to data in a file.
+"""
+
+class Verifier(object):
+
+ def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
+ # Get arguments
+ files = args.get("filepath", [])
+ filters = args.get("filter", [])
+
+ # status code must be 200, 207
+ if response.status not in (200,207):
+ return False, " HTTP Status Code Wrong: %d" % (response.status,)
+
+ # look for response data
+ if not respdata:
+ return False, " No response body"
+
+ # look for one file
+ if len(files) != 1:
+ return False, " No file to compare response to"
+
+ # read in all data from specified file
+ fd = open( files[0], "r" )
+ try:
+ try:
+ data = fd.read()
+ finally:
+ fd.close()
+ except:
+ data = None
+
+ if data is None:
+ return False, " Could not read data file"
+
+ data = manager.server_info.subs(data)
+
+ def normalizeXMLData(data):
+ # Read in XML
+ try:
+ tree = ElementTree(file=StringIO.StringIO(data))
+ except Exception:
+ raise ValueError("Could not parse XML data")
+
+ # Apply filters
+ for filter in filters:
+ for node in tree.getiterator(filter):
+ node.clear()
+ return tostring(tree.getroot())
+
+ try:
+ respdata = normalizeXMLData(respdata)
+ data = normalizeXMLData(data)
+
+ 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 xml data: %s" % (e,)
+
\ No newline at end of file
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100305/030c5a5b/attachment-0001.html>
More information about the calendarserver-changes
mailing list