# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing perepo_managerissions and # limitations under the License. """Test the functionality of bisection module: 1) Test a known case where an error appears in a regression range. 2) Bisect can handle incorrect inputs. IMPORTANT: This test needs to be run with root privileges. """ import os import unittest import bisector import build_specified_commit import test_repos # Necessary because __file__ changes with os.chdir TEST_DIR_PATH = os.path.dirname(os.path.realpath(__file__)) class BisectIntegrationTests(unittest.TestCase): """Class to test the functionality of bisection method.""" def test_bisect_invalid_repo(self): """Test the bisection method on a project that does not exist.""" test_repo = test_repos.INVALID_REPO build_data = build_specified_commit.BuildData( project_name=test_repo.project_name, engine='libfuzzer', sanitizer='address', architecture='x86_64') with self.assertRaises(ValueError): bisector.bisect(test_repo.old_commit, test_repo.new_commit, test_repo.test_case_path, test_repo.fuzz_target, build_data) def test_bisect(self): """Test the bisect method on example projects.""" for test_repo in test_repos.TEST_REPOS: if test_repo.new_commit: build_data = build_specified_commit.BuildData( project_name=test_repo.project_name, engine='libfuzzer', sanitizer='address', architecture='x86_64') error_sha = bisector.bisect(test_repo.old_commit, test_repo.new_commit, test_repo.test_case_path, test_repo.fuzz_target, build_data) self.assertEqual(error_sha, test_repo.intro_commit) if __name__ == '__main__': # Change to oss-fuzz main directory so helper.py runs correctly. if os.getcwd() != os.path.dirname(TEST_DIR_PATH): os.chdir(os.path.dirname(TEST_DIR_PATH)) unittest.main()