def test_find_issues(self): """Test find_issues.""" issue0 = MonorailIssue() issue0.id = 1 issue1 = MonorailIssue() issue1.id = 2 self.mock.get_issues.return_value = [ issue0, issue1, ] issues = self.issue_tracker.find_issues(keywords=['one', 'two'], only_open=True) six.assertCountEqual(self, [1, 2], [issue.id for issue in issues]) self.mock.get_issues.assert_has_calls([ mock.call(mock.ANY, '"one" "two"', can='open'), ]) issues = self.issue_tracker.find_issues(keywords=['one', 'two'], only_open=False) six.assertCountEqual(self, [1, 2], [issue.id for issue in issues]) self.mock.get_issues.assert_has_calls([ mock.call(mock.ANY, '"one" "two"', can='all'), ])
def test_reminder(self): """Test reminders.""" # Return the same status for all build types. self.mock.get.return_value = MockResponse( json.dumps({ 'projects': [ { 'history': [{ 'finish_time': '2018-02-01T00:00:00.000000Z', 'build_id': 'proj0-id', 'success': False }], 'name': 'proj0', }, { 'history': [{ 'finish_time': '2018-02-01T00:00:00.000000Z', 'build_id': 'proj0-id', 'success': False }], 'name': 'proj1', }, ] })) data_types.OssFuzzProject(id='proj0', name='proj0', ccs=['*****@*****.**']).put() data_types.OssFuzzBuildFailure( id='proj0', project_name='proj0', last_checked_timestamp=datetime.datetime(2018, 1, 31), issue_id='1', consecutive_failures=7, build_type='fuzzing').put() data_types.OssFuzzProject(id='proj1', name='proj1', ccs=['*****@*****.**']).put() data_types.OssFuzzBuildFailure( id='proj1', project_name='proj1', last_checked_timestamp=datetime.datetime(2018, 1, 31), issue_id='2', consecutive_failures=3, build_type='fuzzing').put() self.itm.issues[1] = Issue() self.itm.issues[2] = Issue() self.app.get('/build-status') self.assertEqual( 'Friendly reminder that the the build is still failing.\n' 'Please try to fix this failure to ensure that fuzzing remains ' 'productive.\n' 'Latest build log: https://oss-fuzz-build-logs.storage.googleapis.com/' 'log-proj0-id.txt\n', self.itm.issues[1].comment) self.assertEqual('', self.itm.issues[2].comment)
def test_recovered_build_failure(self): """Test fixed build failures.""" # Use the same status for all build types. self.mock.get.return_value = MockResponse( json.dumps({ 'projects': [{ 'history': [{ 'finish_time': '2018-02-01T00:00:00.000000Z', 'build_id': 'proj0-id', 'success': True }], 'name': 'proj0', }] })) data_types.OssFuzzBuildFailure( id='proj0', project_name='proj0', last_checked_timestamp=datetime.datetime(2018, 1, 31), issue_id='1', consecutive_failures=2, build_type='fuzzing').put() issue = Issue() issue.open = True issue.add_label('Type-Build-Failure') issue.add_label('Proj-proj2') issue.summary = 'Build failure in proj2' issue.body = 'Build failure' self.itm.issues[1] = issue self.app.get('/build-status') self.assertEqual(0, data_types.OssFuzzBuildFailure.query().count()) issue = self.itm.issues[1] self.assertEqual('Verified', issue.status) self.assertEqual('The latest build has succeeded, closing this issue.', issue.comment)
def new_issue(self): monorail_issue = MonorailIssue() monorail_issue.itm = self._itm return Issue(monorail_issue)
def get_original_issue(self, issue_id): """Get original issue.""" issue = Issue() issue.open = True issue.itm = self issue.id = issue_id if issue_id == 1337: issue.add_cc('*****@*****.**') issue.add_label('Restrict-View-Commit') elif issue_id == 1338: issue.add_cc('*****@*****.**') issue.add_cc('*****@*****.**') elif issue_id == 1340: issue.add_label('reported-2015-01-01') return issue
def get_original_issue(self, issue_id): """Get original issue.""" issue_id = int(issue_id) issue = Issue() issue.open = True issue.itm = self._itm # pylint: disable=protected-access issue.id = issue_id if issue_id == 1337: issue.add_cc('*****@*****.**') issue.add_label('Restrict-View-Commit') elif issue_id == 1338: issue.add_cc('*****@*****.**') issue.add_cc('*****@*****.**') elif issue_id == 1340: issue.add_label('reported-2015-01-01') return monorail.Issue(issue)
def setUp(self): helpers.patch(self, [ 'libs.issue_management.monorail.issue_tracker_manager.' 'IssueTrackerManager.get_issues', ]) mock_issue = MonorailIssue() mock_issue.id = 1337 mock_issue.summary = 'summary' mock_issue.body = 'body' mock_issue.owner = 'owner' mock_issue.reporter = 'reporter' mock_issue.status = 'New' mock_issue.add_label('label1') mock_issue.add_label('label2') mock_issue.add_component('A>B') mock_issue.add_component('C>D') mock_issue.add_cc('*****@*****.**') mock_comment0 = MonorailComment() mock_comment0.author = 'author' mock_comment0.cc = ['*****@*****.**', '*****@*****.**'] mock_comment0.labels = ['-label0', 'label1'] mock_comment0.components = ['-E>F', 'A>B'] mock_comment0.comment = 'comment' mock_comment0.summary = 'summary' mock_comment0.status = 'status' mock_comment0.owner = 'owner' mock_comment1 = MonorailComment() mock_comment1.author = 'author' mock_comment1.comment = 'comment' mock_issue.comments = [ mock_comment0, mock_comment1, ] mock_issue_merged = MonorailIssue() mock_issue_merged.id = 1338 mock_issue_merged.merged_into = 1337 mock_issue_merged.merged_into_project = 'project' mock_issue_merged.closed = datetime.datetime(2019, 1, 1) mock_issue_merged_another_project = MonorailIssue() mock_issue_merged_another_project.id = 1339 mock_issue_merged_another_project.merged_into = 1 mock_issue_merged_another_project.merged_into_project = 'different-project' mock_issues = { 1337: mock_issue, 1338: mock_issue_merged, 1339: mock_issue_merged_another_project, } self.itm = IssueTrackerManager('project', mock_issues) self.issue_tracker = monorail.IssueTracker(self.itm)
def create_generic_issue(created_days_ago=28): """Returns a simple issue object for use in tests.""" issue = Issue() issue.cc = [] issue.comment = '' issue.comments = [] issue.components = [] issue.labels = [] issue.open = True issue.owner = '*****@*****.**' issue.status = 'Assigned' issue.id = 1 issue.itm = create_issue_tracker_manager() # Test issue was created 1 week before the current (mocked) time. issue.created = ( test_utils.CURRENT_TIME - datetime.timedelta(days=created_days_ago)) return monorail.Issue(issue)