Skip to content

Commit

Permalink
Add external testcase config to local_config (#4646) (#4651)
Browse files Browse the repository at this point in the history
merged to master at #4646
  • Loading branch information
pgrace-google authored Jan 30, 2025
1 parent 602fc84 commit e4771b6
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 15 deletions.
8 changes: 8 additions & 0 deletions src/clusterfuzz/_internal/config/local_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
MONITORING_REGIONS_PATH = 'monitoring.regions'
PROJECT_PATH = 'project'
SWARMING_PATH = 'swarming.swarming'
EXTERNAL_TESTCASE_UPLOADER_PATH = 'external_testcase_reader.config'


def _load_yaml_file(yaml_file_path):
Expand Down Expand Up @@ -259,3 +260,10 @@ class SwarmingConfig(Config):

def __init__(self):
super().__init__(SWARMING_PATH)


class ExternalTestcaseReaderConfig(Config):
"""External testcase reader config."""

def __init__(self):
super().__init__(EXTERNAL_TESTCASE_UPLOADER_PATH)
14 changes: 7 additions & 7 deletions src/clusterfuzz/_internal/cron/external_testcase_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from appengine.libs import form
from appengine.libs import gcs
from appengine.libs import helpers
from clusterfuzz._internal.config import local_config
from clusterfuzz._internal.issue_management.google_issue_tracker import \
issue_tracker

Expand All @@ -32,12 +33,11 @@
ISSUETRACKER_WONTFIX_STATE = 'NOT_REPRODUCIBLE'


def get_vrp_uploaders():
def get_vrp_uploaders(config):
"""Checks whether the given reporter has permission to upload."""
# TODO(pgrace) Add this to a YAML file.
storage_client = storage.Client()
bucket = storage_client.bucket('clusterfuzz-vrp-uploaders')
blob = bucket.blob('vrp-uploaders')
bucket = storage_client.bucket(config.get('vrp-uploaders-bucket'))
blob = bucket.blob(config.get('vrp-uploaders-blob'))
members = blob.download_as_string().decode('utf-8').splitlines()[0].split(',')
return members

Expand Down Expand Up @@ -151,7 +151,7 @@ def submit_testcase(issue_id, file, filename, filetype, cmds):
'https://clusterfuzz.com/upload-testcase/upload', data=data, timeout=10)


def handle_testcases(tracker):
def handle_testcases(tracker, config):
"""Fetches and submits testcases from bugs or closes unnecssary bugs."""
# TODO(pgrace) remove ID filter once done testing.
issues = tracker.find_issues_with_filters(
Expand All @@ -163,7 +163,7 @@ def handle_testcases(tracker):
return

# TODO(pgrace) Cache in redis.
vrp_uploaders = get_vrp_uploaders()
vrp_uploaders = get_vrp_uploaders(config)

# TODO(pgrace) Implement rudimentary rate limiting.

Expand Down Expand Up @@ -199,7 +199,7 @@ def handle_testcases(tracker):
def main():
tracker = issue_tracker.IssueTracker('chromium', None,
{'default_component_id': 1363614})
handle_testcases(tracker)
handle_testcases(tracker, local_config.ExternalTestcaseReaderConfig())


if __name__ == '__main__':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
},
'etag': 'TXpjek9Ea3pNekV4TFRZd01USTNOalk0TFRjNE9URTROVFl4TlE9PQ=='
}
BASIC_CONFIG = {
'vrp-uploaders-bucket': 'bucket-name',
'vrp-uploaders-blob': 'blob-name'
}


@mock.patch.object(
Expand All @@ -52,7 +56,7 @@ def test_handle_testcases(self, mock_close_issue_if_invalid,
basic_issue.reporter.return_value = 'test-reporter@gmail.com'
mock_it.find_issues_with_filters.return_value = [basic_issue]

external_testcase_reader.handle_testcases(mock_it)
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)

mock_close_issue_if_invalid.assert_called_once()
mock_it.get_attachment.assert_called_once()
Expand All @@ -67,7 +71,7 @@ def test_handle_testcases_invalid(self, mock_close_issue_if_invalid,
basic_issue.reporter.return_value = 'test-reporter@gmail.com'
mock_it.find_issues_with_filters.return_value = [basic_issue]

external_testcase_reader.handle_testcases(mock_it)
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)

mock_close_issue_if_invalid.assert_called_once()
mock_it.get_attachment.assert_not_called()
Expand All @@ -86,7 +90,7 @@ def test_handle_testcases_not_reproducible(
basic_issue.reporter.return_value = 'test-reporter@gmail.com'
mock_it.find_issues_with_filters.return_value = [basic_issue]

external_testcase_reader.handle_testcases(mock_it)
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)

mock_close_issue_if_invalid.assert_not_called()
mock_it.get_attachment.assert_not_called()
Expand All @@ -98,7 +102,7 @@ def test_handle_testcases_no_issues(self, mock_close_issue_if_invalid,
mock_it = mock.create_autospec(issue_tracker.IssueTracker)
mock_it.find_issues_with_filters.return_value = []

external_testcase_reader.handle_testcases(mock_it)
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)

mock_close_issue_if_invalid.assert_not_called()
mock_it.get_attachment.assert_not_called()
Expand Down Expand Up @@ -221,9 +225,8 @@ def test_get_vrp_uploaders(self):
mock_blob.download_as_string.return_value = "test-user@google.com,test-user2@chromium.org".encode(
'utf-8')

actual = external_testcase_reader.get_vrp_uploaders()
mock_storage.return_value.bucket.assert_called_once_with(
'clusterfuzz-vrp-uploaders')
mock_bucket.blob.assert_called_once_with('vrp-uploaders')
actual = external_testcase_reader.get_vrp_uploaders(BASIC_CONFIG)
mock_storage.return_value.bucket.assert_called_once_with('bucket-name')
mock_bucket.blob.assert_called_once_with('blob-name')
self.assertEqual(actual,
['test-user@google.com', 'test-user2@chromium.org'])

0 comments on commit e4771b6

Please sign in to comment.