Revision: 15468 http://trac.calendarserver.org//changeset/15468 Author: cdaboo@apple.com Date: 2016-03-01 13:17:13 -0800 (Tue, 01 Mar 2016) Log Message: ----------- Make sure null entries in old resourceinfo.sql databases don't prevent upgrade/migration from happening. Modified Paths: -------------- CalendarServer/trunk/twistedcaldav/test/test_upgrade.py CalendarServer/trunk/twistedcaldav/upgrade.py Modified: CalendarServer/trunk/twistedcaldav/test/test_upgrade.py =================================================================== --- CalendarServer/trunk/twistedcaldav/test/test_upgrade.py 2016-03-01 21:14:32 UTC (rev 15467) +++ CalendarServer/trunk/twistedcaldav/test/test_upgrade.py 2016-03-01 21:17:13 UTC (rev 15468) @@ -14,29 +14,32 @@ # limitations under the License. ## -import cPickle -import hashlib -import os -import zlib from twisted.internet.defer import inlineCallbacks, succeed from twisted.python.filepath import FilePath +from twisted.python.reflect import namedClass + from twistedcaldav.config import config from twistedcaldav.directory.calendaruserproxy import ProxySqliteDB +from twistedcaldav.directory.resourceinfo import ResourceInfoDatabase from twistedcaldav.test.util import StoreTestCase -from twistedcaldav.upgrade import ( - xattrname, upgradeData, updateFreeBusySet, - removeIllegalCharacters, normalizeCUAddrs, - loadDelegatesFromXMLintoProxyDB, migrateDelegatesToStore, - upgradeResourcesXML, upgradeAugmentsXML -) +from twistedcaldav.upgrade import xattrname, upgradeData, updateFreeBusySet, \ + removeIllegalCharacters, normalizeCUAddrs, \ + loadDelegatesFromXMLintoProxyDB, migrateDelegatesToStore, \ + upgradeResourcesXML, upgradeAugmentsXML, migrateAutoSchedule + from txdav.caldav.datastore.index_file import db_basename from txdav.caldav.datastore.scheduling.imip.mailgateway import MailGatewayTokensDatabase from txdav.who.delegates import Delegates from txdav.xml.parser import WebDAVDocument +import cPickle +import hashlib +import os +import zlib + freeBusyAttr = xattrname( "{urn:ietf:params:xml:ns:caldav}calendar-free-busy-set" ) @@ -1505,6 +1508,50 @@ sqliteProxyService.close() + @inlineCallbacks + def test_migrateAutoSchedule(self): + + serviceClass = { + "xml": "twistedcaldav.directory.augment.AugmentXMLDB", + } + augmentClass = namedClass(serviceClass[config.AugmentService.type]) + + # Auto-schedule not currently set + augmentService = augmentClass(**config.AugmentService.params) + augmentRecord = ( + yield augmentService.getAugmentRecord( + "mercury", + "locations" + ) + ) + self.assertEqual(augmentRecord.autoScheduleMode, "default") + + # Create bogus record in resourceinfo db + resourceInfoDatabase = ResourceInfoDatabase(config.DataRoot) + resourceInfoDatabase._db_execute( + "insert into RESOURCEINFO (GUID, AUTOSCHEDULE) values (:1, :2)", + "mercury", 1, + ) + resourceInfoDatabase._db_execute( + "insert into RESOURCEINFO (GUID, AUTOSCHEDULE) values (:1, :2)", + None, 1, + ) + resourceInfoDatabase._db_commit() + + # Migrate auto-schedule from sqlite into directory + yield migrateAutoSchedule(config, self.directory) + + # Auto-schedule now set + augmentService = augmentClass(**config.AugmentService.params) + augmentRecord = ( + yield augmentService.getAugmentRecord( + "mercury", + "locations" + ) + ) + self.assertEqual(augmentRecord.autoScheduleMode, "automatic") + + def test_resourcesXML(self): """ Verify conversion of old resources.xml format to twext.who.xml format Modified: CalendarServer/trunk/twistedcaldav/upgrade.py =================================================================== --- CalendarServer/trunk/twistedcaldav/upgrade.py 2016-03-01 21:14:32 UTC (rev 15467) +++ CalendarServer/trunk/twistedcaldav/upgrade.py 2016-03-01 21:17:13 UTC (rev 15468) @@ -1011,18 +1011,19 @@ "select GUID, AUTOSCHEDULE from RESOURCEINFO" ) for uid, autoSchedule in results: - record = yield directory.recordWithUID(uid) - if record is not None: - augmentRecord = ( - yield augmentService.getAugmentRecord( - uid, - directory.recordTypeToOldName(record.recordType) + if uid is not None: + record = yield directory.recordWithUID(uid) + if record is not None: + augmentRecord = ( + yield augmentService.getAugmentRecord( + uid, + directory.recordTypeToOldName(record.recordType) + ) ) - ) - augmentRecord.autoScheduleMode = ( - "automatic" if autoSchedule else "default" - ) - augmentRecords.append(augmentRecord) + augmentRecord.autoScheduleMode = ( + "automatic" if autoSchedule else "default" + ) + augmentRecords.append(augmentRecord) if augmentRecords: yield augmentService.addAugmentRecords(augmentRecords)