From a00890cb733f8a97087ed2fc7d4205f087bcd157 Mon Sep 17 00:00:00 2001 From: Jonathan Metzman Date: Wed, 20 Jan 2021 08:46:38 -0800 Subject: [PATCH] more tests --- infra/cifuzz/cifuzz_test.py | 87 ----------------------------------- infra/cifuzz/coverage.py | 1 + infra/cifuzz/coverage_test.py | 61 +++++++++--------------- 3 files changed, 22 insertions(+), 127 deletions(-) diff --git a/infra/cifuzz/cifuzz_test.py b/infra/cifuzz/cifuzz_test.py index bc45d115e..7d891e1ab 100644 --- a/infra/cifuzz/cifuzz_test.py +++ b/infra/cifuzz/cifuzz_test.py @@ -393,93 +393,6 @@ class CheckFuzzerBuildTest(unittest.TestCase): ' '.join(mocked_docker_run.call_args[0][0])) -@unittest.skipIf(not os.getenv('INTEGRATION_TESTS'), - 'INTEGRATION_TESTS=1 not set') -class GetFilesCoveredByTargetTest(unittest.TestCase): - """Tests get_files_covered_by_target.""" - - example_cov_json = 'example_curl_cov.json' - example_fuzzer_cov_json = 'example_curl_fuzzer_cov.json' - example_fuzzer = 'curl_fuzzer' - - def setUp(self): - with open(os.path.join(TEST_FILES_PATH, - self.example_cov_json)) as file_handle: - self.proj_cov_report_example = json.loads(file_handle.read()) - with open(os.path.join(TEST_FILES_PATH, - self.example_fuzzer_cov_json)) as file_handle: - self.fuzzer_cov_report_example = json.loads(file_handle.read()) - - def test_valid_target(self): - """Tests that covered files can be retrieved from a coverage report.""" - - with mock.patch.object(cifuzz, - 'get_target_coverage_report', - return_value=self.fuzzer_cov_report_example): - file_list = cifuzz.get_files_covered_by_target( - self.proj_cov_report_example, self.example_fuzzer, '/src/curl') - - curl_files_list_path = os.path.join(TEST_FILES_PATH, - 'example_curl_file_list.json') - with open(curl_files_list_path) as file_handle: - true_files_list = json.load(file_handle) - self.assertCountEqual(file_list, true_files_list) - - def test_invalid_target(self): - """Tests passing invalid fuzz target returns None.""" - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, - 'not-a-fuzzer', '/src/curl')) - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, '', - '/src/curl')) - - def test_invalid_project_build_dir(self): - """Tests passing an invalid build directory returns None.""" - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, - self.example_fuzzer, '/no/pe')) - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, - self.example_fuzzer, '')) - - -class GetTargetCoverageReportTest(unittest.TestCase): - """Tests get_target_coverage_report.""" - - example_cov_json = 'example_curl_cov.json' - example_fuzzer = 'curl_fuzzer' - - def setUp(self): - with open(os.path.join(TEST_FILES_PATH, self.example_cov_json), - 'r') as file_handle: - self.example_cov = json.loads(file_handle.read()) - - def test_valid_target(self): - """Tests that a target's coverage report can be downloaded and parsed.""" - with mock.patch.object(cifuzz, 'get_json_from_url', - return_value='{}') as mock_get_json: - cifuzz.get_target_coverage_report(self.example_cov, self.example_fuzzer) - (url,), _ = mock_get_json.call_args - self.assertEqual( - 'https://storage.googleapis.com/oss-fuzz-coverage/' - 'curl/fuzzer_stats/20200226/curl_fuzzer.json', url) - - def test_invalid_target(self): - """Tests that passing an invalid target coverage report returns None.""" - self.assertIsNone( - cifuzz.get_target_coverage_report(self.example_cov, 'not-valid-target')) - self.assertIsNone(cifuzz.get_target_coverage_report(self.example_cov, '')) - - def test_invalid_project_json(self): - """Tests that passing an invalid project json coverage report returns - None.""" - self.assertIsNone( - cifuzz.get_target_coverage_report('not-a-proj', self.example_fuzzer)) - self.assertIsNone(cifuzz.get_target_coverage_report('', - self.example_fuzzer)) - - @unittest.skip('Test is too long to be run with presubmit.') class BuildSantizerIntegrationTest(unittest.TestCase): """Integration tests for the build_fuzzers. diff --git a/infra/cifuzz/coverage.py b/infra/cifuzz/coverage.py index 8efbfc790..56b55427a 100644 --- a/infra/cifuzz/coverage.py +++ b/infra/cifuzz/coverage.py @@ -106,6 +106,7 @@ def _get_latest_cov_report_info(project_name): return None return latest_cov_info + def _get_fuzzer_stats_dir_url(project_name): """Gets latest coverage report info for a specific OSS-Fuzz project from GCS. diff --git a/infra/cifuzz/coverage_test.py b/infra/cifuzz/coverage_test.py index a268b0a20..1da67c114 100644 --- a/infra/cifuzz/coverage_test.py +++ b/infra/cifuzz/coverage_test.py @@ -21,10 +21,10 @@ import coverage # pylint: disable=protected-access - TEST_FILES_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_files') + class GetFuzzerStatsDirUrlTest(unittest.TestCase): """Tests _get_fuzzer_stats_dir_url.""" @@ -45,9 +45,7 @@ class GetFuzzerStatsDirUrlTest(unittest.TestCase): def test_get_invalid_project(self): """Tests that passing a bad project returns None.""" - import ipdb; ipdb.set_trace() self.assertIsNone(coverage._get_fuzzer_stats_dir_url('not-a-proj')) - self.assertIsNone(coverage._get_fuzzer_stats_dir_url('')) class GetTargetCoverageReportTest(unittest.TestCase): @@ -70,8 +68,7 @@ class GetTargetCoverageReportTest(unittest.TestCase): @mock.patch('coverage.get_json_from_url', return_value={}) def test_valid_target(self, mocked_get_json_from_url): """Tests that a target's coverage report can be downloaded and parsed.""" - self.coverage_getter.get_target_coverage_report( - self.EXAMPLE_FUZZER) + self.coverage_getter.get_target_coverage_report(self.EXAMPLE_FUZZER) (url,), _ = mocked_get_json_from_url.call_args self.assertEqual( 'https://storage.googleapis.com/oss-fuzz-coverage/' @@ -81,34 +78,37 @@ class GetTargetCoverageReportTest(unittest.TestCase): """Tests that passing an invalid target coverage report returns None.""" self.assertIsNone( self.coverage_getter.get_target_coverage_report('not-valid-target')) - self.assertIsNone(self.coverage_getter.get_target_coverage_report('')) -@unittest.skipIf(not os.getenv('INTEGRATION_TESTS'), - 'INTEGRATION_TESTS=1 not set') class GetFilesCoveredByTargetTest(unittest.TestCase): """Tests get_files_covered_by_target.""" - example_cov_json = 'example_curl_cov.json' - example_fuzzer_cov_json = 'example_curl_fuzzer_cov.json' - example_fuzzer = 'curl_fuzzer' + FUZZER_COV_JSON_FILENAME = 'example_curl_fuzzer_cov.json' + EXAMPLE_FUZZER = 'curl_fuzzer' + PROJECT_NAME = 'curl' + REPO_PATH = '/src/curl' def setUp(self): + example_cov_json = 'example_curl_cov.json' with open(os.path.join(TEST_FILES_PATH, - self.example_cov_json)) as file_handle: - self.proj_cov_report_example = json.loads(file_handle.read()) + example_cov_json)) as file_handle: + self.cov_report = json.loads(file_handle.read()) + + with mock.patch('coverage._get_latest_cov_report_info', + return_value=self.cov_report): + self.coverage_getter = coverage.OssFuzzCoverageGetter( + self.PROJECT_NAME, self.REPO_PATH) with open(os.path.join(TEST_FILES_PATH, - self.example_fuzzer_cov_json)) as file_handle: - self.fuzzer_cov_report_example = json.loads(file_handle.read()) + self.FUZZER_COV_JSON_FILENAME)) as file_handle: + self.fuzzer_cov_report = json.loads(file_handle.read()) def test_valid_target(self): """Tests that covered files can be retrieved from a coverage report.""" - - with mock.patch.object(cifuzz, - 'get_target_coverage_report', - return_value=self.fuzzer_cov_report_example): - file_list = cifuzz.get_files_covered_by_target( - self.proj_cov_report_example, self.example_fuzzer, '/src/curl') + with mock.patch('coverage.OssFuzzCoverageGetter.get_target_coverage_report', + return_value=self.fuzzer_cov_report): + import ipdb; ipdb.set_trace() + file_list = self.coverage_getter.get_files_covered_by_target( + self.EXAMPLE_FUZZER) curl_files_list_path = os.path.join(TEST_FILES_PATH, 'example_curl_file_list.json') @@ -116,25 +116,6 @@ class GetFilesCoveredByTargetTest(unittest.TestCase): true_files_list = json.load(file_handle) self.assertCountEqual(file_list, true_files_list) - def test_invalid_target(self): - """Tests passing invalid fuzz target returns None.""" - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, - 'not-a-fuzzer', '/src/curl')) - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, '', - '/src/curl')) - - def test_invalid_project_build_dir(self): - """Tests passing an invalid build directory returns None.""" - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, - self.example_fuzzer, '/no/pe')) - self.assertIsNone( - cifuzz.get_files_covered_by_target(self.proj_cov_report_example, - self.example_fuzzer, '')) - - if __name__ == '__main__': unittest.main()