Skip to content

Commit f77c2c1

Browse files
committed
Add external testcase config to local_config
1 parent 044930a commit f77c2c1

File tree

3 files changed

+26
-15
lines changed

3 files changed

+26
-15
lines changed

src/clusterfuzz/_internal/config/local_config.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
MONITORING_REGIONS_PATH = 'monitoring.regions'
3535
PROJECT_PATH = 'project'
3636
SWARMING_PATH = 'swarming.swarming'
37+
EXTERNAL_TESTCASE_UPLOADER_PATH = 'external_testcase_reader.config'
3738

3839

3940
def _load_yaml_file(yaml_file_path):
@@ -259,3 +260,10 @@ class SwarmingConfig(Config):
259260

260261
def __init__(self):
261262
super().__init__(SWARMING_PATH)
263+
264+
265+
class ExternalTestcaseReaderConfig(Config):
266+
"""External testcase reader config."""
267+
268+
def __init__(self):
269+
super().__init__(EXTERNAL_TESTCASE_UPLOADER_PATH)

src/clusterfuzz/_internal/cron/external_testcase_reader.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from appengine.libs import form
2323
from appengine.libs import gcs
2424
from appengine.libs import helpers
25+
from clusterfuzz._internal.config import local_config
2526
from clusterfuzz._internal.issue_management.google_issue_tracker import \
2627
issue_tracker
2728

@@ -32,12 +33,11 @@
3233
ISSUETRACKER_WONTFIX_STATE = 'NOT_REPRODUCIBLE'
3334

3435

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

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

153153

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

165165
# TODO(pgrace) Cache in redis.
166-
vrp_uploaders = get_vrp_uploaders()
166+
vrp_uploaders = get_vrp_uploaders(config)
167167

168168
# TODO(pgrace) Implement rudimentary rate limiting.
169169

@@ -199,7 +199,7 @@ def handle_testcases(tracker):
199199
def main():
200200
tracker = issue_tracker.IssueTracker('chromium', None,
201201
{'default_component_id': 1363614})
202-
handle_testcases(tracker)
202+
handle_testcases(tracker, local_config.ExternalTestcaseReaderConfig())
203203

204204

205205
if __name__ == '__main__':

src/clusterfuzz/_internal/tests/appengine/handlers/cron/external_testcase_reader_test.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
},
3131
'etag': 'TXpjek9Ea3pNekV4TFRZd01USTNOalk0TFRjNE9URTROVFl4TlE9PQ=='
3232
}
33+
BASIC_CONFIG = {
34+
'vrp-uploaders-bucket': 'bucket-name',
35+
'vrp-uploaders-blob': 'blob-name'
36+
}
3337

3438

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

55-
external_testcase_reader.handle_testcases(mock_it)
59+
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)
5660

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

70-
external_testcase_reader.handle_testcases(mock_it)
74+
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)
7175

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

89-
external_testcase_reader.handle_testcases(mock_it)
93+
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)
9094

9195
mock_close_issue_if_invalid.assert_not_called()
9296
mock_it.get_attachment.assert_not_called()
@@ -98,7 +102,7 @@ def test_handle_testcases_no_issues(self, mock_close_issue_if_invalid,
98102
mock_it = mock.create_autospec(issue_tracker.IssueTracker)
99103
mock_it.find_issues_with_filters.return_value = []
100104

101-
external_testcase_reader.handle_testcases(mock_it)
105+
external_testcase_reader.handle_testcases(mock_it, BASIC_CONFIG)
102106

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

224-
actual = external_testcase_reader.get_vrp_uploaders()
225-
mock_storage.return_value.bucket.assert_called_once_with(
226-
'clusterfuzz-vrp-uploaders')
227-
mock_bucket.blob.assert_called_once_with('vrp-uploaders')
228+
actual = external_testcase_reader.get_vrp_uploaders(BASIC_CONFIG)
229+
mock_storage.return_value.bucket.assert_called_once_with('bucket-name')
230+
mock_bucket.blob.assert_called_once_with('blob-name')
228231
self.assertEqual(actual,
229232
['test-user@google.com', 'test-user2@chromium.org'])

0 commit comments

Comments
 (0)