def test_cascade_delete_cleanup(self): """ Test that when work associated with L{txdav.caldav.datastore.scheduling.work.ScheduleWork} is removed with the L{ScheduleWork} item being removed, the associated L{JobItem} runs and removes itself and the L{ScheduleWork}. """ ScheduleWorkMixin._queued = 0 txn = self.transactionUnderTest() home = yield self.homeUnderTest(name="user01") yield ScheduleOrganizerWork.schedule( txn, "12345-67890", "create", home, None, None, self.calendar_new, "urn:uuid:user01", 2, True, ) yield self.commit() self.assertEqual(ScheduleWorkMixin._queued, 1) jobs = yield JobItem.all(self.transactionUnderTest()) work = yield jobs[0].workItem() yield WorkItem.delete(work) yield self.commit() jobs = yield JobItem.all(self.transactionUnderTest()) self.assertEqual(len(jobs), 1) baseWork = yield ScheduleWork.all(self.transactionUnderTest()) self.assertEqual(len(baseWork), 1) self.assertEqual(baseWork[0].jobID, jobs[0].jobID) work = yield jobs[0].workItem() self.assertTrue(work is None) yield self.commit() yield JobItem.waitEmpty(self.storeUnderTest().newTransaction, reactor, 60) jobs = yield JobItem.all(self.transactionUnderTest()) self.assertEqual(len(jobs), 0) work = yield ScheduleOrganizerWork.all(self.transactionUnderTest()) self.assertEqual(len(work), 0) baseWork = yield ScheduleWork.all(self.transactionUnderTest()) self.assertEqual(len(baseWork), 0)
def test_create(self): """ Test that jobs associated with L{txdav.caldav.datastore.scheduling.work.ScheduleOrganizerWork} can be created and correctly removed. """ ScheduleWorkMixin._queued = 0 txn = self.transactionUnderTest() home = yield self.homeUnderTest(name="user01") yield ScheduleOrganizerWork.schedule( txn, "12345-67890", "create", home, None, None, self.calendar_new, "urn:uuid:user01", 2, True, ) yield self.commit() self.assertEqual(ScheduleWorkMixin._queued, 1) jobs = yield JobItem.all(self.transactionUnderTest()) self.assertEqual(len(jobs), 1) work = yield jobs[0].workItem() self.assertTrue(isinstance(work, ScheduleOrganizerWork)) self.assertEqual(work.icalendarUID, "12345-67890") self.assertEqual(scheduleActionFromSQL[work.scheduleAction], "create") yield work.delete() yield jobs[0].delete() yield self.commit() jobs = yield JobItem.all(self.transactionUnderTest()) self.assertEqual(len(jobs), 0) work = yield ScheduleOrganizerWork.all(self.transactionUnderTest()) self.assertEqual(len(work), 0) baseWork = yield ScheduleWork.all(self.transactionUnderTest()) self.assertEqual(len(baseWork), 0)
def test_create(self): """ Test that jobs associated with L{txdav.caldav.datastore.scheduling.work.ScheduleOrganizerWork} can be created and correctly removed. """ ScheduleWorkMixin._queued = 0 txn = self.transactionUnderTest() home = yield self.homeUnderTest(name="user01") yield ScheduleOrganizerWork.schedule( txn, "12345-67890", "create", home, None, None, self.calendar_new, "urn:uuid:user01", 2, True, ) yield self.commit() self.assertEqual(ScheduleWorkMixin._queued, 1) jobs = yield JobItem.all(self.transactionUnderTest()) self.assertEqual(len(jobs), 1) work = yield jobs[0].workItem() self.assertTrue(isinstance(work, ScheduleOrganizerWork)) self.assertEqual(work.icalendarUid, "12345-67890") self.assertEqual(scheduleActionFromSQL[work.scheduleAction], "create") yield work.delete() yield jobs[0].delete() yield self.commit() jobs = yield JobItem.all(self.transactionUnderTest()) self.assertEqual(len(jobs), 0) work = yield ScheduleOrganizerWork.all(self.transactionUnderTest()) self.assertEqual(len(work), 0) baseWork = yield ScheduleWork.all(self.transactionUnderTest()) self.assertEqual(len(baseWork), 0)
def test_upgrade_SCHEDULE_REPLY(self): cal1 = """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:1234-5678 DTSTART:20071114T010000Z DURATION:PT1H DTSTAMP:20071114T000000Z ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ORGANIZER:mailto:[email protected] SUMMARY:Test END:VEVENT END:VCALENDAR """ # Load old schema and populate with data schema = yield self._loadOldSchema(self.upgradePath.child("v49.sql")) txn = self.store.newTransaction("loadData") yield Insert({ schema.CALENDAR_HOME.RESOURCE_ID: 1, schema.CALENDAR_HOME.OWNER_UID: "abcdefg", }).on(txn) yield Insert({ schema.CALENDAR.RESOURCE_ID: 2, }).on(txn) yield Insert({ schema.CALENDAR_OBJECT.RESOURCE_ID: 3, schema.CALENDAR_OBJECT.CALENDAR_RESOURCE_ID: 2, schema.CALENDAR_OBJECT.RESOURCE_NAME: "1.ics", schema.CALENDAR_OBJECT.ICALENDAR_TEXT: cal1, schema.CALENDAR_OBJECT.ICALENDAR_UID: "1234-5678", schema.CALENDAR_OBJECT.ICALENDAR_TYPE: "VEVENT", schema.CALENDAR_OBJECT.MD5: "md5-1234567890", }).on(txn) yield Insert({ schema.JOB.JOB_ID: 1, schema.JOB.WORK_TYPE: "SCHEDULE_REPLY_WORK", schema.JOB.NOT_BEFORE: datetime.utcnow(), }).on(txn) yield Insert({ schema.SCHEDULE_WORK.WORK_ID: 1, schema.SCHEDULE_WORK.JOB_ID: 1, schema.SCHEDULE_WORK.ICALENDAR_UID: "1234-5678", schema.SCHEDULE_WORK.WORK_TYPE: "SCHEDULE_REPLY_WORK", }).on(txn) yield Insert({ schema.SCHEDULE_REPLY_WORK.WORK_ID: 1, schema.SCHEDULE_REPLY_WORK.HOME_RESOURCE_ID: 1, schema.SCHEDULE_REPLY_WORK.RESOURCE_ID: 3, schema.SCHEDULE_REPLY_WORK.CHANGED_RIDS: None, }).on(txn) yield txn.commit() # Try to upgrade and verify new version afterwards upgrader = UpgradeDatabaseSchemaStep(self.store) yield upgrader.databaseUpgrade() new_version = yield self._loadVersion() self.assertEqual(new_version, self.currentVersion) txn = self.store.newTransaction("loadData") jobs = yield Select(From=schema.JOB, ).on(txn) schedules = yield Select(From=schema.SCHEDULE_WORK, ).on(txn) replies = yield Select(From=schema.SCHEDULE_REPLY_WORK, ).on(txn) self.assertEqual(len(jobs), 1) self.assertEqual(len(schedules), 1) self.assertEqual(len(replies), 1) self.assertEqual(list(replies[0]), [ 1, 1, 3, None, ]) jobs = yield JobItem.all(txn) self.assertEqual(len(jobs), 1) work = yield jobs[0].workItem() self.assertTrue(isinstance(work, ScheduleReplyWork)) workers = yield ScheduleWork.all(txn) self.assertEqual(len(workers), 1) self.assertEqual(workers[0].workType, "SCHEDULE_REPLY_WORK") yield txn.commit()
def test_upgrade_SCHEDULE_REPLY(self): cal1 = """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:1234-5678 DTSTART:20071114T010000Z DURATION:PT1H DTSTAMP:20071114T000000Z ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ORGANIZER:mailto:[email protected] SUMMARY:Test END:VEVENT END:VCALENDAR """ # Load old schema and populate with data schema = yield self._loadOldSchema(self.upgradePath.child("v49.sql")) txn = self.store.newTransaction("loadData") yield Insert( { schema.CALENDAR_HOME.RESOURCE_ID: 1, schema.CALENDAR_HOME.OWNER_UID: "abcdefg", } ).on(txn) yield Insert( { schema.CALENDAR.RESOURCE_ID: 2, } ).on(txn) yield Insert( { schema.CALENDAR_OBJECT.RESOURCE_ID: 3, schema.CALENDAR_OBJECT.CALENDAR_RESOURCE_ID: 2, schema.CALENDAR_OBJECT.RESOURCE_NAME: "1.ics", schema.CALENDAR_OBJECT.ICALENDAR_TEXT: cal1, schema.CALENDAR_OBJECT.ICALENDAR_UID: "1234-5678", schema.CALENDAR_OBJECT.ICALENDAR_TYPE: "VEVENT", schema.CALENDAR_OBJECT.MD5: "md5-1234567890", } ).on(txn) yield Insert( { schema.JOB.JOB_ID: 1, schema.JOB.WORK_TYPE: "SCHEDULE_REPLY_WORK", schema.JOB.NOT_BEFORE: datetime.utcnow(), } ).on(txn) yield Insert( { schema.SCHEDULE_WORK.WORK_ID: 1, schema.SCHEDULE_WORK.JOB_ID: 1, schema.SCHEDULE_WORK.ICALENDAR_UID: "1234-5678", schema.SCHEDULE_WORK.WORK_TYPE: "SCHEDULE_REPLY_WORK", } ).on(txn) yield Insert( { schema.SCHEDULE_REPLY_WORK.WORK_ID: 1, schema.SCHEDULE_REPLY_WORK.HOME_RESOURCE_ID: 1, schema.SCHEDULE_REPLY_WORK.RESOURCE_ID: 3, schema.SCHEDULE_REPLY_WORK.CHANGED_RIDS: None, } ).on(txn) yield txn.commit() # Try to upgrade and verify new version afterwards upgrader = UpgradeDatabaseSchemaStep(self.store) yield upgrader.databaseUpgrade() new_version = yield self._loadVersion() self.assertEqual(new_version, self.currentVersion) txn = self.store.newTransaction("loadData") jobs = yield Select( From=schema.JOB, ).on(txn) schedules = yield Select( From=schema.SCHEDULE_WORK, ).on(txn) replies = yield Select( From=schema.SCHEDULE_REPLY_WORK, ).on(txn) self.assertEqual(len(jobs), 1) self.assertEqual(len(schedules), 1) self.assertEqual(len(replies), 1) self.assertEqual(list(replies[0]), [1, 1, 3, None, ]) jobs = yield JobItem.all(txn) self.assertEqual(len(jobs), 1) work = yield jobs[0].workItem() self.assertTrue(isinstance(work, ScheduleReplyWork)) workers = yield ScheduleWork.all(txn) self.assertEqual(len(workers), 1) self.assertEqual(workers[0].workType, "SCHEDULE_REPLY_WORK") yield txn.commit()