Exemplo n.º 1
0
def upload_testcase_output(crash_result, testcase_path):
    """Upload the output into corresponding GCS logs bucket."""
    fuzz_logs_bucket = environment.get_value('FUZZ_LOGS_BUCKET')
    if not fuzz_logs_bucket:
        return

    # Add revision information to the logs.
    app_revision = environment.get_value('APP_REVISION')
    job_name = environment.get_value('JOB_NAME')
    components = revisions.get_component_list(app_revision, job_name)
    component_revisions = (revisions.format_revision_list(components,
                                                          use_html=False)
                           or 'Not available.\n')

    revisions_header = (
        'Component revisions (build r{app_revision}):\n{component_revisions}\n'
        .format(app_revision=app_revision,
                component_revisions=component_revisions))
    return_code_header = 'Return code: %s\n\n' % crash_result.return_code
    symbolized_output = crash_result.get_stacktrace()

    # To provide consistency between stats and logs, we use timestamp taken
    # when the log has been parsed.
    log_time = _get_testcase_time(testcase_path)

    fuzzer_logs.upload_to_logs(fuzz_logs_bucket,
                               revisions_header + return_code_header +
                               symbolized_output,
                               time=log_time)
Exemplo n.º 2
0
  def test_get_component_range_list_0_start_custom(self, mock_get_url_content,
                                                   mock_get_config):
    """Test get_component_range_list with a '0' start_revision."""
    mock_get_config.return_value = self.MockConfigOSSFuzz()
    self.mock.default_project_name.return_value = "oss-fuzz"
    mock_get_url_content.side_effect = self.mock_get_url_content

    result = revisions.get_component_range_list(0, 1338, SRCMAP_JOB_TYPE)
    result_as_html = revisions.format_revision_list(result)
    expected_html = self._read_data_file("srcmap_expected_html_3.txt")
    self.assertEqual(result_as_html, expected_html)
Exemplo n.º 3
0
  def test_get_component_revision_list_src_map_text(self, mock_get_url_content,
                                                    mock_get_config):
    """Test get_component_range_list for srcmap jobs (text only)."""
    mock_get_config.return_value = self.MockConfigOSSFuzz()
    self.mock.default_project_name.return_value = "oss-fuzz"
    mock_get_url_content.side_effect = self.mock_get_url_content

    result = revisions.get_component_range_list(1337, 9001, SRCMAP_JOB_TYPE)
    result_as_html = revisions.format_revision_list(result, use_html=False)
    expected_html = self._read_data_file("srcmap_expected_text.txt")
    self.assertEqual(result_as_html, expected_html)
Exemplo n.º 4
0
  def test_get_component_range_list_same_hash(self, mock_get_url_content,
                                              mock_get_config):
    """Test get_component_range_list for 2 builds that have different revision
        numbers, but same revision hash after mapping."""
    mock_get_config.return_value = self.MockConfigOSSFuzz()
    self.mock.default_project_name.return_value = "oss-fuzz"
    mock_get_url_content.side_effect = self.mock_get_url_content

    result = revisions.get_component_range_list(1337, 1338, SRCMAP_JOB_TYPE)
    result_as_html = revisions.format_revision_list(result)
    expected_html = self._read_data_file("srcmap_expected_html_2.txt")
    self.assertEqual(result_as_html, expected_html)
Exemplo n.º 5
0
def _get_revision_range_html(job_type, start_revision, end_revision=None):
  """Return revision range html for a revision range and job type."""
  if end_revision is None:
    end_revision = start_revision

  component_rev_list = revisions.get_component_range_list(
      start_revision, end_revision, job_type)
  if not component_rev_list:
    return ('%s:%s (No component revisions found!)' % (start_revision,
                                                       end_revision))

  return revisions.format_revision_list(component_rev_list)
Exemplo n.º 6
0
  def test_get_component_range_list_clank(
      self, mock_get_git_hash, mock_get_url_content, mock_get_config):
    """Test that get_component_range_list works properly for the Clank repo."""
    mock_get_config.return_value = self.MockConfigChromium()
    self.mock.default_project_name.return_value = 'chromium'
    mock_get_url_content.side_effect = self.mock_get_url_content
    mock_get_git_hash.side_effect = self.mock_get_git_hash_for_git_commit_pos

    result = revisions.get_component_range_list(260548, 260552,
                                                ANDROID_JOB_TYPE)
    result_as_html = revisions.format_revision_list(result)

    expected_html = self._read_data_file('clank_expected_html.txt')
    self.assertEqual(result_as_html, expected_html)
Exemplo n.º 7
0
  def test_get_component_range_list_chromium(self, mock_get_git_hash,
                                             mock_get_url_content,
                                             mock_get_config):
    """Test that get_component_range_list works properly for the Chromium
        repo."""
    mock_get_config.return_value = self.MockConfigChromium()
    self.mock.default_project_name.return_value = "chromium"
    mock_get_url_content.side_effect = self.mock_get_url_content
    mock_get_git_hash.side_effect = self.mock_get_git_hash_for_git_commit_pos

    result = revisions.get_component_range_list(336903, 336983, BASIC_JOB_TYPE)
    result_as_html = revisions.format_revision_list(result)

    expected_html = self._read_data_file("chromium_expected_html.txt")
    self.assertEqual(result_as_html, expected_html)
Exemplo n.º 8
0
def prepare_log_for_upload(symbolized_output, return_code):
    """Prepare log for upload."""
    # Add revision information to the logs.
    app_revision = environment.get_value("APP_REVISION")
    job_name = environment.get_value("JOB_NAME")
    components = revisions.get_component_list(app_revision, job_name)
    component_revisions = (revisions.format_revision_list(components,
                                                          use_html=False)
                           or "Not available.\n")

    revisions_header = "Component revisions (build r{app_revision}):\n{component_revisions}\n".format(
        app_revision=app_revision, component_revisions=component_revisions)
    return_code_header = "Return code: %s\n\n" % return_code

    return revisions_header + return_code_header + symbolized_output
Exemplo n.º 9
0
def prepare_log_for_upload(symbolized_output, return_code):
    """Prepare log for upload."""
    # Add revision information to the logs.
    app_revision = environment.get_value('APP_REVISION')
    job_name = environment.get_value('JOB_NAME')
    components = revisions.get_component_list(app_revision, job_name)
    component_revisions = (revisions.format_revision_list(components,
                                                          use_html=False)
                           or 'Not available.\n')

    revisions_header = (
        'Component revisions (build r{app_revision}):\n{component_revisions}\n'
        .format(app_revision=app_revision,
                component_revisions=component_revisions))
    return_code_header = 'Return code: %s\n\n' % return_code

    result = revisions_header + return_code_header + symbolized_output
    return result.encode('utf-8')
Exemplo n.º 10
0
def prepare_log_for_upload(symbolized_output, return_code):
    """Prepare log for upload."""
    # Add revision information to the logs.
    app_revision = environment.get_value('APP_REVISION')
    job_name = environment.get_value('JOB_NAME')
    components = revisions.get_component_list(app_revision, job_name)
    component_revisions = (revisions.format_revision_list(components,
                                                          use_html=False)
                           or 'Not available.\n')

    revisions_header =\
    f'Component revisions (build r{app_revision}):\n{component_revisions}\n'

    bot_name = environment.get_value('BOT_NAME')
    bot_header = f'Bot name: {bot_name}\n'
    if environment.is_android():
        bot_header += f'Device serial: {environment.get_value("ANDROID_SERIAL")}\n'

    return_code_header = "Return code: %s\n\n" % return_code

    result = revisions_header + bot_header + return_code_header +\
    symbolized_output
    return result.encode('utf-8')