def test_pruneChanges(self): yield self.insertTestData([ fakedb.Scheduler(id=29), fakedb.SourceStamp(id=234, branch='aa'), fakedb.SourceStamp(id=235, branch='bb'), fakedb.Change(changeid=11), fakedb.Change(changeid=12, sourcestampid=234), fakedb.SchedulerChange(schedulerid=29, changeid=12), ] + self.change13_rows + [ fakedb.SchedulerChange(schedulerid=29, changeid=13), ] + self.change14_rows + [ fakedb.SchedulerChange(schedulerid=29, changeid=14), fakedb.Change(changeid=15, sourcestampid=235), ]) # pruning with a horizon of 2 should delete changes 11, 12 and 13 yield self.db.changes.pruneChanges(2) def thd(conn): results = {} for tbl_name in ('scheduler_changes', 'change_files', 'change_properties', 'changes'): tbl = self.db.model.metadata.tables[tbl_name] res = conn.execute(sa.select([tbl.c.changeid])) results[tbl_name] = sorted([row[0] for row in res.fetchall()]) self.assertEqual( results, { 'scheduler_changes': [14], 'change_files': [14], 'change_properties': [], 'changes': [14, 15], }) yield self.db.pool.do(thd)
def test_pruneChanges(self): d = self.insertTestData( [ fakedb.Object(id=29), fakedb.SourceStamp(id=234), fakedb.Change(changeid=11), fakedb.Change(changeid=12), fakedb.SchedulerChange(objectid=29, changeid=12), fakedb.SourceStampChange(sourcestampid=234, changeid=12), ] + self.change13_rows + [ fakedb.SchedulerChange(objectid=29, changeid=13), ] + self.change14_rows + [ fakedb.SchedulerChange(objectid=29, changeid=14), fakedb.Change(changeid=15), fakedb.SourceStampChange(sourcestampid=234, changeid=15), ] ) # pruning with a horizon of 2 should delete changes 11, 12 and 13 d.addCallback(lambda _: self.db.changes.pruneChanges(2)) def check(_): def thd(conn): results = {} for tbl_name in ('scheduler_changes', 'sourcestamp_changes', 'change_files', 'change_properties', 'changes'): tbl = self.db.model.metadata.tables[tbl_name] res = conn.execute(sa.select([tbl.c.changeid])) results[tbl_name] = sorted([row[0] for row in res.fetchall()]) self.assertEqual(results, { 'scheduler_changes': [14], 'sourcestamp_changes': [15], 'change_files': [14], 'change_properties': [], 'changes': [14, 15], }) return self.db.pool.do(thd) d.addCallback(check) return d
def test_activate_treeStableTimer(self): cf = mock.Mock() sched = self.makeScheduler(self.Subclass, treeStableTimer=10, change_filter=cf) self.db.schedulers.fakeClassifications(self.SCHEDULERID, {20: True}) self.master.db.insertTestData([ fakedb.Change(changeid=20), fakedb.SchedulerChange(schedulerid=self.SCHEDULERID, changeid=20, important=1) ]) yield sched.activate() # check that the scheduler has started to consume changes, and no # classifications have been flushed. Furthermore, the existing # classification should have been acted on, so the timer should be # running self.assertConsumingChanges(fileIsImportant=None, change_filter=cf, onlyImportant=False) self.db.schedulers.assertClassifications(self.SCHEDULERID, {20: True}) self.assertTrue(sched.timer_started) self.clock.advance(10) yield sched.deactivate()
def test_startService_treeStableTimer(self): cf = mock.Mock() sched = self.makeScheduler(self.Subclass, treeStableTimer=10, change_filter=cf) self.db.schedulers.fakeClassifications(self.SCHEDULERID, {20: True}) self.master.db.insertTestData([ fakedb.Change(changeid=20), fakedb.SchedulerChange(schedulerid=self.SCHEDULERID, changeid=20, important=1) ]) d = sched.startService(_returnDeferred=True) # check that the scheduler has started to consume changes, and no # classifications have been flushed. Furthermore, the existing # classification should have been acted on, so the timer should be # running def check(_): self.assertConsumingChanges(fileIsImportant=None, change_filter=cf) self.db.schedulers.assertClassifications(self.SCHEDULERID, {20: True}) self.assertTrue(sched.timer_started) d.addCallback(check) d.addCallback(lambda _: sched.stopService()) return d
def test_classifyChanges_again(self): # test reclassifying changes, which may happen during some timing # conditions. It's important that this test uses multiple changes, # only one of which already exists d = self.insertTestData([ # conditions. It's important that this test uses multiple changes, # only one of which already exists self.change3, self.change4, self.change5, self.change6, self.scheduler24, fakedb.SchedulerChange(objectid=24, changeid=5, important=0), ]) d.addCallback(lambda _: self.db.schedulers.classifyChanges( 24, {3: True, 4: False, 5: True, 6: False})) def check(_): def thd(conn): sch_chgs_tbl = self.db.model.scheduler_changes q = sch_chgs_tbl.select(order_by=sch_chgs_tbl.c.changeid) r = conn.execute(q) rows = [(row.objectid, row.changeid, row.important) for row in r.fetchall()] self.assertEqual(sorted(rows), sorted([(24, 3, 1), (24, 4, 0), (24, 5, 1), (24, 6, 0)])) return self.db.pool.do(thd) d.addCallback(check) return d
def test_classifyChanges_again(self): # test reclassifying changes, which may happen during some timing # conditions yield self.insertTestData([ self.ss92, self.change3, self.scheduler24, fakedb.SchedulerChange(schedulerid=24, changeid=3, important=0), ]) yield self.db.schedulers.classifyChanges(24, {3: True}) res = yield self.db.schedulers.getChangeClassifications(24) self.assertEqual(res, {3: True})
def test_classifyChanges_again(self): # test reclassifying changes, which may happen during some timing # conditions. It's important that this test uses multiple changes, # only one of which already exists yield self.insertTestData([ self.ss92, self.change3, self.change4, self.change5, self.change6, self.scheduler24, fakedb.SchedulerChange(schedulerid=24, changeid=5, important=0), ]) yield self.db.schedulers.classifyChanges( 24, {3: True, 4: False, 5: True, 6: False}) res = yield self.db.schedulers.getChangeClassifications(24) self.assertEqual(res, {3: True, 4: False, 5: True, 6: False})
def test_classifyChanges_again(self): # test reclassifying changes, which may happen during some timing # conditions d = self.insertTestData([ self.change3, self.scheduler24, fakedb.SchedulerChange(objectid=24, changeid=3, important=0), ]) d.addCallback(lambda _ : self.db.schedulers.classifyChanges(24, { 3 : True })) def check(_): def thd(conn): sch_chgs_tbl = self.db.model.scheduler_changes q = sch_chgs_tbl.select(order_by=sch_chgs_tbl.c.changeid) r = conn.execute(q) rows = [ (row.objectid, row.changeid, row.important) for row in r.fetchall() ] self.assertEqual(rows, [ (24, 3, 1) ]) return self.db.pool.do(thd) d.addCallback(check) return d