aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_buildrequests.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_buildrequests.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_buildrequests.py729
1 files changed, 0 insertions, 729 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_buildrequests.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_buildrequests.py
deleted file mode 100644
index a4b1c001..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_buildrequests.py
+++ /dev/null
@@ -1,729 +0,0 @@
-# This file is part of Buildbot. Buildbot is free software: you can
-# redistribute it and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Copyright Buildbot Team Members
-
-import datetime
-import sqlalchemy as sa
-from twisted.trial import unittest
-from twisted.internet import task, defer
-from buildbot.db import buildrequests
-from buildbot.test.util import connector_component, db
-from buildbot.test.fake import fakedb
-from buildbot.util import UTC, epoch2datetime
-
-class TestBuildsetsConnectorComponent(
- connector_component.ConnectorComponentMixin,
- unittest.TestCase):
-
- # test that the datetime translations are done correctly by specifying
- # the epoch timestamp and datetime objects explicitly. These should
- # pass regardless of the local timezone used while running tests!
- CLAIMED_AT = datetime.datetime(1978, 6, 15, 12, 31, 15, tzinfo=UTC)
- CLAIMED_AT_EPOCH = 266761875
- SUBMITTED_AT = datetime.datetime(1979, 6, 15, 12, 31, 15, tzinfo=UTC)
- SUBMITTED_AT_EPOCH = 298297875
- COMPLETE_AT = datetime.datetime(1980, 6, 15, 12, 31, 15, tzinfo=UTC)
- COMPLETE_AT_EPOCH = 329920275
- BSID = 567
- BSID2 = 5670
- MASTER_ID = "set in setUp"
- OTHER_MASTER_ID = "set in setUp"
-
- MASTER_NAME = "testmaster"
- MASTER_INCARN = "pid123-boot456789"
-
- def setUp(self):
- self.MASTER_ID = fakedb.FakeBuildRequestsComponent.MASTER_ID
- self.OTHER_MASTER_ID = self.MASTER_ID + 1111
- d = self.setUpConnectorComponent(
- table_names=[ 'patches', 'changes', 'sourcestamp_changes',
- 'buildsets', 'buildset_properties', 'buildrequests',
- 'objects', 'buildrequest_claims', 'sourcestamps', 'sourcestampsets' ])
-
- def finish_setup(_):
- self.db.buildrequests = \
- buildrequests.BuildRequestsConnectorComponent(self.db)
- self.db.master.getObjectId = lambda : defer.succeed(self.MASTER_ID)
- d.addCallback(finish_setup)
-
- # set up a sourcestamp and buildset for use below
- d.addCallback(lambda _ :
- self.insertTestData([
- fakedb.SourceStampSet(id=234),
- fakedb.SourceStamp(id=234, sourcestampsetid=234),
- fakedb.Object(id=self.MASTER_ID, name="fake master",
- class_name="BuildMaster"),
- fakedb.Object(id=self.OTHER_MASTER_ID, name="other master",
- class_name="BuildMaster"),
- fakedb.Buildset(id=self.BSID, sourcestampsetid=234),
- ]))
-
- return d
-
- def tearDown(self):
- return self.tearDownConnectorComponent()
-
- # tests
-
- def test_getBuildRequest(self):
- # ned fakedb.BuildRequestClaim
- d = self.insertTestData([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID, buildername="bbb",
- complete=1, results=75, priority=7,
- submitted_at=self.SUBMITTED_AT_EPOCH,
- complete_at=self.COMPLETE_AT_EPOCH),
- fakedb.BuildRequestClaim(
- brid=44, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequest(44))
- def check(brdict):
- self.assertEqual(brdict,
- dict(brid=44, buildsetid=self.BSID, buildername="bbb",
- priority=7, claimed=True, mine=True, complete=True,
- results=75, claimed_at=self.CLAIMED_AT,
- submitted_at=self.SUBMITTED_AT,
- complete_at=self.COMPLETE_AT))
- d.addCallback(check)
- return d
-
- def test_getBuildRequest_missing(self):
- d = self.db.buildrequests.getBuildRequest(44)
- def check(brdict):
- self.assertEqual(brdict, None)
- d.addCallback(check)
- return d
-
- def do_test_getBuildRequests_claim_args(self, **kwargs):
- expected = kwargs.pop('expected')
- d = self.insertTestData([
- # 50: claimed by this master
- fakedb.BuildRequest(id=50, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=50, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 51: claimed by another master
- fakedb.BuildRequest(id=51, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=51, objectid=self.OTHER_MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 52: unclaimed
- fakedb.BuildRequest(id=52, buildsetid=self.BSID),
-
- # 53: unclaimed but complete (should not appear for claimed=False)
- fakedb.BuildRequest(id=53, buildsetid=self.BSID, complete=1),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequests(**kwargs))
- def check(brlist):
- self.assertEqual(sorted([ br['brid'] for br in brlist ]),
- sorted(expected))
- d.addCallback(check)
- return d
-
- def test_getBuildRequests_no_claimed_arg(self):
- return self.do_test_getBuildRequests_claim_args(
- expected=[50, 51, 52, 53])
-
- def test_getBuildRequests_claimed_mine(self):
- return self.do_test_getBuildRequests_claim_args(
- claimed="mine",
- expected=[50])
-
- def test_getBuildRequests_claimed_true(self):
- return self.do_test_getBuildRequests_claim_args(
- claimed=True,
- expected=[50, 51])
-
- def test_getBuildRequests_unclaimed(self):
- return self.do_test_getBuildRequests_claim_args(
- claimed=False,
- expected=[52])
-
- def do_test_getBuildRequests_buildername_arg(self, **kwargs):
- expected = kwargs.pop('expected')
- d = self.insertTestData([
- # 8: 'bb'
- fakedb.BuildRequest(id=8, buildsetid=self.BSID, buildername='bb'),
- # 9: 'cc'
- fakedb.BuildRequest(id=9, buildsetid=self.BSID, buildername='cc'),
- # 10: 'cc'
- fakedb.BuildRequest(id=10, buildsetid=self.BSID, buildername='cc'),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequests(**kwargs))
- def check(brlist):
- self.assertEqual(sorted([ br['brid'] for br in brlist ]),
- sorted(expected))
- d.addCallback(check)
- return d
-
- def test_getBuildRequests_buildername_single(self):
- return self.do_test_getBuildRequests_buildername_arg(
- buildername='bb',
- expected=[8])
-
- def test_getBuildRequests_buildername_multiple(self):
- return self.do_test_getBuildRequests_buildername_arg(
- buildername='cc',
- expected=[9,10])
-
- def test_getBuildRequests_buildername_none(self):
- return self.do_test_getBuildRequests_buildername_arg(
- buildername='dd',
- expected=[])
-
- def do_test_getBuildRequests_complete_arg(self, **kwargs):
- expected = kwargs.pop('expected')
- d = self.insertTestData([
- # 70: incomplete
- fakedb.BuildRequest(id=70, buildsetid=self.BSID,
- complete=0, complete_at=None),
- # 80: complete
- fakedb.BuildRequest(id=80, buildsetid=self.BSID,
- complete=1,
- complete_at=self.COMPLETE_AT_EPOCH),
- # 81: complete but no complete_at
- fakedb.BuildRequest(id=81, buildsetid=self.BSID,
- complete=1, complete_at=0),
- # 82: complete_at set but complete is false, so not complete
- fakedb.BuildRequest(id=82, buildsetid=self.BSID,
- complete=0,
- complete_at=self.COMPLETE_AT_EPOCH),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequests(**kwargs))
- def check(brlist):
- self.assertEqual(sorted([ br['brid'] for br in brlist ]),
- sorted(expected))
- d.addCallback(check)
- return d
-
- def test_getBuildRequests_complete_none(self):
- return self.do_test_getBuildRequests_complete_arg(
- expected=[ 70, 80, 81, 82])
-
- def test_getBuildRequests_complete_true(self):
- return self.do_test_getBuildRequests_complete_arg(
- complete=True,
- expected=[ 80, 81 ])
-
- def test_getBuildRequests_complete_false(self):
- return self.do_test_getBuildRequests_complete_arg(
- complete=False,
- expected=[ 70, 82 ])
-
- def test_getBuildRequests_bsid_arg(self):
- d = self.insertTestData([
- # the buildset that we are *not* looking for
- fakedb.Buildset(id=self.BSID+1, sourcestampsetid=234),
-
- fakedb.BuildRequest(id=70, buildsetid=self.BSID,
- complete=0, complete_at=None),
- fakedb.BuildRequest(id=71, buildsetid=self.BSID+1,
- complete=0, complete_at=None),
- fakedb.BuildRequest(id=72, buildsetid=self.BSID,
- complete=0, complete_at=None),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequests(bsid=self.BSID))
- def check(brlist):
- self.assertEqual(sorted([ br['brid'] for br in brlist ]),
- sorted([70, 72]))
- d.addCallback(check)
- return d
-
- def test_getBuildRequests_combo(self):
- d = self.insertTestData([
- # 44: everything we want
- fakedb.BuildRequest(id=44, buildsetid=self.BSID, buildername="bbb",
- complete=1, results=92,
- complete_at=self.COMPLETE_AT_EPOCH),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 45: different buildername
- fakedb.BuildRequest(id=45, buildsetid=self.BSID, buildername="ccc",
- complete=1,
- complete_at=self.COMPLETE_AT_EPOCH),
- fakedb.BuildRequestClaim(brid=45, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 46: incomplete
- fakedb.BuildRequest(id=46, buildsetid=self.BSID, buildername="bbb",
- complete=0, results=92,
- complete_at=0),
- fakedb.BuildRequestClaim(brid=46, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 47: unclaimed
- fakedb.BuildRequest(id=47, buildsetid=self.BSID, buildername="bbb",
- complete=1, results=92,
- complete_at=self.COMPLETE_AT_EPOCH),
-
- # 48: claimed by other
- fakedb.BuildRequest(id=48, buildsetid=self.BSID, buildername="bbb",
- complete=1, results=92,
- complete_at=self.COMPLETE_AT_EPOCH),
- fakedb.BuildRequestClaim(brid=48, objectid=self.OTHER_MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 49: different bsid
- fakedb.Buildset(id=self.BSID+1, sourcestampsetid=234),
- fakedb.BuildRequest(id=49, buildsetid=self.BSID+1,
- buildername="bbb", complete=1, results=92,
- complete_at=self.COMPLETE_AT_EPOCH),
- fakedb.BuildRequestClaim(brid=49, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequests(buildername="bbb",
- claimed="mine", complete=True, bsid=self.BSID))
- def check(brlist):
- self.assertEqual([ br['brid'] for br in brlist ], [ 44 ])
- d.addCallback(check)
- return d
-
- def do_test_getBuildRequests_branch_arg(self, **kwargs):
- expected = kwargs.pop('expected')
- d = self.insertTestData([
- fakedb.BuildRequest(id=70, buildsetid=self.BSID+1),
- fakedb.Buildset(id=self.BSID+1, sourcestampsetid=self.BSID+1),
- fakedb.SourceStampSet(id=self.BSID+1),
- fakedb.SourceStamp(sourcestampsetid=self.BSID+1,
- branch='branch_A'),
-
- fakedb.BuildRequest(id=80, buildsetid=self.BSID+2),
- fakedb.Buildset(id=self.BSID+2, sourcestampsetid=self.BSID+2),
- fakedb.SourceStampSet(id=self.BSID+2),
- fakedb.SourceStamp(sourcestampsetid=self.BSID+2,
- repository='repository_A'),
-
- fakedb.BuildRequest(id=90, buildsetid=self.BSID+3),
- fakedb.Buildset(id=self.BSID+3, sourcestampsetid=self.BSID+3),
- fakedb.SourceStampSet(id=self.BSID+3),
- fakedb.SourceStamp(sourcestampsetid=self.BSID+3,
- branch='branch_A', repository='repository_A'),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.getBuildRequests(**kwargs))
- def check(brlist):
- self.assertEqual(sorted([ br['brid'] for br in brlist ]),
- sorted(expected))
- d.addCallback(check)
- return d
-
- def test_getBuildRequests_branch(self):
- return self.do_test_getBuildRequests_branch_arg(branch='branch_A',
- expected=[70, 90])
-
- def test_getBuildRequests_branch_empty(self):
- return self.do_test_getBuildRequests_branch_arg(branch='absent_branch',
- expected=[])
-
- def test_getBuildRequests_repository(self):
- return self.do_test_getBuildRequests_branch_arg(
- repository='repository_A', expected=[80, 90])
-
- def test_getBuildRequests_repository_empty(self):
- return self.do_test_getBuildRequests_branch_arg(
- repository='absent_repository', expected=[])
-
- def test_getBuildRequests_repository_and_branch(self):
- return self.do_test_getBuildRequests_branch_arg(
- repository='repository_A', branch='branch_A', expected=[90])
-
- def test_getBuildRequests_no_repository_nor_branch(self):
- return self.do_test_getBuildRequests_branch_arg(expected=[70, 80, 90])
-
- def do_test_claimBuildRequests(self, rows, now, brids, expected=None,
- expfailure=None, claimed_at=None):
- clock = task.Clock()
- clock.advance(now)
-
- d = self.insertTestData(rows)
- d.addCallback(lambda _ :
- self.db.buildrequests.claimBuildRequests(brids=brids,
- claimed_at=claimed_at, _reactor=clock))
- def check(brlist):
- self.assertNotEqual(expected, None,
- "unexpected success from claimBuildRequests")
- def thd(conn):
- reqs_tbl = self.db.model.buildrequests
- claims_tbl = self.db.model.buildrequest_claims
- q = sa.select([ reqs_tbl.outerjoin(claims_tbl,
- reqs_tbl.c.id == claims_tbl.c.brid) ])
- results = conn.execute(q).fetchall()
- self.assertEqual(
- sorted([ (r.id, r.claimed_at, r.objectid)
- for r in results ]),
- sorted(expected))
- return self.db.pool.do(thd)
- d.addCallback(check)
- def fail(f):
- if not expfailure:
- raise f
- f.trap(expfailure)
- d.addErrback(fail)
- return d
-
- def test_claimBuildRequests_single(self):
- return self.do_test_claimBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- ], 1300305712, [ 44 ],
- [ (44, 1300305712, self.MASTER_ID) ])
-
- def test_claimBuildRequests_single_explicit_claimed_at(self):
- return self.do_test_claimBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- ], 1300305712, [ 44 ],
- [ (44, 14000000, self.MASTER_ID) ],
- claimed_at=epoch2datetime(14000000))
-
- def test_claimBuildRequests_multiple(self):
- return self.do_test_claimBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequest(id=45, buildsetid=self.BSID),
- fakedb.BuildRequest(id=46, buildsetid=self.BSID),
- ], 1300305712, [ 44, 46 ],
- [
- (44, 1300305712, self.MASTER_ID),
- (45, None, None),
- (46, 1300305712, self.MASTER_ID),
- ])
-
- def test_claimBuildRequests_stress(self):
- return self.do_test_claimBuildRequests([
- fakedb.BuildRequest(id=id, buildsetid=self.BSID)
- for id in xrange(1, 1000)
- ], 1300305713, range(1, 1000),
- [
- (id, 1300305713, self.MASTER_ID)
- for id in xrange(1, 1000)
- ])
-
- def test_claimBuildRequests_other_master_claim(self):
- return self.do_test_claimBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=44,
- objectid=self.OTHER_MASTER_ID,
- claimed_at=1300103810),
- ], 1300305712, [ 44 ],
- expfailure=buildrequests.AlreadyClaimedError)
-
- @db.skip_for_dialect('mysql')
- def test_claimBuildRequests_other_master_claim_stress(self):
- d = self.do_test_claimBuildRequests(
- [ fakedb.BuildRequest(id=id, buildsetid=self.BSID)
- for id in range(1, 1000) ] +
- [
- fakedb.BuildRequest(id=1000, buildsetid=self.BSID),
- # the fly in the ointment..
- fakedb.BuildRequestClaim(brid=1000,
- objectid=self.OTHER_MASTER_ID, claimed_at=1300103810),
- ], 1300305712, range(1, 1001),
- expfailure=buildrequests.AlreadyClaimedError)
- def check(_):
- # check that [1,1000) were not claimed, and 1000 is still claimed
- def thd(conn):
- tbl = self.db.model.buildrequest_claims
- q = tbl.select()
- results = conn.execute(q).fetchall()
- self.assertEqual([ (r.brid, r.objectid, r.claimed_at)
- for r in results ][:10],
- [ (1000, self.OTHER_MASTER_ID, 1300103810) ])
- return self.db.pool.do(thd)
- d.addCallback(check)
- return d
-
- def test_claimBuildRequests_sequential(self):
- now = 120350934
- clock = task.Clock()
- clock.advance(now)
-
- d = self.insertTestData([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequest(id=45, buildsetid=self.BSID),
- ])
- d.addCallback(lambda _ :
- self.db.buildrequests.claimBuildRequests(brids=[44],
- _reactor=clock))
- d.addCallback(lambda _ :
- self.db.buildrequests.claimBuildRequests(brids=[45],
- _reactor=clock))
- def check(brlist):
- def thd(conn):
- reqs_tbl = self.db.model.buildrequests
- claims_tbl = self.db.model.buildrequest_claims
- join = reqs_tbl.outerjoin(claims_tbl,
- reqs_tbl.c.id == claims_tbl.c.brid)
- q = join.select(claims_tbl.c.claimed_at == None)
- results = conn.execute(q).fetchall()
- self.assertEqual(results, [])
- return self.db.pool.do(thd)
- d.addCallback(check)
- return d
-
- def do_test_reclaimBuildRequests(self, rows, now, brids, expected=None,
- expfailure=None):
- clock = task.Clock()
- clock.advance(now)
-
- d = self.insertTestData(rows)
- d.addCallback(lambda _ :
- self.db.buildrequests.reclaimBuildRequests(brids=brids,
- _reactor=clock))
- def check(brlist):
- self.assertNotEqual(expected, None,
- "unexpected success from claimBuildRequests")
- def thd(conn):
- reqs_tbl = self.db.model.buildrequests
- claims_tbl = self.db.model.buildrequest_claims
- q = sa.select([ reqs_tbl.outerjoin(claims_tbl,
- reqs_tbl.c.id == claims_tbl.c.brid) ])
- results = conn.execute(q).fetchall()
- self.assertEqual(
- sorted([ (r.id, r.claimed_at, r.objectid)
- for r in results ]),
- sorted(expected))
- return self.db.pool.do(thd)
- d.addCallback(check)
- def fail(f):
- if not expfailure:
- raise f
- f.trap(expfailure)
- d.addErrback(fail)
- return d
-
- def test_reclaimBuildRequests(self):
- return self.do_test_reclaimBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=1300103810),
- ], 1300305712, [ 44 ],
- # note that the time is updated
- [ (44, 1300305712, self.MASTER_ID) ])
-
- def test_reclaimBuildRequests_fail(self):
- d = self.do_test_reclaimBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=1300103810),
- fakedb.BuildRequest(id=45, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=45, objectid=self.OTHER_MASTER_ID,
- claimed_at=1300103810),
- ], 1300305712, [ 44, 45 ],
- expfailure=buildrequests.AlreadyClaimedError)
- def check(_):
- # check that the time wasn't updated on 44, noting that MySQL does
- # not support this.
- if self.db_engine.dialect.name == 'mysql':
- return
- def thd(conn):
- tbl = self.db.model.buildrequest_claims
- q = tbl.select(order_by=tbl.c.brid)
- results = conn.execute(q).fetchall()
- self.assertEqual([ (r.brid, r.claimed_at, r.objectid)
- for r in results ], [
- (44, 1300103810, self.MASTER_ID),
- (45, 1300103810, self.OTHER_MASTER_ID),
- ])
- return self.db.pool.do(thd)
- d.addCallback(check)
- return d
-
- def do_test_completeBuildRequests(self, rows, now, expected=None,
- expfailure=None, brids=[44],
- complete_at=None):
- clock = task.Clock()
- clock.advance(now)
-
- d = self.insertTestData(rows)
- d.addCallback(lambda _ :
- self.db.buildrequests.completeBuildRequests(brids=brids,
- results=7, complete_at=complete_at,
- _reactor=clock))
- def check(brlist):
- self.assertNotEqual(expected, None,
- "unexpected success from completeBuildRequests")
- def thd(conn):
- tbl = self.db.model.buildrequests
- q = sa.select([ tbl.c.id, tbl.c.complete,
- tbl.c.results, tbl.c.complete_at ])
- results = conn.execute(q).fetchall()
- self.assertEqual(sorted(map(tuple, results)), sorted(expected))
- return self.db.pool.do(thd)
- d.addCallback(check)
- def fail(f):
- if not expfailure:
- raise f
- f.trap(expfailure)
- d.addErrback(fail)
- return d
-
- def test_completeBuildRequests(self):
- return self.do_test_completeBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=1300103810),
- ], 1300305712,
- [ (44, 1, 7, 1300305712) ])
-
- def test_completeBuildRequests_explicit_time(self):
- return self.do_test_completeBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=1300103810),
- ], 1300305712,
- [ (44, 1, 7, 999999) ],
- complete_at=epoch2datetime(999999))
-
- def test_completeBuildRequests_multiple(self):
- return self.do_test_completeBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=1300103810),
- fakedb.BuildRequest(id=45, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=45, objectid=self.OTHER_MASTER_ID,
- claimed_at=1300103811),
- fakedb.BuildRequest(id=46, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=46, objectid=self.MASTER_ID,
- claimed_at=1300103812),
- ], 1300305712,
- [ (44, 1, 7, 1300305712),
- (45, 0, -1, 0),
- (46, 1, 7, 1300305712),
- ], brids=[44, 46])
-
- def test_completeBuildRequests_stress(self):
- return self.do_test_completeBuildRequests([
- fakedb.BuildRequest(id=id, buildsetid=self.BSID)
- for id in range(1, 280)
- ] + [
- fakedb.BuildRequestClaim(brid=id, objectid=self.MASTER_ID,
- claimed_at=1300103810)
- for id in range(1, 280)
- ], 1300305712,
- [ (id, 1, 7, 1300305712)
- for id in range(1, 280)
- ], brids=range(1, 280))
-
- 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),
- fakedb.BuildRequest(id=45, buildsetid=self.BSID),
- # and one claimed by another master
- fakedb.BuildRequest(id=46, buildsetid=self.BSID),
- fakedb.BuildRequestClaim(brid=46, objectid=self.OTHER_MASTER_ID,
- claimed_at=1300103812),
- ], 1300305712,
- [ (44, 1, 7, 1300305712),
- (45, 1, 7, 1300305712),
- (46, 1, 7, 1300305712), ],
- brids=[44, 45, 46])
-
- def test_completeBuildRequests_already_completed(self):
- return self.do_test_completeBuildRequests([
- fakedb.BuildRequest(id=44, buildsetid=self.BSID,
- complete=1, complete_at=1300104190),
- ], 1300305712,
- expfailure=buildrequests.NotClaimedError)
-
- def test_completeBuildRequests_no_such(self):
- return self.do_test_completeBuildRequests([
- fakedb.BuildRequest(id=45, buildsetid=self.BSID),
- ], 1300305712,
- expfailure=buildrequests.NotClaimedError)
-
- def do_test_unclaimMethod(self, method, expected):
- d = self.insertTestData([
- # 44: a complete build (should not be unclaimed)
- fakedb.BuildRequest(id=44, buildsetid=self.BSID,
- complete=1, results=92,
- complete_at=self.COMPLETE_AT_EPOCH),
- fakedb.BuildRequestClaim(brid=44, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 45: incomplete build belonging to this incarnation
- fakedb.BuildRequest(id=45, buildsetid=self.BSID,
- complete=0, complete_at=0),
- fakedb.BuildRequestClaim(brid=45, objectid=self.MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 46: incomplete build belonging to another master
- fakedb.BuildRequest(id=46, buildsetid=self.BSID,
- complete=0, complete_at=0),
- fakedb.BuildRequestClaim(brid=46, objectid=self.OTHER_MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH),
-
- # 47: unclaimed
- fakedb.BuildRequest(id=47, buildsetid=self.BSID,
- complete=0, complete_at=0),
-
- # 48: claimed by this master, but recently
- fakedb.BuildRequest(id=48, buildsetid=self.BSID,
- complete=0, complete_at=0),
- fakedb.BuildRequestClaim(brid=48, objectid=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,
- complete=0, complete_at=0),
- fakedb.BuildRequestClaim(brid=49, objectid=self.OTHER_MASTER_ID,
- claimed_at=self.CLAIMED_AT_EPOCH - 1000),
- ])
- d.addCallback(lambda _ : method())
- def check(brlist):
- def thd(conn):
- # just select the unclaimed requests
- reqs_tbl = self.db.model.buildrequests
- claims_tbl = self.db.model.buildrequest_claims
- join = reqs_tbl.outerjoin(claims_tbl,
- reqs_tbl.c.id == claims_tbl.c.brid)
- q = sa.select([ reqs_tbl.c.id ],
- from_obj=[ join ],
- whereclause=claims_tbl.c.claimed_at == None)
- results = conn.execute(q).fetchall()
- self.assertEqual(sorted([ r.id for r in results ]),
- sorted(expected))
- return self.db.pool.do(thd)
- d.addCallback(check)
- return d
-
- def test_unclaimExpiredRequests(self):
- clock = task.Clock()
- clock.advance(self.CLAIMED_AT_EPOCH)
-
- meth = self.db.buildrequests.unclaimExpiredRequests
- return self.do_test_unclaimMethod(
- lambda : meth(100, _reactor=clock),
- [47, 49])
-
- def test_unclaimBuildRequests(self):
- to_unclaim = [
- 44, # completed -> unclaimed anyway
- 45, # incomplete -> unclaimed
- 46, # from another master -> not unclaimed
- 47, # unclaimed -> still unclaimed
- 48, # claimed -> unclaimed
- 49, # another master -> not unclaimed
- 50 # no such buildrequest -> no error
- ]
- return self.do_test_unclaimMethod(
- lambda : self.db.buildrequests.unclaimBuildRequests(to_unclaim),
- [44, 45, 47, 48])
-