コード例 #1
0
    def _DownloadBuildData(self, master_name, builder_name, build_number):
        """Downloads build data and returns a WfBuild instance."""
        build = WfBuild.Get(master_name, builder_name, build_number)
        if not build:
            build = WfBuild.Create(master_name, builder_name, build_number)

        # Cache the data to avoid pulling from master again.
        if self._BuildDataNeedUpdating(build):
            # Retrieve build data from build archive first.
            build.data = buildbot.GetBuildDataFromArchive(
                build.master_name, build.builder_name, build.build_number,
                self.HTTP_CLIENT_NO_404_ERROR)

            if build.data is None:
                if not lock_util.WaitUntilDownloadAllowed(
                        master_name):  # pragma: no cover
                    raise pipeline.Retry('Too many download from %s' %
                                         master_name)

                # Retrieve build data from build master.
                build.data = buildbot.GetBuildDataFromBuildMaster(
                    build.master_name, build.builder_name, build.build_number,
                    self.HTTP_CLIENT_LOGGING_ERRORS)

            build.last_crawled_time = datetime.utcnow()
            build.put()

        return build
コード例 #2
0
def DownloadBuildData(master_name, builder_name, build_number):
    """Downloads build data and returns a WfBuild instance."""
    build = WfBuild.Get(master_name, builder_name, build_number)
    if not build:
        build = WfBuild.Create(master_name, builder_name, build_number)

    # Cache the data to avoid pulling from master again.
    if _BuildDataNeedUpdating(build):
        use_cbe = waterfall_config.GetDownloadBuildDataSettings().get(
            'use_chrome_build_extract')

        if use_cbe:
            # Retrieve build data from build archive first.
            build.data = buildbot.GetBuildDataFromArchive(
                master_name, builder_name, build_number,
                HTTP_CLIENT_NO_404_ERROR)

            if build.data:
                build.data_source = CHROME_BUILD_EXTRACT
            elif not lock_util.WaitUntilDownloadAllowed(
                    master_name):  # pragma: no cover
                return None

        if not build.data or not use_cbe:
            # Retrieve build data from build master.
            build.data = buildbot.GetBuildDataFromBuildMaster(
                master_name, builder_name, build_number,
                HTTP_CLIENT_LOGGING_ERRORS)
            build.data_source = BUILDBOT_MASTER

        build.last_crawled_time = time_util.GetUTCNow()
        build.put()

    return build
コード例 #3
0
 def testGetBuildDataFromBuildMasterFailure(self):
     master_name = 'a'
     builder_name = 'b c'
     build_number = 1
     expected_url = 'https://build.chromium.org/p/a/json/builders/b%20c/builds/1'
     http_client = DummyHttpClient(404, 'Not Found')
     data = buildbot.GetBuildDataFromBuildMaster(master_name, builder_name,
                                                 build_number, http_client)
     self.assertIsNone(data)
     self.assertEqual(1, len(http_client.requests))
     self.assertEqual(expected_url, http_client.requests[0])
コード例 #4
0
 def testGetBuildDataFromBuildMasterSuccess(self):
     master_name = 'a'
     builder_name = 'b c'
     build_number = 1
     expected_url = 'https://build.chromium.org/p/a/json/builders/b%20c/builds/1'
     http_client = DummyHttpClient(200, 'abc')
     data = buildbot.GetBuildDataFromBuildMaster(master_name, builder_name,
                                                 build_number, http_client)
     self.assertEqual(http_client.response_content, data)
     self.assertEqual(1, len(http_client.requests))
     self.assertEqual(expected_url, http_client.requests[0])
コード例 #5
0
  def testGetBuildDataFromBuildMasterSuccess(self, mock_fn):
    master_name = 'a'
    builder_name = 'b c'
    build_number = 1

    response = {
      'data': base64.b64encode('response')
    }
    mock_fn.return_value = json.dumps(response)

    self.assertEqual('response',
                     buildbot.GetBuildDataFromBuildMaster(
                         master_name, builder_name, build_number,
                         self.http_client))
コード例 #6
0
    def _ReferredBuildExceptionedOut(self, master_name, builder_name,
                                     build_number, http_client):
        """Checks if the build had exception, if so don't run the step."""
        json_data = buildbot.GetBuildDataFromBuildMaster(
            master_name, builder_name, build_number, http_client)
        if not json_data:
            logging.error('Failed to get build data for %s, %s, %s' %
                          (master_name, builder_name, build_number))
            return False

        try:
            build_data = json.loads(json_data)
        except ValueError:
            logging.error('Failed to decode build data for %s, %s, %s' %
                          (master_name, builder_name, build_number))
            return False

        build_result = buildbot.GetBuildResult(build_data)

        return build_result == buildbot.EXCEPTION
コード例 #7
0
def _LatestBuildFailed(master_name, builder_name, build_number):
    http_client = HttpClientAppengine()
    latest_build_numbers = buildbot.GetRecentCompletedBuilds(
        master_name, builder_name, http_client)

    for checked_build_number in latest_build_numbers:
        if checked_build_number <= build_number:
            return True

        checked_build_data = buildbot.GetBuildDataFromBuildMaster(
            master_name, builder_name, checked_build_number, http_client)

        if not checked_build_data:
            logging.error("Failed to get build data for %s/%s/%d" %
                          (master_name, builder_name, checked_build_number))
            return False

        checked_build_result = buildbot.GetBuildResult(
            json.loads(checked_build_data))

        if checked_build_result in [buildbot.SUCCESS, buildbot.WARNINGS]:
            return False

    return True