def testMultipleSuccess(self): build_history = { 'm1': { 'b1': [ lkgr_lib.Build(1, self.fail, 1), lkgr_lib.Build(2, self.good, 2), lkgr_lib.Build(3, self.fail, 3), lkgr_lib.Build(4, self.good, 4), lkgr_lib.Build(5, self.good, 5) ] }, 'm2': { 'b2': [ lkgr_lib.Build(1, self.fail, 1), lkgr_lib.Build(2, self.fail, 2), lkgr_lib.Build(3, self.good, 3), lkgr_lib.Build(4, self.good, 4), lkgr_lib.Build(5, self.good, 5) ] } } revisions = [1, 2, 3, 4, 5] candidate = lkgr_lib.FindLKGRCandidate(build_history, revisions, self.keyfunc, self.status_stub) self.assertEquals(candidate, 5)
def testSortsRevisions(self): build_history = { 'master1': { 'builder1': [ lkgr_lib.Build(121, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab'), lkgr_lib.Build(123, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'), lkgr_lib.Build(122, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac'), ] } } expected_revisions = [ 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac', ] repo = mock.MagicMock() def mock_repo_sort(history, keyfunc=None): return sorted(history, key=keyfunc) repo.sort = mock.MagicMock(side_effect=mock_repo_sort) _, actual_revisions = lkgr_lib.CollateRevisionHistory( build_history, repo) self.assertEquals(actual_revisions, expected_revisions)
def testModerateFailsTwo(self): build_history = { 'm1': {'b1': [lkgr_lib.Build(1, self.fail, 1)]}, 'm2': {'b2': [lkgr_lib.Build(1, self.good, 1)]}} revisions = [1] candidate = lkgr_lib.FindLKGRCandidate( build_history, revisions, self.keyfunc, self.status_stub) self.assertEquals(candidate, None)
def testSuccess(self): try: f = tempfile.NamedTemporaryFile(suffix='.json', delete=False) builds = { 'master1': { 'builder1': [ lkgr_lib.Build(123, lkgr_lib.STATUS.SUCCESS, '01234567'), ] } } expected_contents = { 'builds': { 'master1': { 'builder1': [ [123, lkgr_lib.STATUS.SUCCESS, '01234567'], ] } }, 'version': lkgr_lib._BUILD_DATA_VERSION, } lkgr_lib.DumpBuilds(builds, f.name) with f: actual_contents = json.load(f) self.assertEquals(actual_contents, expected_contents) finally: if os.path.exists(f.name): # pragma: no branch os.unlink(f.name)
def testSuccess(self): try: f = tempfile.NamedTemporaryFile(suffix='.json', delete=False) with f: f.write( json.dumps({ 'builds': { 'master1': { 'builder1': [[123, lkgr_lib.STATUS.SUCCESS, '01234567']] }, }, 'version': lkgr_lib._BUILD_DATA_VERSION, })) expected_builds = { 'master1': { 'builder1': [ lkgr_lib.Build(123, lkgr_lib.STATUS.SUCCESS, '01234567'), ] } } actual_builds = lkgr_lib.LoadBuilds(f.name) self.assertEquals(actual_builds, expected_builds) finally: if os.path.exists(f.name): # pragma: no branch os.unlink(f.name)
def testShortRevision(self, mocked_fetch): build_data = { '1': { 'currentStep': None, 'properties': [ ('got_revision', '0123456789abcdef', 'Annotation(bot_update)'), ], }, '2': { 'currentStep': None, 'properties': [ ('got_revision', '0123456789abcdef0123456789abcdef01234567', 'Annotation(bot_update)'), ], }, } expected_builds = [ lkgr_lib.Build('2', lkgr_lib.STATUS.SUCCESS, '0123456789abcdef0123456789abcdef01234567'), ] mocked_fetch.return_value = build_data actual_builds = lkgr_lib.FetchBuildbotBuildsForBuilder('master1', 'builder1') self.assertEquals(actual_builds, expected_builds)
def testFetchBuildFailed(self, mocked_fetch): response_pb = rpc_pb2.SearchBuildsResponse() build_pb = response_pb.builds.add() build_pb.number = 123 build_pb.status = common_pb2.FAILURE build_pb.input.gitiles_commit.id = 'a' * 40 mocked_fetch.return_value = response_pb builds = lkgr_lib.FetchBuildbucketBuildsForBuilder( 'project1/bucket1', 'builder1') self.assertEquals( builds, [lkgr_lib.Build(123, lkgr_lib.STATUS.FAILURE, 'a' * 40)])
def testSortsBuildHistories(self): build_history = { 'master1': { 'builder1': [ lkgr_lib.Build(121, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab'), lkgr_lib.Build(123, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'), lkgr_lib.Build(122, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac'), ] } } expected_builds = [ lkgr_lib.Build(123, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'), lkgr_lib.Build(121, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab'), lkgr_lib.Build(122, lkgr_lib.STATUS.SUCCESS, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac'), ] repo = mock.MagicMock() def mock_repo_sort(history, keyfunc=None): return sorted(history, key=keyfunc) repo.sort = mock.MagicMock(side_effect=mock_repo_sort) collated_build_history, _ = lkgr_lib.CollateRevisionHistory( build_history, repo) actual_builds = ( collated_build_history.get('master1', {}).get('builder1', [])) self.assertEquals(actual_builds, expected_builds)
def testNoRevisionProperty(self, mocked_fetch): build_data = { # A running build w/o a revision shouldn't be included in the result. '1': { 'currentStep': True, 'steps': [], 'results': 21, }, # A failed build w/o a revision shouldn't be included in the result. '2': { 'currentStep': None, 'results': 21, }, # A successful build w/o a revision either via properties or # sourceStamp shouldn't be included in the result. '3': { 'currentStep': None, 'results': 0, }, # A successful build w/o a revision via properties but with a # revision in sourceStamp should be included in the result. '4': { 'currentStep': None, 'results': 0, 'sourceStamp': { 'revision': '0123456789abcdef0123456789abcdef01234567', }, }, } expected_builds = [ lkgr_lib.Build('4', lkgr_lib.STATUS.SUCCESS, '0123456789abcdef0123456789abcdef01234567'), ] mocked_fetch.return_value = build_data actual_builds = lkgr_lib.FetchBuildbotBuildsForBuilder('master1', 'builder1') self.assertEquals(actual_builds, expected_builds)
def testSimpleSucceeds(self): build_history = {'m1': {'b1': [lkgr_lib.Build(1, self.good, 1)]}} revisions = [1] candidate = lkgr_lib.FindLKGRCandidate(build_history, revisions, self.keyfunc, self.status_stub) self.assertEquals(candidate, 1)
def testFetchSucceeded(self, mocked_fetch): mocked_fetch.return_value = { 1: {'results': 0, 'properties': [('got_revision', 'a' * 40)]}, } builds = lkgr_lib.FetchBuildbotBuildsForBuilder('master1', 'builder1') self.assertIn(lkgr_lib.Build(1, lkgr_lib.STATUS.SUCCESS, 'a' * 40), builds)