Example #1
0
    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)
Example #2
0
    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()
Example #3
0
 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})