def testProcessFullRepoData(self, mocked_is_request_from_appself, mocked_get_build, mocked_get_validated_data, mocked_get_change_log, mocked_retrieve_manifest, mocked_fetch_file): # Mock buildbucket v2 API. build = mock.Mock() build.builder.project = 'chrome' build.builder.bucket = 'coverage' build.builder.builder = 'linux-code-coverage' build.output.properties.items.return_value = [ ('coverage_gs_bucket', 'code-coverage-data'), ('coverage_metadata_gs_path', ('postsubmit/chromium.googlesource.com/chromium/src/' 'aaaaa/coverage/linux-code-coverage/123456789/metadata')) ] build.input.gitiles_commit = mock.Mock( host='chromium.googlesource.com', project='chromium/src', ref='refs/heads/master', id='aaaaa') mocked_get_build.return_value = build # Mock Gitiles API to get change log. change_log = mock.Mock() change_log.committer.time = datetime.datetime(2018, 1, 1) mocked_get_change_log.return_value = change_log # Mock retrieve manifest. manifest = _CreateSampleManifest() mocked_retrieve_manifest.return_value = manifest # Mock get validated data from cloud storage for both all.json and file # shard json. all_coverage_data = { 'dirs': [{ 'path': '//dir/', 'dirs': [], 'files': [{ 'path': '//dir/test.cc', 'name': 'test.cc', 'summaries': _CreateSampleCoverageSummaryMetric() }], 'summaries': _CreateSampleCoverageSummaryMetric() }], 'file_shards': ['file_coverage/files1.json.gz'], 'summaries': _CreateSampleCoverageSummaryMetric(), 'components': [{ 'path': 'Component>Test', 'dirs': [{ 'path': '//dir/', 'name': 'dir/', 'summaries': _CreateSampleCoverageSummaryMetric() }], 'summaries': _CreateSampleCoverageSummaryMetric() }], } file_shard_coverage_data = { 'files': [{ 'path': '//dir/test.cc', 'revision': 'bbbbb', 'lines': [{ 'count': 100, 'last': 2, 'first': 1 }], 'timestamp': '140000', 'uncovered_blocks': [{ 'line': 1, 'ranges': [{ 'first': 1, 'last': 2 }] }] }] } mocked_get_validated_data.side_effect = [ all_coverage_data, file_shard_coverage_data ] request_url = '/coverage/task/process-data/build/123456789' response = self.test_app.post(request_url) self.assertEqual(200, response.status_int) mocked_is_request_from_appself.assert_called() fetched_reports = PostsubmitReport.query().fetch() self.assertEqual(1, len(fetched_reports)) self.assertEqual(_CreateSamplePostsubmitReport(), fetched_reports[0]) mocked_fetch_file.assert_called_with(_CreateSamplePostsubmitReport(), '//dir/test.cc', 'bbbbb') fetched_file_coverage_data = FileCoverageData.query().fetch() self.assertEqual(1, len(fetched_file_coverage_data)) self.assertEqual(_CreateSampleFileCoverageData(), fetched_file_coverage_data[0]) fetched_summary_coverage_data = SummaryCoverageData.query().fetch() self.assertListEqual([ _CreateSampleRootComponentCoverageData(), _CreateSampleComponentCoverageData(), _CreateSampleDirectoryCoverageData() ], fetched_summary_coverage_data)
def testAndCreateAndGetComponentCoverageData(self): server_host = 'chromium.googlesource.com' project = 'chromium/src' ref = 'refs/heads/master' revision = '99999' data_type = 'components' path = 'Test>Component' bucket = 'coverage' builder = 'linux-code-coverage' data = { 'dirs': [], 'files': [], 'summaries': [{ 'covered': 1, 'total': 1, 'name': 'region' }, { 'covered': 1, 'total': 1, 'name': 'function' }, { 'covered': 1, 'total': 1, 'name': 'line' }], 'path': 'Test>Component', } component_coverage_data = SummaryCoverageData.Create( server_host=server_host, project=project, ref=ref, revision=revision, data_type=data_type, path=path, bucket=bucket, builder=builder, data=data) component_coverage_data.put() # Test key. self.assertEqual( 'chromium.googlesource.com$chromium/src$refs/heads/master$99999$' 'components$Test>Component$coverage$linux-code-coverage', component_coverage_data.key.id()) # Test Create. fetched_component_coverage_data = SummaryCoverageData.query().fetch() self.assertEqual(1, len(fetched_component_coverage_data)) self.assertEqual(component_coverage_data, fetched_component_coverage_data[0]) # Test Get. self.assertEqual( component_coverage_data, SummaryCoverageData.Get( server_host=server_host, project=project, ref=ref, revision=revision, data_type=data_type, path=path, bucket=bucket, builder=builder))