<!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>[12978] CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py</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/12978">12978</a></dd>
<dt>Author</dt> <dd>wsanchez@apple.com</dd>
<dt>Date</dt> <dd>2014-03-19 18:22:18 -0700 (Wed, 19 Mar 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Fix some things</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesuserssagenmove2who4twistedcaldavdirectorytesttest_principalpy">CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesuserssagenmove2who4twistedcaldavdirectorytesttest_principalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py (12977 => 12978)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py        2014-03-20 00:16:14 UTC (rev 12977)
+++ CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py        2014-03-20 01:22:18 UTC (rev 12978)
</span><span class="lines">@@ -18,8 +18,8 @@
</span><span class="cx"> import os
</span><span class="cx"> from urllib import quote
</span><span class="cx">
</span><ins>+from twisted.internet.defer import inlineCallbacks, returnValue
</ins><span class="cx"> from twisted.cred.credentials import UsernamePassword
</span><del>-from twisted.internet.defer import inlineCallbacks
</del><span class="cx">
</span><span class="cx"> from txweb2.dav.fileop import rmdir
</span><span class="cx"> from txweb2.dav.resource import AccessDeniedError
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx"> )
</span><span class="cx"> from twistedcaldav.directory.principal import (
</span><span class="cx"> DirectoryCalendarPrincipalResource,
</span><del>- DirectoryPrincipalProvisioningResource,
</del><span class="cx"> DirectoryPrincipalResource,
</span><span class="cx"> DirectoryPrincipalTypeProvisioningResource,
</span><span class="cx"> )
</span><span class="lines">@@ -50,40 +49,18 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><del>-# twistedcaldav.test.util.TestCase
</del><span class="cx"> class ProvisionedPrincipals(StoreTestCase):
</span><span class="cx"> """
</span><span class="cx"> Directory service provisioned principals.
</span><span class="cx"> """
</span><del>- # def setUp(self):
- # super(ProvisionedPrincipals, self).setUp()
</del><ins>+ @inlineCallbacks
+ def setUp(self):
+ yield super(ProvisionedPrincipals, self).setUp()
</ins><span class="cx">
</span><del>- # self.directoryServices = (
- # XMLDirectoryService(
- # {
- # 'xmlFile' : xmlFile,
- # 'augmentService' :
- # augment.AugmentXMLDB(xmlFiles=(augmentsFile.path,)),
- # }
- # ),
- # )
</del><ins>+ self.principalRootResource = self.actualRoot.getChild("principals")
</ins><span class="cx">
</span><del>- # # Set up a principals hierarchy for each service we're testing with
- # self.principalRootResources = {}
- # for directory in self.directoryServices:
- # name = directory.__class__.__name__
- # url = "/" + name + "/"
</del><span class="cx">
</span><del>- # provisioningResource = DirectoryPrincipalProvisioningResource(url, directory)
- # directory.setPrincipalCollection(provisioningResource)
</del><span class="cx">
</span><del>- # self.site.resource.putChild(name, provisioningResource)
-
- # self.principalRootResources[directory.__class__.__name__] = provisioningResource
-
- # calendaruserproxy.ProxyDBService = calendaruserproxy.ProxySqliteDB(os.path.abspath(self.mktemp()))
-
-
</del><span class="cx"> @inlineCallbacks
</span><span class="cx"> def test_hierarchy(self):
</span><span class="cx"> """
</span><span class="lines">@@ -99,14 +76,11 @@
</span><span class="cx">
</span><span class="cx"> DirectoryPrincipalResource.principalURL(),
</span><span class="cx"> """
</span><del>- directory = self.directory
</del><span class="cx"> if True:
</span><span class="cx"> #print("\n -> %s" % (directory.__class__.__name__,))
</span><del>- provisioningResource = (
- self.principalRootResources[directory.__class__.__name__]
- )
</del><ins>+ provisioningResource = self.principalRootResource
</ins><span class="cx">
</span><del>- provisioningURL = "/" + directory.__class__.__name__ + "/"
</del><ins>+ provisioningURL = "/" + self.directory.__class__.__name__ + "/"
</ins><span class="cx"> self.assertEquals(
</span><span class="cx"> provisioningURL,
</span><span class="cx"> provisioningResource.principalCollectionURL()
</span><span class="lines">@@ -119,7 +93,7 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> recordTypes = set((yield provisioningResource.listChildren()))
</span><del>- self.assertEquals(recordTypes, set(directory.recordTypes()))
</del><ins>+ self.assertEquals(recordTypes, set(self.directory.recordTypes()))
</ins><span class="cx">
</span><span class="cx"> for recordType in recordTypes:
</span><span class="cx"> #print(" -> %s" % (recordType,))
</span><span class="lines">@@ -148,14 +122,16 @@
</span><span class="cx"> shortNames = set((yield typeResource.listChildren()))
</span><span class="cx"> # Handle records with mulitple shortNames
</span><span class="cx"> expected = []
</span><del>- for r in directory.listRecords(recordType):
</del><ins>+ for r in (
+ yield self.directory.recordsWithRecordType(recordType)
+ ):
</ins><span class="cx"> if r.uid != "disabled":
</span><span class="cx"> expected.extend(r.shortNames)
</span><span class="cx"> self.assertEquals(shortNames, set(expected))
</span><span class="cx">
</span><span class="cx"> for shortName in shortNames:
</span><span class="cx"> #print(" -> %s" % (shortName,))
</span><del>- recordResource = typeResource.getChild(shortName)
</del><ins>+ recordResource = yield typeResource.getChild(shortName)
</ins><span class="cx"> self.failUnless(
</span><span class="cx"> isinstance(recordResource, DirectoryPrincipalResource)
</span><span class="cx"> )
</span><span class="lines">@@ -182,14 +158,15 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_allRecords(self):
</span><span class="cx"> """
</span><span class="cx"> Test of a test routine...
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> self.assertEquals(recordResource.record, record)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -197,99 +174,108 @@
</span><span class="cx"> # DirectoryPrincipalProvisioningResource
</span><span class="cx"> ##
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalForShortName(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForShortName()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- principal = provisioningResource.principalForShortName(
</del><ins>+ ) in (yield self._allRecords()):
+ principal = yield provisioningResource.principalForShortName(
</ins><span class="cx"> recordType, record.shortNames[0]
</span><span class="cx"> )
</span><del>- if record.enabled:
</del><ins>+ if True: # user.enabled:
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEquals(record, principal.record)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalForUser(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForUser()
</span><span class="cx"> """
</span><del>- directory = self.directory
- provisioningResource = (
- self.principalRootResources[directory.__class__.__name__]
- )
</del><ins>+ provisioningResource = self.principalRootResource
</ins><span class="cx">
</span><del>- for user in directory.listRecords(DirectoryService.recordType_users):
- userResource = provisioningResource.principalForUser(
</del><ins>+ for user in (
+ yield self.directory.recordsWithRecordType(
+ self.directory.recordType.user
+ )
+ ):
+ userResource = yield provisioningResource.principalForUser(
</ins><span class="cx"> user.shortNames[0]
</span><span class="cx"> )
</span><del>- if user.enabled:
</del><ins>+ if True: # user.enabled:
</ins><span class="cx"> self.failIf(userResource is None)
</span><span class="cx"> self.assertEquals(user, userResource.record)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(userResource is not None)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalForAuthID(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForAuthID()
</span><span class="cx"> """
</span><del>- directory = self.directory
- provisioningResource = (
- self.principalRootResources[directory.__class__.__name__]
- )
</del><ins>+ provisioningResource = self.principalRootResource
</ins><span class="cx">
</span><del>- for user in directory.listRecords(DirectoryService.recordType_users):
</del><ins>+ for user in (
+ yield self.directory.recordsWithRecordType(
+ self.directory.recordType.user
+ )
+ ):
</ins><span class="cx"> creds = UsernamePassword(user.shortNames[0], "bogus")
</span><del>- userResource = provisioningResource.principalForAuthID(creds)
- if user.enabled:
</del><ins>+ userResource = yield provisioningResource.principalForAuthID(creds)
+ if True: # user.enabled:
</ins><span class="cx"> self.failIf(userResource is None)
</span><span class="cx"> self.assertEquals(user, userResource.record)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(userResource is not None)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalForUID(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForUID()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- principal = provisioningResource.principalForUID(record.uid)
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ principal = yield provisioningResource.principalForUID(record.uid)
+ if True: # user.enabled:
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEquals(record, principal.record)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalForRecord(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForRecord()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- principal = provisioningResource.principalForRecord(record)
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ principal = yield provisioningResource.principalForRecord(record)
+ if True: # user.enabled:
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEquals(record, principal.record)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalForCalendarUserAddress(self):
</span><span class="cx"> """
</span><del>- DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
</del><ins>+ DirectoryPrincipalProvisioningResource
+ .principalForCalendarUserAddress()
</ins><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
</del><ins>+ ) in (yield self._allRecords()):
</ins><span class="cx">
</span><span class="cx"> test_items = tuple(record.calendarUserAddresses)
</span><span class="cx"> if recordResource:
</span><span class="lines">@@ -302,61 +288,69 @@
</span><span class="cx">
</span><span class="cx"> for address in test_items:
</span><span class="cx"> principal = (
</span><del>- provisioningResource
</del><ins>+ yield provisioningResource
</ins><span class="cx"> .principalForCalendarUserAddress(address)
</span><span class="cx"> )
</span><del>- if record.enabledForCalendaring:
</del><ins>+ if record.hasCalendars:
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEquals(record, principal.record)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx">
</span><span class="cx"> # Explicitly check the disabled record
</span><del>- provisioningResource = (
- self.principalRootResources['XMLDirectoryService']
- )
</del><ins>+ provisioningResource = self.principalRootResource
</ins><span class="cx">
</span><span class="cx"> self.failUnlessIdentical(
</span><del>- provisioningResource.principalForCalendarUserAddress(
- "mailto:nocalendar@example.com"
</del><ins>+ (
+ yield provisioningResource.principalForCalendarUserAddress(
+ "mailto:nocalendar@example.com"
+ )
</ins><span class="cx"> ),
</span><span class="cx"> None
</span><span class="cx"> )
</span><span class="cx"> self.failUnlessIdentical(
</span><del>- provisioningResource.principalForCalendarUserAddress(
- "urn:uuid:543D28BA-F74F-4D5F-9243-B3E3A61171E5"
</del><ins>+ (
+ yield provisioningResource.principalForCalendarUserAddress(
+ "urn:uuid:543D28BA-F74F-4D5F-9243-B3E3A61171E5"
+ )
</ins><span class="cx"> ),
</span><span class="cx"> None
</span><span class="cx"> )
</span><span class="cx"> self.failUnlessIdentical(
</span><del>- provisioningResource.principalForCalendarUserAddress(
- "/principals/users/nocalendar/"
</del><ins>+ (
+ yield provisioningResource.principalForCalendarUserAddress(
+ "/principals/users/nocalendar/"
+ )
</ins><span class="cx"> ),
</span><span class="cx"> None
</span><span class="cx"> )
</span><span class="cx"> self.failUnlessIdentical(
</span><del>- provisioningResource.principalForCalendarUserAddress(
- "/principals/__uids__/543D28BA-F74F-4D5F-9243-B3E3A61171E5/"
</del><ins>+ (
+ yield provisioningResource.principalForCalendarUserAddress(
+ "/principals/__uids__/"
+ "543D28BA-F74F-4D5F-9243-B3E3A61171E5/"
+ )
</ins><span class="cx"> ),
</span><span class="cx"> None
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><del>- def test_enabledForCalendaring(self):
</del><ins>+ def test_hasCalendars(self):
</ins><span class="cx"> """
</span><del>- DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
</del><ins>+ DirectoryPrincipalProvisioningResource
+ .principalForCalendarUserAddress()
</ins><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- principal = provisioningResource.principalForRecord(record)
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ principal = yield provisioningResource.principalForRecord(record)
+ if True: # user.enabled:
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> else:
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx"> continue
</span><del>- if record.enabledForCalendaring:
</del><ins>+ if record.hasCalendars:
</ins><span class="cx"> self.assertTrue(
</span><span class="cx"> isinstance(principal, DirectoryCalendarPrincipalResource)
</span><span class="cx"> )
</span><span class="lines">@@ -364,7 +358,7 @@
</span><span class="cx"> self.assertTrue(
</span><span class="cx"> isinstance(principal, DirectoryPrincipalResource)
</span><span class="cx"> )
</span><del>- if record.enabledForAddressBooks:
</del><ins>+ if record.hasContacts:
</ins><span class="cx"> self.assertTrue(
</span><span class="cx"> isinstance(
</span><span class="cx"> principal, DirectoryCalendarPrincipalResource
</span><span class="lines">@@ -397,7 +391,7 @@
</span><span class="cx"> % (principal, property,)
</span><span class="cx"> )
</span><span class="cx">
</span><del>- if record.enabledForCalendaring:
</del><ins>+ if record.hasCalendars:
</ins><span class="cx"> yield hasProperty(
</span><span class="cx"> (caldav_namespace, "calendar-home-set")
</span><span class="cx"> )
</span><span class="lines">@@ -448,7 +442,7 @@
</span><span class="cx"> (calendarserver_namespace, "auto-schedule")
</span><span class="cx"> )
</span><span class="cx">
</span><del>- if record.enabledForAddressBooks:
</del><ins>+ if record.hasContacts:
</ins><span class="cx"> yield hasProperty(carddavxml.AddressBookHomeSet.qname())
</span><span class="cx"> else:
</span><span class="cx"> yield doesNotHaveProperty(
</span><span class="lines">@@ -456,20 +450,23 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_enabledAsOrganizer(self):
</span><span class="cx"> """
</span><del>- DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
</del><ins>+ DirectoryPrincipalProvisioningResource
+ .principalForCalendarUserAddress()
</ins><span class="cx"> """
</span><del>-
</del><span class="cx"> ok_types = (
</span><del>- DirectoryService.recordType_users,
</del><ins>+ self.directory.recordType.user,
</ins><span class="cx"> )
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
</del><ins>+ ) in (yield self._allRecords()):
</ins><span class="cx">
</span><del>- if record.enabledForCalendaring:
- principal = provisioningResource.principalForRecord(record)
</del><ins>+ if record.hasCalendars:
+ principal = (
+ yield provisioningResource.principalForRecord(record)
+ )
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEqual(
</span><span class="cx"> principal.enabledAsOrganizer(),
</span><span class="lines">@@ -480,16 +477,18 @@
</span><span class="cx"> config.Scheduling.Options.AllowLocationAsOrganizer = True
</span><span class="cx"> config.Scheduling.Options.AllowResourceAsOrganizer = True
</span><span class="cx"> ok_types = (
</span><del>- DirectoryService.recordType_users,
- DirectoryService.recordType_groups,
- DirectoryService.recordType_locations,
- DirectoryService.recordType_resources,
</del><ins>+ self.directory.recordType.user,
+ self.directory.recordType.group,
+ self.directory.recordType.location,
+ self.directory.recordType.resource,
</ins><span class="cx"> )
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
- principal = provisioningResource.principalForRecord(record)
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
+ principal = (
+ yield provisioningResource.principalForRecord(record)
+ )
</ins><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEqual(
</span><span class="cx"> principal.enabledAsOrganizer(),
</span><span class="lines">@@ -504,6 +503,7 @@
</span><span class="cx"> # DirectoryPrincipalResource
</span><span class="cx"> ##
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_cacheNotifier(self):
</span><span class="cx"> """
</span><span class="cx"> Each DirectoryPrincipalResource should have a cacheNotifier attribute
</span><span class="lines">@@ -511,8 +511,8 @@
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> self.failUnless(
</span><span class="cx"> isinstance(
</span><span class="cx"> recordResource.cacheNotifier,
</span><span class="lines">@@ -521,14 +521,15 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_displayName(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.displayName()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> self.failUnless(recordResource.displayName())
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -539,11 +540,11 @@
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> members = yield recordResource.groupMembers()
</span><span class="cx"> self.failUnless(
</span><del>- set(record.members()).issubset(
</del><ins>+ set((yield record.members())).issubset(
</ins><span class="cx"> set(r.record for r in members)
</span><span class="cx"> )
</span><span class="cx"> )
</span><span class="lines">@@ -556,11 +557,11 @@
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> memberships = yield recordResource.groupMemberships()
</span><span class="cx"> self.failUnless(
</span><del>- set(record.groups()).issubset(
</del><ins>+ set((yield record.groups())).issubset(
</ins><span class="cx"> set(
</span><span class="cx"> r.record
</span><span class="cx"> for r in memberships if hasattr(r, "record")
</span><span class="lines">@@ -569,49 +570,53 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_principalUID(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.principalUID()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> self.assertEquals(record.guid, recordResource.principalUID())
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_calendarUserAddresses(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.calendarUserAddresses()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> self.assertEqual(
</span><span class="cx"> set(record.calendarUserAddresses),
</span><span class="cx"> set(recordResource.calendarUserAddresses())
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> # Verify that if not enabled for calendaring, no CUAs:
</span><del>- record.enabledForCalendaring = False
</del><ins>+ record.hasCalendars = False
</ins><span class="cx"> self.failIf(recordResource.calendarUserAddresses())
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_canonicalCalendarUserAddress(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.canonicalCalendarUserAddress()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> self.failUnless(
</span><span class="cx"> recordResource.canonicalCalendarUserAddress()
</span><span class="cx"> .startswith("urn:uuid:")
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_addressBookHomeURLs(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.addressBookHomeURLs(),
</span><span class="lines">@@ -620,57 +625,43 @@
</span><span class="cx"> # homes.
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForAddressBooks:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasContacts:
</ins><span class="cx"> self.failIf(tuple(recordResource.addressBookHomeURLs()))
</span><span class="cx">
</span><del>- # Need to create a addressbook home provisioner for each service.
- addressBookRootResources = {}
</del><ins>+ path = os.path.join(self.docroot, self.directory.__class__.__name__)
</ins><span class="cx">
</span><del>- directory = self.directory
- path = os.path.join(self.docroot, directory.__class__.__name__)
-
</del><span class="cx"> if os.path.exists(path):
</span><span class="cx"> rmdir(path)
</span><span class="cx"> os.mkdir(path)
</span><span class="cx">
</span><del>- # need a data store
- newstore = commondatastore(path, none, none, true, false)
-
- provisioningresource = directoryaddressbookhomeprovisioningresource(
- directory,
</del><ins>+ addressBookRootResource = DirectoryAddressBookHomeProvisioningResource(
+ self.directory,
</ins><span class="cx"> "/addressbooks/",
</span><del>- newstore
</del><ins>+ self.storeUnderTest()
</ins><span class="cx"> )
</span><span class="cx">
</span><del>- addressbookrootresources[directory.__class__.__name__] = (
- provisioningResource
- )
-
</del><span class="cx"> # AddressBook home provisioners should result in addressBook homes.
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForAddressBooks:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasContacts:
</ins><span class="cx"> homeURLs = tuple(recordResource.addressBookHomeURLs())
</span><span class="cx"> self.failUnless(homeURLs)
</span><span class="cx">
</span><del>- # Turn off enabledForAddressBooks and addressBookHomeURLs
</del><ins>+ # Turn off hasContacts and addressBookHomeURLs
</ins><span class="cx"> # should be empty
</span><del>- record.enabledForAddressBooks = False
</del><ins>+ record.hasContacts = False
</ins><span class="cx"> self.failIf(tuple(recordResource.addressBookHomeURLs()))
</span><del>- record.enabledForAddressBooks = True
</del><ins>+ record.hasContacts = True
</ins><span class="cx">
</span><del>- addressBookRootURL = (
- addressBookRootResources[
- record.service.__class__.__name__
- ].url()
- )
</del><ins>+ addressBookRootURL = addressBookRootResource.url()
</ins><span class="cx">
</span><span class="cx"> for homeURL in homeURLs:
</span><span class="cx"> self.failUnless(homeURL.startswith(addressBookRootURL))
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_calendarHomeURLs(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.calendarHomeURLs(),
</span><span class="lines">@@ -680,8 +671,8 @@
</span><span class="cx"> # No calendar home provisioner should result in no calendar homes.
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> self.failIf(tuple(recordResource.calendarHomeURLs()))
</span><span class="cx"> self.failIf(recordResource.scheduleInboxURL())
</span><span class="cx"> self.failIf(recordResource.scheduleOutboxURL())
</span><span class="lines">@@ -689,8 +680,7 @@
</span><span class="cx"> # Need to create a calendar home provisioner for each service.
</span><span class="cx"> calendarRootResources = {}
</span><span class="cx">
</span><del>- directory = self.directory
- path = os.path.join(self.docroot, directory.__class__.__name__)
</del><ins>+ path = os.path.join(self.docroot, self.directory.__class__.__name__)
</ins><span class="cx">
</span><span class="cx"> if os.path.exists(path):
</span><span class="cx"> rmdir(path)
</span><span class="lines">@@ -700,28 +690,28 @@
</span><span class="cx"> _newStore = CommonDataStore(path, None, None, True, False)
</span><span class="cx">
</span><span class="cx"> provisioningResource = DirectoryCalendarHomeProvisioningResource(
</span><del>- directory,
</del><ins>+ self.directory,
</ins><span class="cx"> "/calendars/",
</span><span class="cx"> _newStore
</span><span class="cx"> )
</span><span class="cx">
</span><del>- calendarRootResources[directory.__class__.__name__] = (
</del><ins>+ calendarRootResources[self.directory.__class__.__name__] = (
</ins><span class="cx"> provisioningResource
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> # Calendar home provisioners should result in calendar homes.
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> homeURLs = tuple(recordResource.calendarHomeURLs())
</span><span class="cx"> self.failUnless(homeURLs)
</span><span class="cx">
</span><del>- # Turn off enabledForCalendaring and calendarHomeURLs should
</del><ins>+ # Turn off hasCalendars and calendarHomeURLs should
</ins><span class="cx"> # be empty
</span><del>- record.enabledForCalendaring = False
</del><ins>+ record.hasCalendars = False
</ins><span class="cx"> self.failIf(tuple(recordResource.calendarHomeURLs()))
</span><del>- record.enabledForCalendaring = True
</del><ins>+ record.hasCalendars = True
</ins><span class="cx">
</span><span class="cx"> calendarRootURL = (
</span><span class="cx"> calendarRootResources[
</span><span class="lines">@@ -752,6 +742,7 @@
</span><span class="cx"> self.failIf(outboxURL)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_canAutoSchedule(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.canAutoSchedule()
</span><span class="lines">@@ -760,8 +751,8 @@
</span><span class="cx"> # Set all resources and locations to auto-schedule, plus one user
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> if (
</span><span class="cx"> recordType in ("locations", "resources") or
</span><span class="cx"> record.uid == "cdaboo"
</span><span class="lines">@@ -771,8 +762,8 @@
</span><span class="cx"> # Default state - resources and locations, enabled, others not
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> if recordType in ("locations", "resources"):
</span><span class="cx"> self.assertTrue(recordResource.canAutoSchedule())
</span><span class="cx"> else:
</span><span class="lines">@@ -782,8 +773,8 @@
</span><span class="cx"> self.patch(config.Scheduling.Options.AutoSchedule, "AllowUsers", True)
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> if (
</span><span class="cx"> recordType in ("locations", "resources") or
</span><span class="cx"> record.uid == "cdaboo"
</span><span class="lines">@@ -796,11 +787,12 @@
</span><span class="cx"> self.patch(config.Scheduling.Options.AutoSchedule, "Enabled", False)
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabledForCalendaring:
</del><ins>+ ) in (yield self._allRecords()):
+ if record.hasCalendars:
</ins><span class="cx"> self.assertFalse(recordResource.canAutoSchedule())
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def test_canAutoScheduleAutoAcceptGroup(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.canAutoSchedule(organizer)
</span><span class="lines">@@ -812,7 +804,7 @@
</span><span class="cx">
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
</del><ins>+ ) in (yield self._allRecords()):
</ins><span class="cx"> if record.uid == "apollo":
</span><span class="cx">
</span><span class="cx"> # No organizer
</span><span class="lines">@@ -839,10 +831,12 @@
</span><span class="cx"> """
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
- for args in _authReadOnlyPrivileges(
- self, recordResource, recordResource.principalURL()
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
+ for args in (
+ yield _authReadOnlyPrivileges(
+ self, recordResource, recordResource.principalURL()
+ )
</ins><span class="cx"> ):
</span><span class="cx"> yield self._checkPrivileges(*args)
</span><span class="cx">
</span><span class="lines">@@ -852,24 +846,24 @@
</span><span class="cx"> """
</span><span class="cx"> Default access controls for principal provisioning resources.
</span><span class="cx"> """
</span><del>- directory = self.directory
- #print("\n -> %s" % (directory.__class__.__name__,))
- provisioningResource = (
- self.principalRootResources[directory.__class__.__name__]
- )
</del><ins>+ provisioningResource = self.principalRootResource
</ins><span class="cx">
</span><del>- for args in _authReadOnlyPrivileges(
- self, provisioningResource,
- provisioningResource.principalCollectionURL()
</del><ins>+ for args in (
+ yield _authReadOnlyPrivileges(
+ self, provisioningResource,
+ provisioningResource.principalCollectionURL()
+ )
</ins><span class="cx"> ):
</span><span class="cx"> yield self._checkPrivileges(*args)
</span><span class="cx">
</span><span class="cx"> for recordType in (yield provisioningResource.listChildren()):
</span><span class="cx"> #print(" -> %s" % (recordType,))
</span><del>- typeResource = provisioningResource.getChild(recordType)
</del><ins>+ typeResource = yield provisioningResource.getChild(recordType)
</ins><span class="cx">
</span><del>- for args in _authReadOnlyPrivileges(
- self, typeResource, typeResource.principalCollectionURL()
</del><ins>+ for args in (
+ yield _authReadOnlyPrivileges(
+ self, typeResource, typeResource.principalCollectionURL()
+ )
</ins><span class="cx"> ):
</span><span class="cx"> yield self._checkPrivileges(*args)
</span><span class="cx">
</span><span class="lines">@@ -884,9 +878,7 @@
</span><span class="cx"> def qname(self):
</span><span class="cx"> return self.ns, self.name
</span><span class="cx">
</span><del>- provisioningResource = (
- self.principalRootResources['XMLDirectoryService']
- )
</del><ins>+ provisioningResource = self.principalRootResource
</ins><span class="cx">
</span><span class="cx"> expected = (
</span><span class="cx"> (
</span><span class="lines">@@ -961,6 +953,7 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def _allRecords(self):
</span><span class="cx"> """
</span><span class="cx"> @return: an iterable of tuples
</span><span class="lines">@@ -968,18 +961,21 @@
</span><span class="cx"> where C{provisioningResource} is the root provisioning resource,
</span><span class="cx"> C{recordType} is the record type, C{recordResource} is the
</span><span class="cx"> principal resource and C{record} is the directory service record
</span><del>- for each record in each directory in C{directoryServices}.
</del><ins>+ for each record the directory.
</ins><span class="cx"> """
</span><del>- directory = self.directory
- provisioningResource = self.principalRootResources[
- directory.__class__.__name__
- ]
- for recordType in directory.recordTypes():
- for record in directory.listRecords(recordType):
</del><ins>+ provisioningResource = self.principalRootResource
+ results = []
+ for recordType in self.directory.recordTypes():
+ for record in (
+ yield self.directory.recordsWithRecordType(recordType)
+ ):
</ins><span class="cx"> recordResource = (
</span><del>- provisioningResource.principalForRecord(record)
</del><ins>+ yield provisioningResource.principalForRecord(record)
</ins><span class="cx"> )
</span><del>- yield provisioningResource, recordType, recordResource, record
</del><ins>+ results.append(
+ (provisioningResource, recordType, recordResource, record)
+ )
+ returnValue(results)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def _checkPrivileges(self, resource, url, principal, privilege, allowed):
</span><span class="lines">@@ -1017,12 +1013,13 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><ins>+@inlineCallbacks
</ins><span class="cx"> def _authReadOnlyPrivileges(self, resource, url):
</span><span class="cx"> items = []
</span><span class="cx"> for (
</span><span class="cx"> provisioningResource, recordType, recordResource, record
</span><del>- ) in self._allRecords():
- if record.enabled:
</del><ins>+ ) in (yield self._allRecords()):
+ if True: # user.enabled:
</ins><span class="cx"> items.append((
</span><span class="cx"> davxml.HRef().fromString(recordResource.principalURL()),
</span><span class="cx"> davxml.Read(), True
</span><span class="lines">@@ -1038,5 +1035,8 @@
</span><span class="cx"> davxml.Unauthenticated(), davxml.Write(), False
</span><span class="cx"> ))
</span><span class="cx">
</span><ins>+ results = []
</ins><span class="cx"> for principal, privilege, allowed in items:
</span><del>- yield resource, url, principal, privilege, allowed
</del><ins>+ results.append((resource, url, principal, privilege, allowed))
+
+ returnValue(results)
</ins></span></pre>
</div>
</div>
</body>
</html>