Esempio n. 1
0
    def do_test_getBuildRequests_claim_args(self, **kwargs):
        expected = kwargs.pop('expected')
        yield self.insertTestData([
            # 50: claimed by this master
            fakedb.BuildRequest(id=50,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1),
            fakedb.BuildRequestClaim(brid=50,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 51: claimed by another master
            fakedb.BuildRequest(id=51,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID2),
            fakedb.BuildRequestClaim(brid=51,
                                     masterid=self.OTHER_MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 52: unclaimed
            fakedb.BuildRequest(id=52,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1),

            # 53: unclaimed but complete (should not appear for claimed=False)
            fakedb.BuildRequest(id=53,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=1),
        ])
        brlist = yield self.db.buildrequests.getBuildRequests(**kwargs)

        self.assertEqual(sorted([br['buildrequestid'] for br in brlist]),
                         sorted(expected))
Esempio n. 2
0
    def setUp(self):
        self.setUpTestReactor()
        self.setUpBuilderMixin()

        # a collection of rows that would otherwise clutter up every test
        master_id = fakedb.FakeBuildRequestsComponent.MASTER_ID
        self.base_rows = [
            fakedb.SourceStamp(id=21),
            fakedb.Buildset(id=11, reason='because'),
            fakedb.BuildsetSourceStamp(buildsetid=11, sourcestampid=21),
            fakedb.Builder(id=77, name='bldr1'),
            fakedb.Builder(id=78, name='bldr2'),
            fakedb.Builder(id=182, name='foo@bar'),
            fakedb.BuildRequest(id=111, submitted_at=1000,
                                builderid=77, buildsetid=11),
            fakedb.BuildRequest(id=222, submitted_at=2000,
                                builderid=77, buildsetid=11),
            fakedb.BuildRequestClaim(brid=222, masterid=master_id,
                                     claimed_at=2001),
            fakedb.BuildRequest(id=333, submitted_at=3000,
                                builderid=77, buildsetid=11),
            fakedb.BuildRequest(id=444, submitted_at=2500,
                                builderid=78, buildsetid=11),
            fakedb.BuildRequestClaim(brid=444, masterid=master_id,
                                     claimed_at=2501),
            fakedb.BuildRequest(id=555, submitted_at=2800,
                                builderid=182, buildsetid=11),
        ]
        yield self.db.insertTestData(self.base_rows)
Esempio n. 3
0
    def test_getBuildRequest(self):
        yield self.insertTestData([
            fakedb.BuildRequest(id=44,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=1,
                                results=75,
                                priority=7,
                                submitted_at=self.SUBMITTED_AT_EPOCH,
                                complete_at=self.COMPLETE_AT_EPOCH),
            fakedb.BuildRequestClaim(brid=44,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),
        ])
        brdict = yield self.db.buildrequests.getBuildRequest(44)

        yield self.assertEqual(
            brdict,
            dict(buildrequestid=44,
                 buildsetid=self.BSID,
                 builderid=self.BLDRID1,
                 buildername="builder1",
                 priority=7,
                 claimed=True,
                 claimed_by_masterid=self.MASTER_ID,
                 complete=True,
                 results=75,
                 claimed_at=self.CLAIMED_AT,
                 submitted_at=self.SUBMITTED_AT,
                 complete_at=self.COMPLETE_AT,
                 waited_for=False))
Esempio n. 4
0
 def test_completeBuildRequests(self):
     return self.do_test_completeBuildRequests([
         fakedb.BuildRequest(
             id=44, buildsetid=self.BSID, builderid=self.BLDRID1),
         fakedb.BuildRequestClaim(
             brid=44, masterid=self.MASTER_ID, claimed_at=1300103810),
     ], 1300305712, [(44, True, 7, epoch2datetime(1300305712))])
Esempio n. 5
0
 def insert_test_data(self):
     self.master.db.insertTestData([
         fakedb.Master(id=92),
         fakedb.Worker(id=13, name='wrk'),
         fakedb.Builder(id=100, name='builder1'),
         fakedb.Builder(id=101, name='builder2'),
         fakedb.Builder(id=102, name='builder3'),
         fakedb.Buildset(id=200, results=None, reason="reason98"),
         fakedb.BuildsetSourceStamp(buildsetid=200, sourcestampid=300),
         fakedb.SourceStamp(id=300,
                            revision='revision1',
                            project='project1',
                            codebase='codebase1',
                            repository='repository1',
                            branch='branch1'),
         fakedb.BuildRequest(id=400, buildsetid=200, builderid=100),
         fakedb.BuildRequestClaim(brid=400, masterid=92, claimed_at=1),
         fakedb.Build(id=500,
                      number=1,
                      builderid=100,
                      buildrequestid=400,
                      workerid=13,
                      masterid=92,
                      results=None,
                      state_string="state1"),
         fakedb.BuildRequest(id=401, buildsetid=200, builderid=101),
         fakedb.BuildRequestClaim(brid=401, masterid=92, claimed_at=1),
         fakedb.Build(id=501,
                      number=1,
                      builderid=101,
                      buildrequestid=401,
                      workerid=13,
                      masterid=92,
                      results=None,
                      state_string="state2"),
         fakedb.BuildRequest(id=402, buildsetid=200, builderid=102),
         fakedb.BuildRequestClaim(brid=402, masterid=92, claimed_at=1),
         fakedb.Build(id=502,
                      number=1,
                      builderid=102,
                      buildrequestid=402,
                      workerid=13,
                      masterid=92,
                      results=None,
                      state_string="state3"),
     ])
Esempio n. 6
0
 def test_claimBuildRequests_other_master_claim(self):
     return self.do_test_claimBuildRequests(
         [
             fakedb.BuildRequest(
                 id=44, buildsetid=self.BSID, builderid=self.BLDRID1),
             fakedb.BuildRequestClaim(brid=44,
                                      masterid=self.OTHER_MASTER_ID,
                                      claimed_at=1300103810),
         ],
         1300305712, [44],
         expfailure=buildrequests.AlreadyClaimedError)
Esempio n. 7
0
    def test_masterDeactivated(self):
        self.master.db.insertTestData([
            fakedb.Master(id=14, name='other', active=0,
                          last_active=0),

            # set up a running build with some steps
            fakedb.Builder(id=77, name='b1'),
            fakedb.Worker(id=13, name='wrk'),
            fakedb.Buildset(id=8822),
            fakedb.BuildRequest(id=82, builderid=77, buildsetid=8822),
            fakedb.BuildRequestClaim(brid=82, masterid=14,
                                     claimed_at=SOMETIME),
            fakedb.Build(id=13, builderid=77, masterid=14, workerid=13,
                         buildrequestid=82, number=3, results=None),
            fakedb.Step(id=200, buildid=13),
            fakedb.Log(id=2000, stepid=200, num_lines=2),
            fakedb.LogChunk(logid=2000, first_line=1, last_line=2,
                            content='ab\ncd')
        ])

        # mock out the _masterDeactivated methods this will call
        for rtype in 'builder', 'scheduler', 'changesource':
            rtype_obj = getattr(self.master.data.rtypes, rtype)
            m = mock.Mock(name=f'{rtype}._masterDeactivated',
                          spec=rtype_obj._masterDeactivated)
            m.side_effect = lambda masterid: defer.succeed(None)
            rtype_obj._masterDeactivated = m

        # and the update methods..
        for meth in 'finishBuild', 'finishStep', 'finishLog':
            m = mock.create_autospec(getattr(self.master.data.updates, meth))
            m.side_effect = lambda *args, **kwargs: defer.succeed(None)
            setattr(self.master.data.updates, meth, m)

        yield self.rtype._masterDeactivated(14, 'other')

        self.master.data.rtypes.builder._masterDeactivated. \
            assert_called_with(masterid=14)
        self.master.data.rtypes.scheduler._masterDeactivated. \
            assert_called_with(masterid=14)
        self.master.data.rtypes.changesource._masterDeactivated. \
            assert_called_with(masterid=14)

        # see that we finished off that build and its steps and logs
        updates = self.master.data.updates
        updates.finishLog.assert_called_with(logid=2000)
        updates.finishStep.assert_called_with(
            stepid=200, results=RETRY, hidden=False)
        updates.finishBuild.assert_called_with(buildid=13, results=RETRY)

        self.assertEqual(self.master.mq.productions, [
            (('masters', '14', 'stopped'),
             dict(masterid=14, name='other', active=False)),
        ])
Esempio n. 8
0
 def test_completeBuildRequests_stress(self):
     return self.do_test_completeBuildRequests(
         [
             fakedb.BuildRequest(
                 id=id, buildsetid=self.BSID, builderid=self.BLDRID1)
             for id in range(1, 280)
         ] + [
             fakedb.BuildRequestClaim(
                 brid=id, masterid=self.MASTER_ID, claimed_at=1300103810)
             for id in range(1, 280)
         ],
         1300305712, [(id, True, 7, epoch2datetime(1300305712))
                      for id in range(1, 280)],
         brids=list(range(1, 280)))
Esempio n. 9
0
 def test_completeBuildRequests_multiple(self):
     return self.do_test_completeBuildRequests(
         [
             fakedb.BuildRequest(
                 id=44, buildsetid=self.BSID, builderid=self.BLDRID1),
             fakedb.BuildRequestClaim(
                 brid=44, masterid=self.MASTER_ID, claimed_at=1300103810),
             fakedb.BuildRequest(
                 id=45, buildsetid=self.BSID, builderid=self.BLDRID1),
             fakedb.BuildRequestClaim(brid=45,
                                      masterid=self.OTHER_MASTER_ID,
                                      claimed_at=1300103811),
             fakedb.BuildRequest(
                 id=46, buildsetid=self.BSID, builderid=self.BLDRID1),
             fakedb.BuildRequestClaim(
                 brid=46, masterid=self.MASTER_ID, claimed_at=1300103812),
         ],
         1300305712, [
             (44, True, 7, epoch2datetime(1300305712)),
             (45, False, -1, None),
             (46, True, 7, epoch2datetime(1300305712)),
         ],
         brids=[44, 46])
Esempio n. 10
0
 def test_completeBuildRequests_multiple_notmine(self):
     # note that the requests are completed even though they are not mine!
     return self.do_test_completeBuildRequests(
         [
             # two unclaimed requests
             fakedb.BuildRequest(
                 id=44, buildsetid=self.BSID, builderid=self.BLDRID1),
             fakedb.BuildRequest(
                 id=45, buildsetid=self.BSID, builderid=self.BLDRID1),
             # and one claimed by another master
             fakedb.BuildRequest(
                 id=46, buildsetid=self.BSID, builderid=self.BLDRID1),
             fakedb.BuildRequestClaim(brid=46,
                                      masterid=self.OTHER_MASTER_ID,
                                      claimed_at=1300103812),
         ],
         1300305712,
         [
             (44, True, 7, epoch2datetime(1300305712)),
             (45, True, 7, epoch2datetime(1300305712)),
             (46, True, 7, epoch2datetime(1300305712)),
         ],
         brids=[44, 45, 46])
Esempio n. 11
0
    def test_claimBuildRequests_other_master_claim_stress(self):
        yield self.do_test_claimBuildRequests(
            [
                fakedb.BuildRequest(
                    id=id, buildsetid=self.BSID, builderid=self.BLDRID1)
                for id in range(1, 1000)
            ] + [
                fakedb.BuildRequest(
                    id=1000, buildsetid=self.BSID, builderid=self.BLDRID1),
                # the fly in the ointment..
                fakedb.BuildRequestClaim(brid=1000,
                                         masterid=self.OTHER_MASTER_ID,
                                         claimed_at=1300103810),
            ],
            1300305712,
            list(range(1, 1001)),
            expfailure=buildrequests.AlreadyClaimedError)
        results = yield self.db.buildrequests.getBuildRequests(claimed=True)

        # check that [1,1000) were not claimed, and 1000 is still claimed
        self.assertEqual([
            (r['buildrequestid'], r['claimed_by_masterid'], r['claimed_at'])
            for r in results
        ][:10], [(1000, self.OTHER_MASTER_ID, epoch2datetime(1300103810))])
Esempio n. 12
0
    def do_test_unclaimMethod(self, method, expected):
        yield self.insertTestData([
            # 44: a complete build (should not be unclaimed)
            fakedb.BuildRequest(id=44,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=1,
                                results=92,
                                complete_at=self.COMPLETE_AT_EPOCH),
            fakedb.BuildRequestClaim(brid=44,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 45: incomplete build belonging to this incarnation
            fakedb.BuildRequest(id=45,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=0,
                                complete_at=0),
            fakedb.BuildRequestClaim(brid=45,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 46: incomplete build belonging to another master
            fakedb.BuildRequest(id=46,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=0,
                                complete_at=0),
            fakedb.BuildRequestClaim(brid=46,
                                     masterid=self.OTHER_MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 47: unclaimed
            fakedb.BuildRequest(id=47,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=0,
                                complete_at=0),

            # 48: claimed by this master, but recently
            fakedb.BuildRequest(id=48,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=0,
                                complete_at=0),
            fakedb.BuildRequestClaim(brid=48,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH - 50),

            # 49: incomplete old build belonging to another master
            fakedb.BuildRequest(id=49,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=0,
                                complete_at=0),
            fakedb.BuildRequestClaim(brid=49,
                                     masterid=self.OTHER_MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH - 1000),
        ])
        yield method()
        # just select the unclaimed requests
        results = yield self.db.buildrequests.getBuildRequests(claimed=False)

        self.assertEqual(sorted([r['buildrequestid'] for r in results]),
                         sorted(expected))
Esempio n. 13
0
    def test_getBuildRequests_combo(self):
        yield self.insertTestData([
            # 44: everything we want
            fakedb.BuildRequest(id=44,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=1,
                                results=92,
                                complete_at=self.COMPLETE_AT_EPOCH),
            fakedb.BuildRequestClaim(brid=44,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 45: different builderid
            fakedb.BuildRequest(id=45,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID2,
                                complete=1,
                                complete_at=self.COMPLETE_AT_EPOCH),
            fakedb.BuildRequestClaim(brid=45,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 46: incomplete
            fakedb.BuildRequest(id=46,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=0,
                                results=92,
                                complete_at=0),
            fakedb.BuildRequestClaim(brid=46,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 47: unclaimed
            fakedb.BuildRequest(id=47,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=1,
                                results=92,
                                complete_at=self.COMPLETE_AT_EPOCH),

            # 48: claimed by other
            fakedb.BuildRequest(id=48,
                                buildsetid=self.BSID,
                                builderid=self.BLDRID1,
                                complete=1,
                                results=92,
                                complete_at=self.COMPLETE_AT_EPOCH),
            fakedb.BuildRequestClaim(brid=48,
                                     masterid=self.OTHER_MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),

            # 49: different bsid
            fakedb.Buildset(id=self.BSID + 1),
            fakedb.BuildRequest(id=49,
                                buildsetid=self.BSID + 1,
                                builderid=self.BLDRID1,
                                complete=1,
                                results=92,
                                complete_at=self.COMPLETE_AT_EPOCH),
            fakedb.BuildRequestClaim(brid=49,
                                     masterid=self.MASTER_ID,
                                     claimed_at=self.CLAIMED_AT_EPOCH),
        ])
        brlist = yield self.db.buildrequests.getBuildRequests(
            builderid=self.BLDRID1,
            claimed=self.MASTER_ID,
            complete=True,
            bsid=self.BSID)

        self.assertEqual([br['buildrequestid'] for br in brlist], [44])