Beispiel #1
0
 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)
Beispiel #2
0
    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)
Beispiel #3
0
 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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
  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)
Beispiel #7
0
    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)])
Beispiel #8
0
  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)
Beispiel #9
0
  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)
Beispiel #10
0
 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)
Beispiel #11
0
 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)