Пример #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)
Пример #2
0
    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
Пример #3
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()
Пример #4
0
    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
Пример #5
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
        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
Пример #6
0
 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})
Пример #7
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})
Пример #8
0
 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