aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_changes.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_changes.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_changes.py522
1 files changed, 0 insertions, 522 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_changes.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_changes.py
deleted file mode 100644
index f7427875..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_changes.py
+++ /dev/null
@@ -1,522 +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 mock
-import pprint
-import sqlalchemy as sa
-from twisted.trial import unittest
-from twisted.internet import defer, task
-from buildbot.changes.changes import Change
-from buildbot.db import changes
-from buildbot.test.util import connector_component
-from buildbot.test.fake import fakedb
-from buildbot.util import epoch2datetime
-
-class TestChangesConnectorComponent(
- connector_component.ConnectorComponentMixin,
- unittest.TestCase):
-
- def setUp(self):
- d = self.setUpConnectorComponent(
- table_names=['changes', 'change_files',
- 'change_properties', 'scheduler_changes', 'objects',
- 'sourcestampsets', 'sourcestamps', 'sourcestamp_changes',
- 'patches', 'change_users', 'users'])
-
- def finish_setup(_):
- self.db.changes = changes.ChangesConnectorComponent(self.db)
- d.addCallback(finish_setup)
-
- return d
-
- def tearDown(self):
- return self.tearDownConnectorComponent()
-
- # common sample data
-
- change13_rows = [
- fakedb.Change(changeid=13, author="dustin", comments="fix spelling",
- is_dir=0, branch="master", revision="deadbeef",
- when_timestamp=266738400, revlink=None, category=None,
- repository='', codebase='', project=''),
-
- fakedb.ChangeFile(changeid=13, filename='master/README.txt'),
- fakedb.ChangeFile(changeid=13, filename='slave/README.txt'),
-
- fakedb.ChangeProperty(changeid=13, property_name='notest',
- property_value='["no","Change"]'),
- ]
-
- change14_rows = [
- fakedb.Change(changeid=14, author="warner", comments="fix whitespace",
- is_dir=0, branch="warnerdb", revision="0e92a098b",
- when_timestamp=266738404, revlink='http://warner/0e92a098b',
- category='devel', repository='git://warner', codebase='mainapp',
- project='Buildbot'),
-
- fakedb.ChangeFile(changeid=14, filename='master/buildbot/__init__.py'),
- ]
-
- change14_dict = {
- 'changeid': 14,
- 'author': u'warner',
- 'branch': u'warnerdb',
- 'category': u'devel',
- 'comments': u'fix whitespace',
- 'files': [u'master/buildbot/__init__.py'],
- 'is_dir': 0,
- 'project': u'Buildbot',
- 'properties': {},
- 'repository': u'git://warner',
- 'codebase': u'mainapp',
- 'revision': u'0e92a098b',
- 'revlink': u'http://warner/0e92a098b',
- 'when_timestamp': epoch2datetime(266738404),
- }
-
- def change14(self):
- c = Change(**dict(
- category='devel',
- isdir=0,
- repository=u'git://warner',
- codebase=u'mainapp',
- who=u'warner',
- when=266738404,
- comments=u'fix whitespace',
- project=u'Buildbot',
- branch=u'warnerdb',
- revlink=u'http://warner/0e92a098b',
- properties={},
- files=[u'master/buildbot/__init__.py'],
- revision=u'0e92a098b'))
- c.number = 14
- return c
-
- # assertions
-
- def assertChangesEqual(self, ca, cb):
- ok = True
- ok = ok and ca.number == cb.number
- ok = ok and ca.who == cb.who
- ok = ok and sorted(ca.files) == sorted(cb.files)
- ok = ok and ca.comments == cb.comments
- ok = ok and bool(ca.isdir) == bool(cb.isdir)
- ok = ok and ca.revision == cb.revision
- ok = ok and ca.when == cb.when
- ok = ok and ca.branch == cb.branch
- ok = ok and ca.category == cb.category
- ok = ok and ca.revlink == cb.revlink
- ok = ok and ca.properties == cb.properties
- ok = ok and ca.repository == cb.repository
- ok = ok and ca.codebase == cb.codebase
- ok = ok and ca.project == cb.project
- if not ok:
- def printable(c):
- return pprint.pformat(c.__dict__)
- self.fail("changes do not match; expected\n%s\ngot\n%s" %
- (printable(ca), printable(cb)))
-
- # tests
-
- def test_getChange(self):
- d = self.insertTestData(self.change14_rows)
- def get14(_):
- return self.db.changes.getChange(14)
- d.addCallback(get14)
- def check14(chdict):
- self.assertEqual(chdict, self.change14_dict)
- d.addCallback(check14)
- return d
-
- def test_Change_fromChdict_with_chdict(self):
- # test that the chdict getChange returns works with Change.fromChdict
- d = Change.fromChdict(mock.Mock(), self.change14_dict)
- def check(c):
- self.assertChangesEqual(c, self.change14())
- d.addCallback(check)
- return d
-
- def test_getChange_missing(self):
- d = defer.succeed(None)
- def get14(_):
- return self.db.changes.getChange(14)
- d.addCallback(get14)
- def check14(chdict):
- self.failUnless(chdict is None)
- d.addCallback(check14)
- return d
-
- def test_getLatestChangeid(self):
- d = self.insertTestData(self.change13_rows)
- def get(_):
- return self.db.changes.getLatestChangeid()
- d.addCallback(get)
- def check(changeid):
- self.assertEqual(changeid, 13)
- d.addCallback(check)
- return d
-
- def test_getLatestChangeid_empty(self):
- d = defer.succeed(None)
- def get(_):
- return self.db.changes.getLatestChangeid()
- d.addCallback(get)
- def check(changeid):
- self.assertEqual(changeid, None)
- d.addCallback(check)
- return d
-
- def test_addChange(self):
- d = self.db.changes.addChange(
- author=u'dustin',
- files=[u'master/LICENSING.txt', u'slave/LICENSING.txt'],
- comments=u'fix spelling',
- is_dir=0,
- revision=u'2d6caa52',
- when_timestamp=epoch2datetime(266738400),
- branch=u'master',
- category=None,
- revlink=None,
- properties={u'platform': (u'linux', 'Change')},
- repository=u'',
- codebase=u'',
- project=u'')
- # check all of the columns of the four relevant tables
- def check_change(changeid):
- def thd(conn):
- self.assertEqual(changeid, 1)
- r = conn.execute(self.db.model.changes.select())
- r = r.fetchall()
- self.assertEqual(len(r), 1)
- self.assertEqual(r[0].changeid, changeid)
- self.assertEqual(r[0].author, 'dustin')
- self.assertEqual(r[0].comments, 'fix spelling')
- self.assertFalse(r[0].is_dir)
- self.assertEqual(r[0].branch, 'master')
- self.assertEqual(r[0].revision, '2d6caa52')
- self.assertEqual(r[0].when_timestamp, 266738400)
- self.assertEqual(r[0].category, None)
- self.assertEqual(r[0].repository, '')
- self.assertEqual(r[0].codebase, '')
- self.assertEqual(r[0].project, '')
- return self.db.pool.do(thd)
- d.addCallback(check_change)
- def check_change_files(_):
- def thd(conn):
- query = self.db.model.change_files.select()
- query.where(self.db.model.change_files.c.changeid == 1)
- query.order_by(self.db.model.change_files.c.filename)
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 2)
- self.assertEqual(r[0].filename, 'master/LICENSING.txt')
- self.assertEqual(r[1].filename, 'slave/LICENSING.txt')
- return self.db.pool.do(thd)
- d.addCallback(check_change_files)
- def check_change_properties(_):
- def thd(conn):
- query = self.db.model.change_properties.select()
- query.where(self.db.model.change_properties.c.changeid == 1)
- query.order_by(self.db.model.change_properties.c.property_name)
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 1)
- self.assertEqual(r[0].property_name, 'platform')
- self.assertEqual(r[0].property_value, '["linux", "Change"]')
- return self.db.pool.do(thd)
- d.addCallback(check_change_properties)
- def check_change_users(_):
- def thd(conn):
- query = self.db.model.change_users.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 0)
- return self.db.pool.do(thd)
- d.addCallback(check_change_users)
- return d
-
- def test_addChange_when_timestamp_None(self):
- clock = task.Clock()
- clock.advance(1239898353)
- d = self.db.changes.addChange(
- author=u'dustin',
- files=[],
- comments=u'fix spelling',
- is_dir=0,
- revision=u'2d6caa52',
- when_timestamp=None,
- branch=u'master',
- category=None,
- revlink=None,
- properties={},
- repository=u'',
- codebase=u'',
- project=u'',
- _reactor=clock)
- # check all of the columns of the four relevant tables
- def check_change(changeid):
- def thd(conn):
- r = conn.execute(self.db.model.changes.select())
- r = r.fetchall()
- self.assertEqual(len(r), 1)
- self.assertEqual(r[0].changeid, changeid)
- self.assertEqual(r[0].when_timestamp, 1239898353)
- return self.db.pool.do(thd)
- d.addCallback(check_change)
- def check_change_files(_):
- def thd(conn):
- query = self.db.model.change_files.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 0)
- return self.db.pool.do(thd)
- d.addCallback(check_change_files)
- def check_change_properties(_):
- def thd(conn):
- query = self.db.model.change_properties.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 0)
- return self.db.pool.do(thd)
- d.addCallback(check_change_properties)
- def check_change_users(_):
- def thd(conn):
- query = self.db.model.change_users.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 0)
- return self.db.pool.do(thd)
- d.addCallback(check_change_users)
- return d
-
- def test_addChange_with_uid(self):
- d = self.insertTestData([
- fakedb.User(uid=1, identifier="one"),
- ])
- d.addCallback(lambda _ :
- self.db.changes.addChange(
- author=u'dustin',
- files=[],
- comments=u'fix spelling',
- is_dir=0,
- revision=u'2d6caa52',
- when_timestamp=epoch2datetime(1239898353),
- branch=u'master',
- category=None,
- revlink=None,
- properties={},
- repository=u'',
- codebase=u'',
- project=u'',
- uid=1))
- # check all of the columns of the five relevant tables
- def check_change(changeid):
- def thd(conn):
- r = conn.execute(self.db.model.changes.select())
- r = r.fetchall()
- self.assertEqual(len(r), 1)
- self.assertEqual(r[0].changeid, changeid)
- self.assertEqual(r[0].when_timestamp, 1239898353)
- return self.db.pool.do(thd)
- d.addCallback(check_change)
- def check_change_files(_):
- def thd(conn):
- query = self.db.model.change_files.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 0)
- return self.db.pool.do(thd)
- d.addCallback(check_change_files)
- def check_change_properties(_):
- def thd(conn):
- query = self.db.model.change_properties.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 0)
- return self.db.pool.do(thd)
- d.addCallback(check_change_properties)
- def check_change_users(_):
- def thd(conn):
- query = self.db.model.change_users.select()
- r = conn.execute(query)
- r = r.fetchall()
- self.assertEqual(len(r), 1)
- self.assertEqual(r[0].changeid, 1)
- self.assertEqual(r[0].uid, 1)
- return self.db.pool.do(thd)
- d.addCallback(check_change_users)
- return d
-
- def test_getChangeUids_missing(self):
- d = self.db.changes.getChangeUids(1)
- def check(res):
- self.assertEqual(res, [])
- d.addCallback(check)
- return d
-
- def test_getChangeUids_found(self):
- d = self.insertTestData(self.change14_rows + [
- fakedb.User(uid=1),
- fakedb.ChangeUser(changeid=14, uid=1),
- ])
- d.addCallback(lambda _ : self.db.changes.getChangeUids(14))
- def check(res):
- self.assertEqual(res, [1])
- d.addCallback(check)
- return d
-
- def test_getChangeUids_multi(self):
- d = self.insertTestData(self.change14_rows + self.change13_rows + [
- fakedb.User(uid=1, identifier="one"),
- fakedb.User(uid=2, identifier="two"),
- fakedb.User(uid=99, identifier="nooo"),
- fakedb.ChangeUser(changeid=14, uid=1),
- fakedb.ChangeUser(changeid=14, uid=2),
- fakedb.ChangeUser(changeid=13, uid=99), # not selected
- ])
- d.addCallback(lambda _ : self.db.changes.getChangeUids(14))
- def check(res):
- self.assertEqual(sorted(res), [1, 2])
- d.addCallback(check)
- return d
-
- 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]
- r = conn.execute(sa.select([tbl.c.changeid]))
- results[tbl_name] = sorted([ r[0] for r in r.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
-
- def test_pruneChanges_lots(self):
- d = self.insertTestData([
- fakedb.Change(changeid=n)
- for n in xrange(1, 151)
- ])
-
- d.addCallback(lambda _ : self.db.changes.pruneChanges(1))
- 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]
- r = conn.execute(sa.select([tbl.c.changeid]))
- results[tbl_name] = len([ r for r in r.fetchall() ])
- self.assertEqual(results, {
- 'scheduler_changes': 0,
- 'sourcestamp_changes': 0,
- 'change_files': 0,
- 'change_properties': 0,
- 'changes': 1,
- })
- return self.db.pool.do(thd)
- d.addCallback(check)
- return d
-
- def test_pruneChanges_None(self):
- d = self.insertTestData(self.change13_rows)
-
- d.addCallback(lambda _ : self.db.changes.pruneChanges(None))
- def check(_):
- def thd(conn):
- tbl = self.db.model.changes
- r = conn.execute(tbl.select())
- self.assertEqual([ row.changeid for row in r.fetchall() ],
- [ 13 ])
- return self.db.pool.do(thd)
- d.addCallback(check)
- return d
-
- def test_getRecentChanges_subset(self):
- d = self.insertTestData([
- fakedb.Change(changeid=8),
- fakedb.Change(changeid=9),
- fakedb.Change(changeid=10),
- fakedb.Change(changeid=11),
- fakedb.Change(changeid=12),
- ] + self.change13_rows + self.change14_rows)
- d.addCallback(lambda _ :
- self.db.changes.getRecentChanges(5))
- def check(changes):
- changeids = [ c['changeid'] for c in changes ]
- self.assertEqual(changeids, [10, 11, 12, 13, 14])
- d.addCallback(check)
- return d
-
- def test_getRecentChanges_empty(self):
- d = defer.succeed(None)
- d.addCallback(lambda _ :
- self.db.changes.getRecentChanges(5))
- def check(changes):
- changeids = [ c['changeid'] for c in changes ]
- self.assertEqual(changeids, [])
- d.addCallback(check)
- return d
-
- def test_getRecentChanges_missing(self):
- d = self.insertTestData(self.change13_rows + self.change14_rows)
- d.addCallback(lambda _ :
- self.db.changes.getRecentChanges(5))
- def check(changes):
- # requested 5, but only got 2
- changeids = [ c['changeid'] for c in changes ]
- self.assertEqual(changeids, [13, 14])
- # double-check that they have .files, etc.
- self.assertEqual(sorted(changes[0]['files']),
- sorted(['master/README.txt', 'slave/README.txt']))
- self.assertEqual(changes[0]['properties'],
- { 'notest' : ('no', 'Change') })
- d.addCallback(check)
- return d