<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[14215] CalendarServer/trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/14215">14215</a></dd>
<dt>Author</dt> <dd>cdaboo@apple.com</dd>
<dt>Date</dt> <dd>2014-12-10 14:33:11 -0800 (Wed, 10 Dec 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Fix for use with latest Twisted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServertrunkproject">CalendarServer/trunk/.project</a></li>
<li><a href="#CalendarServertrunkcalendarservertoolsshelltesttest_cmdpy">CalendarServer/trunk/calendarserver/tools/shell/test/test_cmd.py</a></li>
<li><a href="#CalendarServertrunkcontribperformanceloadtesttest_icalpy">CalendarServer/trunk/contrib/performance/loadtest/test_ical.py</a></li>
<li><a href="#CalendarServertrunkrequirementsstabletxt">CalendarServer/trunk/requirements-stable.txt</a></li>
<li><a href="#CalendarServertrunksetuppy">CalendarServer/trunk/setup.py</a></li>
<li><a href="#CalendarServertrunktwistedcaldavscheduling_storecaldavtesttest_resourcepy">CalendarServer/trunk/twistedcaldav/scheduling_store/caldav/test/test_resource.py</a></li>
<li><a href="#CalendarServertrunktwistedcaldavtesttest_databasepy">CalendarServer/trunk/twistedcaldav/test/test_database.py</a></li>
<li><a href="#CalendarServertrunktwistedcaldavtesttest_upgradepy">CalendarServer/trunk/twistedcaldav/test/test_upgrade.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoreschedulingimipinboundpy">CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoreschedulingimiptesttest_inboundpy">CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/test/test_inbound.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoreschedulingischeduledkimpy">CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/dkim.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoreschedulingischeduletesttest_dkimpy">CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoretestcommonpy">CalendarServer/trunk/txdav/caldav/datastore/test/common.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoretesttest_sqlpy">CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoretesttest_filepy">CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoretesttest_sqlpy">CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastorepoddingtesttest_conduitpy">CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoretestaccountsaccountsxml">CalendarServer/trunk/txdav/common/datastore/test/accounts/accounts.xml</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreworktesttest_revision_cleanuppy">CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py</a></li>
<li><a href="#CalendarServertrunktxdavdpstesttest_clientpy">CalendarServer/trunk/txdav/dps/test/test_client.py</a></li>
<li><a href="#CalendarServertrunktxdavwhocachepy">CalendarServer/trunk/txdav/who/cache.py</a></li>
<li><a href="#CalendarServertrunktxdavwhotesttest_cachepy">CalendarServer/trunk/txdav/who/test/test_cache.py</a></li>
<li><a href="#CalendarServertrunktxdavwhotesttest_groupspy">CalendarServer/trunk/txdav/who/test/test_groups.py</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#CalendarServertrunktxdavcaldavdatastoretestcalendar_storehomehome1calendar_15ics">CalendarServer/trunk/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/5.ics</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServertrunkproject"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/.project (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/.project        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/.project        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -11,7 +11,9 @@
</span><span class="cx">                 &lt;project&gt;pycparser&lt;/project&gt;
</span><span class="cx">                 &lt;project&gt;pycrypto&lt;/project&gt;
</span><span class="cx">                 &lt;project&gt;PyGreSQL&lt;/project&gt;
</span><ins>+                &lt;project&gt;pyOpenSSL&lt;/project&gt;
</ins><span class="cx">                 &lt;project&gt;python-ldap&lt;/project&gt;
</span><ins>+                &lt;project&gt;service_identity&lt;/project&gt;
</ins><span class="cx">                 &lt;project&gt;sqlparse&lt;/project&gt;
</span><span class="cx">                 &lt;project&gt;twextpy&lt;/project&gt;
</span><span class="cx">                 &lt;project&gt;Twisted&lt;/project&gt;
</span></span></pre></div>
<a id="CalendarServertrunkcalendarservertoolsshelltesttest_cmdpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/calendarserver/tools/shell/test/test_cmd.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/calendarserver/tools/shell/test/test_cmd.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/calendarserver/tools/shell/test/test_cmd.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def test_getTargetMissing(self):
</span><del>-        self.assertFailure(self.commands.getTarget([&quot;/foo&quot;]), NotFoundError)
</del><ins>+        return self.assertFailure(self.commands.getTarget([&quot;/foo&quot;]), NotFoundError)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunkcontribperformanceloadtesttest_icalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/contrib/performance/loadtest/test_ical.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/contrib/performance/loadtest/test_ical.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_ical.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -1279,6 +1279,7 @@
</span><span class="cx">         self.assertEqual({}, self.client.xmpp)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_changeEventAttendee(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         OS_X_10_6.changeEventAttendee removes one attendee from an
</span><span class="lines">@@ -1291,7 +1292,7 @@
</span><span class="cx">         old = attendees[0]
</span><span class="cx">         new = old.duplicate()
</span><span class="cx">         new.setParameter('CN', 'Some Other Guy')
</span><del>-        event = Event(None, u'/some/calendar/1234.ics', None, vevent)
</del><ins>+        event = Event(self.client.serializeLocation(), u'/some/calendar/1234.ics', None, vevent)
</ins><span class="cx">         self.client._events[event.url] = event
</span><span class="cx">         self.client.changeEventAttendee(event.url, old, new)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunkrequirementsstabletxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/requirements-stable.txt (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/requirements-stable.txt        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/requirements-stable.txt        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -5,16 +5,18 @@
</span><span class="cx"> # For CalendarServer development, don't try to get these projects from PyPI; use svn.
</span><span class="cx"> 
</span><span class="cx"> -e .
</span><del>--e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@14208#egg=twextpy
</del><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@14214#egg=twextpy
</ins><span class="cx"> -e svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk@13420#egg=kerberos
</span><span class="cx"> -e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@14025#egg=pycalendar
</span><span class="cx"> 
</span><span class="cx"> # Specify specific versions of our dependencies so that we're all testing the same config.
</span><span class="cx"> 
</span><span class="cx"> cffi==0.8.6
</span><ins>+characteristic==14.0.0
</ins><span class="cx"> funcparserlib==0.3.6
</span><span class="cx"> psutil==2.1.3
</span><span class="cx"> pyasn1==0.1.7
</span><ins>+pyasn1_modules==0.0.5
</ins><span class="cx"> pycparser==2.10
</span><span class="cx"> pycrypto==2.6.1
</span><span class="cx"> PyGreSQL==4.1.1
</span><span class="lines">@@ -25,6 +27,7 @@
</span><span class="cx"> python-dateutil==1.5  # Note: v2.0+ is for Python 3
</span><span class="cx"> python-ldap==2.4.18
</span><span class="cx"> pytz==2014.10
</span><ins>+service_identity==14.0.0
</ins><span class="cx"> setproctitle==1.1.8
</span><span class="cx"> sqlparse==0.1.14
</span><span class="cx"> Twisted==14.0.2
</span></span></pre></div>
<a id="CalendarServertrunksetuppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/setup.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/setup.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/setup.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -239,6 +239,8 @@
</span><span class="cx">     &quot;service_identity&quot;,
</span><span class="cx">     &quot;pycrypto&quot;,
</span><span class="cx">     &quot;pyasn1&quot;,
</span><ins>+    &quot;pyasn1_modules&quot;,
+    &quot;characteristic&quot;,
</ins><span class="cx">     &quot;kerberos&quot;,
</span><span class="cx"> 
</span><span class="cx">     # Data store
</span></span></pre></div>
<a id="CalendarServertrunktwistedcaldavscheduling_storecaldavtesttest_resourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/twistedcaldav/scheduling_store/caldav/test/test_resource.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/twistedcaldav/scheduling_store/caldav/test/test_resource.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/twistedcaldav/scheduling_store/caldav/test/test_resource.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">         newfbset.add(&quot;/calendar-broken&quot;)
</span><span class="cx">         newset = caldavxml.CalendarFreeBusySet(*[davxml.HRef(url) for url in newfbset])
</span><span class="cx"> 
</span><del>-        self.failUnlessFailure(inbox.writeProperty(newset, request), HTTPError)
</del><ins>+        yield self.failUnlessFailure(inbox.writeProperty(newset, request), HTTPError)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktwistedcaldavtesttest_databasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/twistedcaldav/test/test_database.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/twistedcaldav/test/test_database.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/twistedcaldav/test/test_database.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -191,6 +191,7 @@
</span><span class="cx">         self.assertEqual(items, ())
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_version_upgrade_persistent(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Connect to database and create table
</span><span class="lines">@@ -198,9 +199,9 @@
</span><span class="cx">         db_file = self.mktemp()
</span><span class="cx">         db = Database.TestDB(db_file, persistent=True)
</span><span class="cx">         yield db.open()
</span><del>-        yield db.execute(&quot;INSERT into TESTTYPE (KEY, VALUE) values (:1, :2)&quot;, &quot;FOO&quot;, &quot;BAR&quot;)
</del><ins>+        yield db.execute(&quot;INSERT into TESTTYPE (KEY, VALUE) values (:1, :2)&quot;, (&quot;FOO&quot;, &quot;BAR&quot;,))
</ins><span class="cx">         items = (yield db.query(&quot;SELECT * from TESTTYPE&quot;))
</span><del>-        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;)))
</del><ins>+        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;),))
</ins><span class="cx">         db.close()
</span><span class="cx">         db = None
</span><span class="cx"> 
</span><span class="lines">@@ -210,26 +211,27 @@
</span><span class="cx">         db.close()
</span><span class="cx">         db = None
</span><span class="cx"> 
</span><del>-        db = Database.TestDB(db_file, persistent=True, autocommit=True)
</del><ins>+        db = Database.TestDB(db_file, persistent=True)
</ins><span class="cx">         yield db.open()
</span><span class="cx">         items = (yield db.query(&quot;SELECT * from TESTTYPE&quot;))
</span><del>-        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;)))
</del><ins>+        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;),))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_version_upgrade_persistent_add_index(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Connect to database and create table
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         db_file = self.mktemp()
</span><del>-        db = Database.TestDB(db_file, persistent=True, autocommit=True)
</del><ins>+        db = Database.TestDB(db_file, persistent=True)
</ins><span class="cx">         yield db.open()
</span><del>-        yield db.execute(&quot;INSERT into TESTTYPE (KEY, VALUE) values (:1, :2)&quot;, &quot;FOO&quot;, &quot;BAR&quot;)
</del><ins>+        yield db.execute(&quot;INSERT into TESTTYPE (KEY, VALUE) values (:1, :2)&quot;, (&quot;FOO&quot;, &quot;BAR&quot;,))
</ins><span class="cx">         items = (yield db.query(&quot;SELECT * from TESTTYPE&quot;))
</span><del>-        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;)))
</del><ins>+        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;),))
</ins><span class="cx">         db.close()
</span><span class="cx">         db = None
</span><span class="cx"> 
</span><del>-        db = Database.TestDBCreateIndexOnUpgrade(db_file, persistent=True, autocommit=True)
</del><ins>+        db = Database.TestDBCreateIndexOnUpgrade(db_file, persistent=True)
</ins><span class="cx">         yield db.open()
</span><span class="cx">         items = (yield db.query(&quot;SELECT * from TESTTYPE&quot;))
</span><del>-        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;)))
</del><ins>+        self.assertEqual(items, ((&quot;FOO&quot;, &quot;BAR&quot;),))
</ins></span></pre></div>
<a id="CalendarServertrunktwistedcaldavtesttest_upgradepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/twistedcaldav/test/test_upgrade.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/twistedcaldav/test/test_upgrade.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/twistedcaldav/test/test_upgrade.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -180,6 +180,7 @@
</span><span class="cx">         self.assertTrue(os.path.exists(os.path.join(config.DataRoot, NEWPROXYFILE)))
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_freeBusyUpgrade(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Test the updating of calendar-free-busy-set xattrs on inboxes
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoreschedulingimipinboundpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -367,7 +367,7 @@
</span><span class="cx">             del msg[&quot;To&quot;]
</span><span class="cx">             msg[&quot;To&quot;] = toAddr
</span><span class="cx">             log.warn(&quot;Mail gateway forwarding reply back to organizer&quot;)
</span><del>-            yield smtpSender.sendMessage(fromAddr, toAddr, messageid(), msg)
</del><ins>+            yield smtpSender.sendMessage(fromAddr, toAddr, messageid(), msg.as_string())
</ins><span class="cx">             returnValue(self.REPLY_FORWARDED_TO_ORGANIZER)
</span><span class="cx"> 
</span><span class="cx">         # Process the imip attachment; inject to calendar server
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoreschedulingimiptesttest_inboundpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/test/test_inbound.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/test/test_inbound.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/test/test_inbound.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> from txdav.caldav.datastore.scheduling.imip.inbound import injectMessage
</span><span class="cx"> from txdav.caldav.datastore.scheduling.imip.inbound import shouldDeleteAllMail
</span><span class="cx"> from txdav.caldav.datastore.scheduling.imip.inbound import IMAP4DownloadProtocol
</span><del>-from txdav.caldav.datastore.scheduling.itip import iTIPRequestStatus
</del><span class="cx"> from txdav.common.datastore.test.util import CommonCommonTests
</span><span class="cx"> 
</span><span class="cx"> from twext.enterprise.jobqueue import JobItem
</span><span class="lines">@@ -177,7 +176,7 @@
</span><span class="cx">         # Make sure a known token *is* processed
</span><span class="cx">         txn = self.store.newTransaction()
</span><span class="cx">         token = (yield txn.imipCreateToken(
</span><del>-            &quot;urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</del><ins>+            &quot;urn:x-uid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</ins><span class="cx">             &quot;mailto:user02@example.com&quot;,
</span><span class="cx">             &quot;1E71F9C8-AEDA-48EB-98D0-76E898F6BB5C&quot;
</span><span class="cx">         ))
</span><span class="lines">@@ -200,7 +199,7 @@
</span><span class="cx">         # Make sure a known token *is* processed
</span><span class="cx">         txn = self.store.newTransaction()
</span><span class="cx">         yield txn.imipCreateToken(
</span><del>-            &quot;urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</del><ins>+            &quot;urn:x-uid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</ins><span class="cx">             &quot;mailto:xyzzy@example.com&quot;,
</span><span class="cx">             &quot;1E71F9C8-AEDA-48EB-98D0-76E898F6BB5C&quot;,
</span><span class="cx">             token=&quot;d7cdf68d-8b73-4df1-ad3b-f08002fb285f&quot;
</span><span class="lines">@@ -213,13 +212,14 @@
</span><span class="cx">         yield JobItem.waitEmpty(self.store.newTransaction, reactor, 60)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_processReplyMissingOrganizer(self):
</span><span class="cx">         msg = email.message_from_string(self.dataFile('reply_missing_organizer'))
</span><span class="cx"> 
</span><span class="cx">         # stick the token in the database first
</span><span class="cx">         txn = self.store.newTransaction()
</span><span class="cx">         yield txn.imipCreateToken(
</span><del>-            &quot;urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</del><ins>+            &quot;urn:x-uid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</ins><span class="cx">             &quot;mailto:xyzzy@example.com&quot;,
</span><span class="cx">             &quot;1E71F9C8-AEDA-48EB-98D0-76E898F6BB5C&quot;,
</span><span class="cx">             token=&quot;d7cdf68d-8b73-4df1-ad3b-f08002fb285f&quot;
</span><span class="lines">@@ -227,19 +227,18 @@
</span><span class="cx">         yield txn.commit()
</span><span class="cx"> 
</span><span class="cx">         result = (yield self.receiver.processReply(msg))
</span><del>-        organizer, _ignore_attendee, calendar = result
-        organizerProp = calendar.mainComponent().getOrganizerProperty()
-        self.assertTrue(organizerProp is not None)
-        self.assertEquals(organizer,
-                          &quot;urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;)
</del><ins>+        self.assertEquals(result, MailReceiver.INJECTION_SUBMITTED)
</ins><span class="cx"> 
</span><ins>+        yield JobItem.waitEmpty(self.store.newTransaction, reactor, 60)
</ins><span class="cx"> 
</span><ins>+
+    @inlineCallbacks
</ins><span class="cx">     def test_processReplyMissingAttendee(self):
</span><span class="cx">         msg = email.message_from_string(self.dataFile('reply_missing_attendee'))
</span><span class="cx"> 
</span><span class="cx">         txn = self.store.newTransaction()
</span><span class="cx">         yield txn.imipCreateToken(
</span><del>-            &quot;urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</del><ins>+            &quot;urn:x-uid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</ins><span class="cx">             &quot;mailto:xyzzy@example.com&quot;,
</span><span class="cx">             &quot;1E71F9C8-AEDA-48EB-98D0-76E898F6BB5C&quot;,
</span><span class="cx">             token=&quot;d7cdf68d-8b73-4df1-ad3b-f08002fb285f&quot;
</span><span class="lines">@@ -247,16 +246,12 @@
</span><span class="cx">         yield txn.commit()
</span><span class="cx"> 
</span><span class="cx">         result = (yield self.receiver.processReply(msg))
</span><del>-        _ignore_organizer, attendee, calendar = result
</del><ins>+        self.assertEquals(result, MailReceiver.INJECTION_SUBMITTED)
</ins><span class="cx"> 
</span><del>-        # Since the expected attendee was missing, the reply processor should
-        # have added an attendee back in with a &quot;5.1;Service unavailable&quot;
-        # schedule-status
-        attendeeProp = calendar.mainComponent().getAttendeeProperty([attendee])
-        self.assertEquals(attendeeProp.parameterValue(&quot;SCHEDULE-STATUS&quot;),
-                          iTIPRequestStatus.SERVICE_UNAVAILABLE)
</del><ins>+        yield JobItem.waitEmpty(self.store.newTransaction, reactor, 60)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_processReplyMissingAttachment(self):
</span><span class="cx"> 
</span><span class="cx">         msg = email.message_from_string(
</span><span class="lines">@@ -266,7 +261,7 @@
</span><span class="cx">         # stick the token in the database first
</span><span class="cx">         txn = self.store.newTransaction()
</span><span class="cx">         yield txn.imipCreateToken(
</span><del>-            &quot;urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</del><ins>+            &quot;urn:x-uid:5A985493-EE2C-4665-94CF-4DFEA3A89500&quot;,
</ins><span class="cx">             &quot;mailto:xyzzy@example.com&quot;,
</span><span class="cx">             &quot;1E71F9C8-AEDA-48EB-98D0-76E898F6BB5C&quot;,
</span><span class="cx">             token=&quot;d7cdf68d-8b73-4df1-ad3b-f08002fb285f&quot;
</span><span class="lines">@@ -276,7 +271,9 @@
</span><span class="cx">         result = (yield self.receiver.processReply(msg))
</span><span class="cx">         self.assertEquals(result, MailReceiver.REPLY_FORWARDED_TO_ORGANIZER)
</span><span class="cx"> 
</span><ins>+        yield JobItem.waitEmpty(self.store.newTransaction, reactor, 60)
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_injectMessage(self):
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoreschedulingischeduledkimpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/dkim.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/dkim.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/dkim.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -812,7 +812,8 @@
</span><span class="cx">             return None
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    def flushCache(self):
</del><ins>+    @staticmethod
+    def flushCache():
</ins><span class="cx">         PublicKeyLookup.keyCache = {}
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoreschedulingischeduletesttest_dkimpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -389,6 +389,7 @@
</span><span class="cx">             self.assertEqual(extracted, result.replace(&quot;\n&quot;, &quot;\r\n&quot;))
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_locate_public_key(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         L{DKIMVerifier.locatePublicKey} correctly finds key matching headers.
</span><span class="lines">@@ -439,13 +440,14 @@
</span><span class="cx">         for hdrs, keys, result in data:
</span><span class="cx">             headers = [hdr.split(&quot;:&quot;, 1) for hdr in hdrs.splitlines()]
</span><span class="cx">             TestPublicKeyLookup.PublicKeyLookup_Testing.keys = keys
</span><ins>+            TestPublicKeyLookup.PublicKeyLookup_Testing.flushCache()
</ins><span class="cx">             verifier = DKIMVerifier(self._makeHeaders(headers), &quot;&quot;, key_lookup=(TestPublicKeyLookup.PublicKeyLookup_Testing,))
</span><span class="cx">             verifier.processDKIMHeader()
</span><span class="cx">             pkey = (yield verifier.locatePublicKey())
</span><span class="cx">             if result:
</span><del>-                self.assertNotEqual(pkey, None)
</del><ins>+                self.assertTrue(pkey is not None)
</ins><span class="cx">             else:
</span><del>-                self.assertEqual(pkey, None)
</del><ins>+                self.assertTrue(pkey is None)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -473,7 +475,7 @@
</span><span class="cx">                 TestPublicKeyLookup.PublicKeyLookup_Testing.keys = keys
</span><span class="cx">                 data = (yield allDataFromStream(request.stream))
</span><span class="cx">                 verifier = DKIMVerifier(request.headers, data, key_lookup=(TestPublicKeyLookup.PublicKeyLookup_Testing,))
</span><del>-                TestPublicKeyLookup.PublicKeyLookup_Testing({}).flushCache()
</del><ins>+                TestPublicKeyLookup.PublicKeyLookup_Testing.flushCache()
</ins><span class="cx">                 try:
</span><span class="cx">                     yield verifier.verify()
</span><span class="cx">                 except Exception, e:
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoretestcalendar_storehomehome1calendar_15ics"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/5.ics (0 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/5.ics                                (rev 0)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/5.ics        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:US/Pacific
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:%(now)s0324T124500
+TRANSP:OPAQUE
+UID:uid5
+DTSTAMP:20090326T145447Z
+LOCATION:Wilfredo's Office
+ORGANIZER:mailto:wsanchez@example.com
+SEQUENCE:2
+X-APPLE-EWS-BUSYSTATUS:BUSY
+X-APPLE-DROPBOX:/calendars/__uids__/user01/dropbox/FE5CDC6F-7776-4607-83
+ A9-B90FF7ACC8D0.dropbox
+SUMMARY:CalDAV protocol updates
+DTSTART;TZID=US/Pacific:%(now)s0324T121500
+CREATED:20090326T145440Z
+BEGIN:VALARM
+X-WR-ALARMUID:DB39AB67-449C-441C-89D2-D740B5F41A73
+TRIGGER;VALUE=DATE-TIME:%(now)s0324T180009Z
+ACTION:AUDIO
+END:VALARM
+END:VEVENT
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoretestcommonpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/test/common.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/test/common.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/common.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -76,6 +76,7 @@
</span><span class="cx">     &quot;2.ics&quot;,
</span><span class="cx">     &quot;3.ics&quot;,
</span><span class="cx">     &quot;4.ics&quot;,
</span><ins>+    &quot;5.ics&quot;,
</ins><span class="cx"> ]
</span><span class="cx"> 
</span><span class="cx"> home1_calendarNames = [
</span><span class="lines">@@ -240,6 +241,7 @@
</span><span class="cx">         metadata2 = cls.metadata2.copy()
</span><span class="cx">         metadata3 = cls.metadata3.copy()
</span><span class="cx">         metadata4 = cls.metadata4.copy()
</span><ins>+        metadata5 = cls.metadata5.copy()
</ins><span class="cx">         return {
</span><span class="cx">             &quot;home1&quot;: {
</span><span class="cx">                 &quot;calendar_1&quot;: {
</span><span class="lines">@@ -247,6 +249,7 @@
</span><span class="cx">                     &quot;2.ics&quot;: (cal1Root.child(&quot;2.ics&quot;).getContent(), metadata2),
</span><span class="cx">                     &quot;3.ics&quot;: (cal1Root.child(&quot;3.ics&quot;).getContent(), metadata3),
</span><span class="cx">                     &quot;4.ics&quot;: (cal1Root.child(&quot;4.ics&quot;).getContent(), metadata4),
</span><ins>+                    &quot;5.ics&quot;: (cal1Root.child(&quot;5.ics&quot;).getContent(), metadata5),
</ins><span class="cx">                 },
</span><span class="cx">                 &quot;calendar_2&quot;: {},
</span><span class="cx">                 &quot;calendar_empty&quot;: {},
</span><span class="lines">@@ -1233,14 +1236,18 @@
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_organizer(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         L{ICalendarObject.organizer} returns a C{str} describing the calendar
</span><span class="cx">         user address of the C{ORGANIZER} property of the calendar object's
</span><span class="cx">         component.
</span><span class="cx">         &quot;&quot;&quot;
</span><ins>+
+        calobj = yield self.calendarObjectUnderTest(name=&quot;5.ics&quot;)
+        organizer = yield calobj.organizer()
</ins><span class="cx">         self.assertEquals(
</span><del>-            (yield self.calendarObjectUnderTest()).organizer(),
</del><ins>+            organizer,
</ins><span class="cx">             &quot;mailto:wsanchez@example.com&quot;
</span><span class="cx">         )
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -534,25 +534,26 @@
</span><span class="cx">         self.assertEqual(supported_components, set(ical.allowedStoreComponents))
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_calendarHomeVersion(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         The DATAVERSION column for new calendar homes must match the
</span><span class="cx">         CALENDAR-DATAVERSION value.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><del>-        home = yield self.transactionUnderTest().calendarHomeWithUID(&quot;home_version&quot;)
</del><ins>+        home = yield self.transactionUnderTest().calendarHomeWithUID(&quot;home_version&quot;, create=True)
</ins><span class="cx">         self.assertTrue(home is not None)
</span><span class="cx">         yield self.transactionUnderTest().commit
</span><span class="cx"> 
</span><span class="cx">         txn = yield self.transactionUnderTest()
</span><del>-        version = yield txn.calendarserverValue(&quot;CALENDAR-DATAVERSION&quot;)[0][0]
</del><ins>+        version = yield txn.calendarserverValue(&quot;CALENDAR-DATAVERSION&quot;)
</ins><span class="cx">         ch = schema.CALENDAR_HOME
</span><del>-        homeVersion = yield Select(
</del><ins>+        homeVersion = (yield Select(
</ins><span class="cx">             [ch.DATAVERSION, ],
</span><span class="cx">             From=ch,
</span><span class="cx">             Where=ch.OWNER_UID == &quot;home_version&quot;,
</span><del>-        ).on(txn)[0][0]
-        self.assertEqual(int(homeVersion, version))
</del><ins>+        ).on(txn))[0][0]
+        self.assertEqual(int(homeVersion), int(version))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoretesttest_filepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -355,20 +355,21 @@
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_modifyAddressBookObjectCaches(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Modifying a addressbook object should cache the modified component in
</span><span class="cx">         memory, to avoid unnecessary parsing round-trips.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         modifiedComponent = VComponent.fromString(vcard1modified_text)
</span><del>-        (yield self.addressbook1.addressbookObjectWithName(&quot;1.vcf&quot;)).setComponent(
-            modifiedComponent
</del><ins>+        obj = yield self.addressbook1.addressbookObjectWithName(&quot;1.vcf&quot;)
+        yield obj.setComponent(modifiedComponent)
+        comp = yield obj.component()
+        self.assertEqual(
+            str(modifiedComponent),
+            str(comp)
</ins><span class="cx">         )
</span><del>-        self.assertIdentical(
-            modifiedComponent,
-            (yield self.addressbook1.addressbookObjectWithName(&quot;1.vcf&quot;)).component()
-        )
-        self.txn.commit()
</del><ins>+        yield self.txn.commit()
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @testUnimplemented
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -204,25 +204,26 @@
</span><span class="cx">         self.assertPropertiesSimilar(fromHome, toHome,)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_addressBookHomeVersion(self):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         The DATAVERSION column for new addressbook homes must match the
</span><span class="cx">         ADDRESSBOOK-DATAVERSION value.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><del>-        home = yield self.transactionUnderTest().addressbookHomeWithUID(&quot;home_version&quot;)
</del><ins>+        home = yield self.transactionUnderTest().addressbookHomeWithUID(&quot;home_version&quot;, create=True)
</ins><span class="cx">         self.assertTrue(home is not None)
</span><span class="cx">         yield self.transactionUnderTest().commit
</span><span class="cx"> 
</span><span class="cx">         txn = yield self.transactionUnderTest()
</span><del>-        version = yield txn.calendarserverValue(&quot;ADDRESSBOOK-DATAVERSION&quot;)[0][0]
</del><ins>+        version = yield txn.calendarserverValue(&quot;ADDRESSBOOK-DATAVERSION&quot;)
</ins><span class="cx">         ch = schema.ADDRESSBOOK_HOME
</span><del>-        homeVersion = yield Select(
</del><ins>+        homeVersion = (yield Select(
</ins><span class="cx">             [ch.DATAVERSION, ],
</span><span class="cx">             From=ch,
</span><span class="cx">             Where=ch.OWNER_UID == &quot;home_version&quot;,
</span><del>-        ).on(txn)[0][0]
-        self.assertEqual(int(homeVersion, version))
</del><ins>+        ).on(txn))[0][0]
+        self.assertEqual(int(homeVersion), int(version))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastorepoddingtesttest_conduitpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -114,17 +114,17 @@
</span><span class="cx">         self.assertTrue(r1 is not None)
</span><span class="cx">         self.assertTrue(r2 is not None)
</span><span class="cx"> 
</span><del>-        self.assertFailure(
</del><ins>+        yield self.assertFailure(
</ins><span class="cx">             conduit.validRequest(&quot;bogus01&quot;, &quot;user02&quot;),
</span><span class="cx">             DirectoryRecordNotFoundError
</span><span class="cx">         )
</span><span class="cx"> 
</span><del>-        self.assertFailure(
</del><ins>+        yield self.assertFailure(
</ins><span class="cx">             conduit.validRequest(&quot;user01&quot;, &quot;bogus02&quot;),
</span><span class="cx">             DirectoryRecordNotFoundError
</span><span class="cx">         )
</span><span class="cx"> 
</span><del>-        self.assertFailure(
</del><ins>+        yield self.assertFailure(
</ins><span class="cx">             conduit.validRequest(&quot;user01&quot;, &quot;user02&quot;),
</span><span class="cx">             FailedCrossPodRequestError
</span><span class="cx">         )
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoretestaccountsaccountsxml"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/test/accounts/accounts.xml (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/test/accounts/accounts.xml        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/common/datastore/test/accounts/accounts.xml        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -165,6 +165,13 @@
</span><span class="cx">     &lt;email&gt;home_attachments@example.com&lt;/email&gt;
</span><span class="cx">   &lt;/record&gt;
</span><span class="cx">   &lt;record type=&quot;user&quot;&gt;
</span><ins>+    &lt;uid&gt;home_version&lt;/uid&gt;
+    &lt;short-name&gt;home_version&lt;/short-name&gt;
+    &lt;password&gt;home_version&lt;/password&gt;
+    &lt;full-name&gt;Home Version&lt;/full-name&gt;
+    &lt;email&gt;home_version@example.com&lt;/email&gt;
+  &lt;/record&gt;
+  &lt;record type=&quot;user&quot;&gt;
</ins><span class="cx">     &lt;uid&gt;xyzzy&lt;/uid&gt;
</span><span class="cx">     &lt;short-name&gt;xyzzy&lt;/short-name&gt;
</span><span class="cx">     &lt;password&gt;xyzzy&lt;/password&gt;
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreworktesttest_revision_cleanuppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -284,7 +284,7 @@
</span><span class="cx"> 
</span><span class="cx">         # old sync token fails
</span><span class="cx">         calendar = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        self.failUnlessFailure(calendar.resourceNamesSinceToken(token), SyncTokenValidException)
</del><ins>+        yield self.failUnlessFailure(calendar.resourceNamesSinceToken(token), SyncTokenValidException)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -332,8 +332,8 @@
</span><span class="cx"> 
</span><span class="cx">         # old sync token fails
</span><span class="cx">         home = yield self.homeUnderTest(name=&quot;user01&quot;)
</span><del>-        self.failUnlessFailure(home.resourceNamesSinceToken(token, &quot;1&quot;), SyncTokenValidException)
-        self.failUnlessFailure(home.resourceNamesSinceToken(token, &quot;infinity&quot;), SyncTokenValidException)
</del><ins>+        yield self.failUnlessFailure(home.resourceNamesSinceToken(token, &quot;1&quot;), SyncTokenValidException)
+        yield self.failUnlessFailure(home.resourceNamesSinceToken(token, &quot;infinity&quot;), SyncTokenValidException)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -384,7 +384,7 @@
</span><span class="cx"> 
</span><span class="cx">         # old sync token fails
</span><span class="cx">         addressbook = yield self.addressbookUnderTest(home=&quot;user01&quot;, name=&quot;addressbook&quot;)
</span><del>-        self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
</del><ins>+        yield self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -470,4 +470,4 @@
</span><span class="cx"> 
</span><span class="cx">         # old sync token fails
</span><span class="cx">         addressbook = yield self.addressbookUnderTest(home=&quot;user01&quot;, name=&quot;addressbook&quot;)
</span><del>-        self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
</del><ins>+        yield self.failUnlessFailure(addressbook.resourceNamesSinceToken(token), SyncTokenValidException)
</ins></span></pre></div>
<a id="CalendarServertrunktxdavdpstesttest_clientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/dps/test/test_client.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/dps/test/test_client.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/dps/test/test_client.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -125,6 +125,7 @@
</span><span class="cx">         self.assertEquals(record.uid, testUID)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_guid(self):
</span><span class="cx">         if testMode == &quot;od&quot;:
</span><span class="cx">             record = (yield self.directory.recordWithGUID(testUID))
</span><span class="lines">@@ -454,6 +455,7 @@
</span><span class="cx">         self.assertEquals(record.uid, self.wsanchezUID)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    @inlineCallbacks
</ins><span class="cx">     def test_guid(self):
</span><span class="cx">         record = yield self.client.recordWithGUID(self.wsanchezUID)
</span><span class="cx">         self.assertTrue(u&quot;wsanchez&quot; in record.shortNames)
</span><span class="lines">@@ -464,7 +466,7 @@
</span><span class="cx">         records = (yield self.client.recordsWithRecordType(
</span><span class="cx">             RecordType.user
</span><span class="cx">         ))
</span><del>-        self.assertEquals(len(records), 243)
</del><ins>+        self.assertEquals(len(records), 244)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhocachepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/cache.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/cache.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/who/cache.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -87,7 +87,13 @@
</span><span class="cx">         self._expireSeconds = expireSeconds
</span><span class="cx">         self.resetCache()
</span><span class="cx"> 
</span><ins>+#        from txdav.who.augment import AugmentedDirectoryService
+#        if isinstance(self._directory, AugmentedDirectoryService):
+#            for ds in self._directory._directory.services:
+#                if hasattr(ds, &quot;setMasterDirectory&quot;):
+#                    ds.setMasterDirectory(self)
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     def _addTiming(self, key, duration):
</span><span class="cx">         if self._directoryTiming:
</span><span class="cx">             self._directory._addTiming(key, duration)
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhotesttest_cachepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/test/test_cache.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/test/test_cache.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/who/test/test_cache.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">         self.assertTrue(CalRecordType.resource in dir.recordTypes())
</span><span class="cx"> 
</span><span class="cx">         records = yield dir.recordsWithRecordType(RecordType.user)
</span><del>-        self.assertEquals(len(records), 243)
</del><ins>+        self.assertEquals(len(records), 244)
</ins><span class="cx"> 
</span><span class="cx">         record = yield dir.recordWithGUID(uuid.UUID(&quot;8166C681-2D08-4846-90F7-97023A6EDDC5&quot;))
</span><span class="cx">         self.assertEquals(record.uid, u&quot;cache-uid-1&quot;)
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhotesttest_groupspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/test/test_groups.py (14214 => 14215)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/test/test_groups.py        2014-12-10 22:30:11 UTC (rev 14214)
+++ CalendarServer/trunk/txdav/who/test/test_groups.py        2014-12-10 22:33:11 UTC (rev 14215)
</span><span class="lines">@@ -163,7 +163,7 @@
</span><span class="cx">         txn = store.newTransaction()
</span><span class="cx"> 
</span><span class="cx">         # Non-existent groupID
</span><del>-        self.failUnlessFailure(txn.groupByID(42), NotFoundError)
</del><ins>+        yield self.failUnlessFailure(txn.groupByID(42), NotFoundError)
</ins><span class="cx"> 
</span><span class="cx">         uid = u&quot;__top_group_1__&quot;
</span><span class="cx">         hash = &quot;553eb54e3bbb26582198ee04541dbee4&quot;
</span></span></pre>
</div>
</div>

</body>
</html>