Skip to content

Commit

Permalink
add db.buildsets.completeBuildset
Browse files Browse the repository at this point in the history
  • Loading branch information
djmitche committed May 2, 2011
1 parent cc79df7 commit af9e10b
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 7 deletions.
31 changes: 31 additions & 0 deletions master/buildbot/db/buildsets.py
Expand Up @@ -100,6 +100,37 @@ def thd(conn):
return (bsid, brids)
return self.db.pool.do(thd)

def completeBuildset(self, bsid, results, _reactor=reactor):
"""
Complete a buildset, marking it with the given C{results} and setting
its C{completed_at} to the current time.
@param bsid: buildset ID to complete
@type bsid: integer
@param results: integer result code
@type results: integer
@param _reactor: reactor to use (for testing)
@returns: Deferred
@raises KeyError: if the row does not exist or is already complete
"""
def thd(conn):
tbl = self.db.model.buildsets

q = tbl.update(whereclause=(
(tbl.c.id == bsid) &
((tbl.c.complete == None) | (tbl.c.complete != 1))))
res = conn.execute(q,
complete=1,
results=results,
complete_at=_reactor.seconds())

if res.rowcount != 1:
raise KeyError
return self.db.pool.do(thd)

def getBuildset(self, bsid):
"""
Get a dictionary representing the given buildset, or None
Expand Down
58 changes: 51 additions & 7 deletions master/buildbot/test/unit/test_db_buildsets.py
Expand Up @@ -26,6 +26,10 @@ class TestBuildsetsConnectorComponent(
unittest.TestCase):

def setUp(self):
self.now = 9272359
self.clock = task.Clock()
self.clock.advance(self.now)

d = self.setUpConnectorComponent(
table_names=[ 'patches', 'changes', 'sourcestamp_changes',
'buildsets', 'buildset_properties', 'schedulers',
Expand All @@ -48,15 +52,11 @@ def tearDown(self):
# tests

def test_addBuildset_simple(self):
now = 9272359
clock = task.Clock()
clock.advance(now)

d = defer.succeed(None)
d.addCallback(lambda _ :
self.db.buildsets.addBuildset(ssid=234, reason='because',
properties={}, builderNames=['bldr'], external_idstring='extid',
_reactor=clock))
_reactor=self.clock))
def check((bsid, brids)):
def thd(conn):
# we should only have one brid
Expand All @@ -68,7 +68,7 @@ def thd(conn):
row.sourcestampid, row.complete, row.complete_at,
row.submitted_at, row.results) for row in r.fetchall() ]
self.assertEqual(rows,
[ ( bsid, 'extid', 'because', 234, 0, None, now, -1) ])
[ ( bsid, 'extid', 'because', 234, 0, None, self.now, -1) ])

# and one buildrequests row
r = conn.execute(self.db.model.buildrequests.select())
Expand All @@ -80,7 +80,7 @@ def thd(conn):
for row in r.fetchall() ]
self.assertEqual(rows,
[ ( bsid, brids['bldr'], 'bldr', 0, 0, None, None, 0,
-1, now, None) ])
-1, self.now, None) ])
return self.db.pool.do(thd)
d.addCallback(check)
return d
Expand Down Expand Up @@ -397,3 +397,47 @@ def check(bsdictlist):
d.addCallback(check)
return d

def test_completeBuildset(self):
d = self.insert_test_getBuildsets_data()
d.addCallback(lambda _ :
self.db.buildsets.completeBuildset(bsid=91, results=6,
_reactor=self.clock))
def check(_):
def thd(conn):
# should see one buildset row
r = conn.execute(self.db.model.buildsets.select())
rows = [ (row.id, row.complete, row.complete_at, row.results)
for row in r.fetchall() ]
self.assertEqual(sorted(rows), sorted([
( 91, 1, self.now, 6),
( 92, 1, 298297876, 7) ]))
return self.db.pool.do(thd)
d.addCallback(check)
return d

def test_completeBuildset_already_completed(self):
d = self.insert_test_getBuildsets_data()
d.addCallback(lambda _ :
self.db.buildsets.completeBuildset(bsid=92, results=6,
_reactor=self.clock))
def cb(_):
self.fail("should not succeed")
def eb(f):
f.trap(KeyError)
# pass
d.addCallbacks(cb, eb)
return d

def test_completeBuildset_missing(self):
d = self.insert_test_getBuildsets_data()
d.addCallback(lambda _ :
self.db.buildsets.completeBuildset(bsid=93, results=6,
_reactor=self.clock))
def cb(_):
self.fail("should not succeed")
def eb(f):
f.trap(KeyError)
# pass
d.addCallbacks(cb, eb)
return d

0 comments on commit af9e10b

Please sign in to comment.