示例#1
0
    def testLoadState(self):
        tboid = yield self.master.db.state.getObjectId(
            'testbot', 'buildbot.reporters.telegram.TelegramWebhookBot')
        yield self.insertTestData([
            fakedb.ObjectState(objectid=tboid, name='notify_events',
                               value_json='[[123456789, ["started", "finished"]]]'),
            fakedb.ObjectState(objectid=tboid, name='missing_workers',
                               value_json='[[123456789, [12]]]'),
        ])

        tb = self.master.config.services['TelegramBot']
        yield tb.bot.loadState()
        c = tb.bot.getContact({'id': 123456789}, {'id': 123456789})
        self.assertEquals(c.channel.notify_events, {'started', 'finished'})
        self.assertEquals(c.channel.missing_workers, {12})
示例#2
0
    def test_gotChange_createAbsoluteSourceStamps_older_change(self):
        # check codebase is not stored if it's older than the most recent
        sched = self.makeFullScheduler(name='test', builderNames=['test'],
                                       treeStableTimer=None, branch='master',
                                       codebases=self.codebases,
                                       createAbsoluteSourceStamps=True)
        self.db.insertTestData([
            fakedb.Object(id=self.OBJECTID, name='test',
                          class_name='SingleBranchScheduler'),
            fakedb.ObjectState(objectid=self.OBJECTID, name='lastCodebases',
                               value_json='{"a": {"branch": "master", "repository": "A", '
                               '"revision": "5555:def",  "lastChange": 20}}')])

        yield sched.activate()

        # this change is not recorded, since it's older than
        # change 20
        yield sched.gotChange(self.mkch(codebase='a', revision='1234:abc', repository='A',
                                        number=10),
                              True)

        self.db.state.assertState(self.OBJECTID, lastCodebases={
            'a': dict(branch='master', repository='A', revision='5555:def', lastChange=20)})

        yield sched.deactivate()
示例#3
0
 def test_getState_badjson(self):
     d = self.insertTestData([
         fakedb.Object(id=10, name='x', class_name='y'),
         fakedb.ObjectState(objectid=10, name='x', value_json='ff[1'),
     ])
     d.addCallback(lambda _: self.db.state.getState(10, 'x'))
     return self.assertFailure(d, TypeError)
    def test_savedProperties(self):
        sched = self.makeScheduler(
            name='test',
            builderNames=['test'],
            minute=[5],
            codebases={'cb': {
                'repository': 'annoying'
            }})

        value_json = \
            '[ [ {"codebase": "cb", "project": "p", "repository": "r", ' \
            '"branch": "br", "revision": "myrev"} ], ' \
            '{"testprop": ["test", "TEST"]}, null, null ]'
        self.db.insertTestData([
            fakedb.Object(id=self.SCHEDULERID,
                          name='test',
                          class_name='NightlyTriggerable'),
            fakedb.ObjectState(objectid=self.SCHEDULERID,
                               name='lastTrigger',
                               value_json=value_json),
        ])

        sched.activate()

        self.clock.advance(60 * 60)  # Run for 1h

        self.assertBuildsetAdded(properties={'testprop': ('test', 'TEST')},
                                 sourcestamps=[
                                     dict(codebase='cb',
                                          branch='br',
                                          project='p',
                                          repository='r',
                                          revision='myrev'),
                                 ])
示例#5
0
    def test_getState_present(self):
        yield self.insertTestData([
            fakedb.Object(id=10, name='x', class_name='y'),
            fakedb.ObjectState(objectid=10, name='x', value_json='[1,2]'),
        ])
        val = yield self.db.state.getState(10, 'x')

        self.assertEqual(val, [1, 2])
示例#6
0
 def test_bot_loadState(self):
     boid = yield self.bot._get_object_id()
     self.master.db.insertTestData([
         fakedb.ObjectState(objectid=boid,
                            name='notify_events',
                            value_json='[["#channel1", ["warnings"]]]'),
     ])
     yield self.bot.loadState()
     self.assertEqual(self.bot.channels['#channel1'].notify_events,
                      {'warnings'})
示例#7
0
    def test_setState_existing(self):
        yield self.insertTestData([
            fakedb.Object(id=10, name='-', class_name='-'),
            fakedb.ObjectState(objectid=10, name='x', value_json='99'),
        ])
        yield self.db.state.setState(10, 'x', [1, 2])

        def thd(conn):
            q = self.db.model.object_state.select()
            rows = conn.execute(q).fetchall()
            self.assertEqual([(r.objectid, r.name, r.value_json)
                              for r in rows], [(10, 'x', '[1, 2]')])

        yield self.db.pool.do(thd)
示例#8
0
    def test_getUpstreamBuildsets_missing(self):
        sched = self.makeScheduler()

        # insert some state, with more bsids than exist
        self.db.insertTestData([
            fakedb.SourceStamp(id=1234),
            fakedb.Buildset(id=11),
            fakedb.Buildset(id=13),
            fakedb.BuildsetSourceStamp(buildsetid=13, sourcestampid=1234),
            fakedb.Object(id=OBJECTID),
            fakedb.ObjectState(objectid=OBJECTID,
                               name='upstream_bsids', value_json='[11,12,13]'),
        ])

        # check return value (missing 12)
        self.assertEqual((yield sched._getUpstreamBuildsets()),
                         [(11, [], False, -1), (13, [1234], False, -1)])

        # and check that it wrote the correct value back to the state
        self.db.state.assertState(OBJECTID, upstream_bsids=[11, 13])
示例#9
0
    def test_iterations_onlyIfChanged_createAbsoluteSourceStamps_oneChanged_loadOther(self):
        # Test createAbsoluteSourceStamps=True when only one codebase has changed,
        # but the other was previously changed
        fII = mock.Mock(name='fII')
        self.makeScheduler(name='test', builderNames=['test'], branch=None,
                           minute=[5, 25, 45], onlyIfChanged=True,
                           fileIsImportant=fII,
                           codebases={'a': {'repository': "", 'branch': 'master'},
                                      'b': {'repository': "", 'branch': 'master'}},
                           createAbsoluteSourceStamps=True)

        self.db.insertTestData([
            fakedb.Object(id=self.OBJECTID, name='test', class_name='Nightly'),
            fakedb.ObjectState(objectid=self.OBJECTID, name='lastCodebases',
                               value_json='{"b": {"branch": "master", "repository": "B", "revision": "1234:abc",  "lastChange": 2}}')])  # noqa pylint: disable=line-too-long

        change = self.makeFakeChange(number=3, codebase='a', revision='2345:bcd')
        yield self.do_test_iterations_onlyIfChanged_test(fII, (120, change, True))

        self.db.state.assertStateByClass('test', 'Nightly',
                                         last_build=1500 + self.localtime_offset)
        # addBuildsetForChanges calls getCodebase, so this isn't too
        # interesting
        self.assertEqual(self.addBuildsetCallTimes, [300])
        self.assertEqual(self.addBuildsetCalls, [
            ('addBuildsetForChanges', {
                'builderNames': None,
                'changeids': [3],
                'external_idstring': None,
                'properties': None,
                'reason': "The Nightly scheduler named 'test' triggered this build",
                'waited_for': False})])
        self.db.state.assertStateByClass('test', 'Nightly', lastCodebases={
            'a': dict(revision='2345:bcd', branch=None, repository='', lastChange=3),
            'b': dict(revision='1234:abc', branch="master", repository='B', lastChange=2)})
        yield self.sched.deactivate()