[CalendarServer-changes] [14070] CalDAVTester/trunk/src
source_changes at macosforge.org
source_changes at macosforge.org
Fri Oct 10 13:30:54 PDT 2014
Revision: 14070
http://trac.calendarserver.org//changeset/14070
Author: cdaboo at apple.com
Date: 2014-10-10 13:30:54 -0700 (Fri, 10 Oct 2014)
Log Message:
-----------
Add a --debug option to help find async scheduling related problems.
Modified Paths:
--------------
CalDAVTester/trunk/src/caldavtest.py
CalDAVTester/trunk/src/manager.py
CalDAVTester/trunk/src/serverinfo.py
CalDAVTester/trunk/src/testsuite.py
Modified: CalDAVTester/trunk/src/caldavtest.py
===================================================================
--- CalDAVTester/trunk/src/caldavtest.py 2014-10-10 14:44:50 UTC (rev 14069)
+++ CalDAVTester/trunk/src/caldavtest.py 2014-10-10 20:30:54 UTC (rev 14070)
@@ -82,6 +82,7 @@
self.suites = []
self.grabbedlocation = None
self.previously_found = set()
+ self.uidmaps = {}
def missingFeatures(self):
@@ -101,7 +102,9 @@
return 0, 0, 1
# Always need a new set of UIDs for the entire test
- self.manager.server_info.newUIDs()
+ uids = self.manager.server_info.newUIDs()
+ for uid, uidname in uids:
+ self.uidmaps[uid] = "{} - {}".format(uidname, self.name)
self.only = any([suite.only for suite in self.suites])
try:
@@ -157,7 +160,9 @@
etags = {}
only_tests = any([test.only for test in suite.tests])
testsuite = self.manager.testSuite(testfile, result_name, "")
- suite.aboutToRun()
+ uids = suite.aboutToRun()
+ for uid, uidname in uids:
+ self.uidmaps[uid] = "{} - {}".format(uidname, label)
for test in suite.tests:
result = self.run_test(testsuite, test, etags, only_tests, label="%s | %s" % (label, test.name))
if result == "t":
@@ -244,6 +249,22 @@
return result
+ def doget(self, resource, label=""):
+ req = request(self.manager)
+ req.method = "GET"
+ req.ruris.append(resource[0])
+ req.ruri = resource[0]
+ if len(resource[1]):
+ req.user = resource[1]
+ if len(resource[2]):
+ req.pswd = resource[2]
+ _ignore_result, _ignore_resulttxt, response, respdata = self.dorequest(req, False, False, label=label)
+ if response.status / 100 != 2:
+ return False, None
+
+ return True, respdata
+
+
def dofindall(self, collection, label=""):
hrefs = []
req = request(self.manager)
@@ -398,6 +419,7 @@
def dowaitcount(self, collection, count, label=""):
+ hrefs = []
for _ignore in range(self.manager.server_info.waitcount):
req = request(self.manager)
req.method = "PROPFIND"
@@ -418,21 +440,39 @@
"""
req.data.content_type = "text/xml"
result, _ignore_resulttxt, response, respdata = self.dorequest(req, False, False, label="%s | %s %d" % (label, "WAITCOUNT", count))
- ctr = 0
+ hrefs = []
if result and (response is not None) and (response.status == 207) and (respdata is not None):
tree = ElementTree(file=StringIO(respdata))
for response in tree.findall("{DAV:}response"):
- ctr += 1
+ href = response.findall("{DAV:}href")[0]
+ if href.text.rstrip("/") != collection[0].rstrip("/"):
+ hrefs.append(href.text)
- if ctr - 1 == count:
- return None
+ if len(hrefs) == count:
+ return True, None
delay = self.manager.server_info.waitdelay
starttime = time.time()
while (time.time() < starttime + delay):
pass
+
+ if self.manager.debug:
+ # Get the content of each resource
+ rdata = ""
+ for href in hrefs:
+ result, respdata = self.doget((href, collection[1], collection[2],), label)
+ if respdata.startswith("BEGIN:VCALENDAR"):
+ uid = respdata.find("UID:")
+ if uid != -1:
+ uid = respdata[uid + 4:uid + respdata[uid:].find("\r\n")]
+ test = self.uidmaps.get(uid, "unknown")
+ else:
+ test = "unknown"
+ rdata += "\n\nhref: {}\ntest: {}\n\n{}\n".format(href, test, respdata)
+
+ return False, rdata
else:
- return ctr - 1
+ return False, len(hrefs)
def dowaitchanged(self, uri, etag, user, pswd, label=""):
@@ -547,9 +587,9 @@
count = int(req.method[10:])
for ruri in req.ruris:
collection = (ruri, req.user, req.pswd)
- waitcount = self.dowaitcount(collection, count, label=label)
- if waitcount is not None:
- return False, "Count did not change: {}".format(waitcount), None, None
+ waitresult, waitdetails = self.dowaitcount(collection, count, label=label)
+ if not waitresult:
+ return False, "Count did not change: {}".format(waitdetails), None, None
else:
return True, "", None, None
@@ -558,12 +598,12 @@
count = int(req.method[len("WAITDELETEALL"):])
for ruri in req.ruris:
collection = (ruri, req.user, req.pswd)
- waitcount = self.dowaitcount(collection, count, label=label)
- if waitcount is None:
+ waitresult, waitdetails = self.dowaitcount(collection, count, label=label)
+ if waitresult:
hrefs = self.dofindall(collection, label="%s | %s" % (label, "DELETEALL"))
self.dodeleteall(hrefs, label="%s | %s" % (label, "DELETEALL"))
else:
- return False, "Count did not change: {}".format(waitcount), None, None
+ return False, "Count did not change: {}".format(waitdetails), None, None
else:
return True, "", None, None
Modified: CalDAVTester/trunk/src/manager.py
===================================================================
--- CalDAVTester/trunk/src/manager.py 2014-10-10 14:44:50 UTC (rev 14069)
+++ CalDAVTester/trunk/src/manager.py 2014-10-10 20:30:54 UTC (rev 14070)
@@ -62,6 +62,7 @@
self.print_request = False
self.print_response = False
self.print_request_response_on_error = False
+ self.debug = False
self.results = []
self.totals = {
@@ -238,6 +239,7 @@
"print-details-onfail",
"always-print-request",
"always-print-response",
+ "debug"
],
)
@@ -281,6 +283,8 @@
random_order = True
elif option == "--random-seed":
random_seed = value
+ elif option == "--debug":
+ self.debug = True
if all:
files = []
Modified: CalDAVTester/trunk/src/serverinfo.py
===================================================================
--- CalDAVTester/trunk/src/serverinfo.py 2014-10-10 14:44:50 UTC (rev 14069)
+++ CalDAVTester/trunk/src/serverinfo.py 2014-10-10 20:30:54 UTC (rev 14070)
@@ -152,6 +152,7 @@
uidsubs = dict([("$uid{}:".format(i), str(uuid4())) for i in range(1, 21)])
self.subsdict.update(uidsubs)
self.extrasubsdict.update(uidsubs)
+ return set([(v, k) for k, v in uidsubs.items()])
def parseXML(self, node):
Modified: CalDAVTester/trunk/src/testsuite.py
===================================================================
--- CalDAVTester/trunk/src/testsuite.py 2014-10-10 14:44:50 UTC (rev 14069)
+++ CalDAVTester/trunk/src/testsuite.py 2014-10-10 20:30:54 UTC (rev 14070)
@@ -45,8 +45,7 @@
a test file we also need test suites to have unique UIDs. The "change-uid" attribute
can be used to reset the active UIDs for a test suite.
"""
- if self.changeuid:
- self.manager.server_info.newUIDs()
+ return self.manager.server_info.newUIDs() if self.changeuid else set()
def missingFeatures(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20141010/6fe4c6b7/attachment.html>
More information about the calendarserver-changes
mailing list