more tests

This commit is contained in:
Jonathan Metzman 2021-01-20 08:46:38 -08:00
parent dafddab431
commit a00890cb73
3 changed files with 22 additions and 127 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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()