diff options
Diffstat (limited to 'infra/bisector_test.py')
-rw-r--r-- | infra/bisector_test.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/infra/bisector_test.py b/infra/bisector_test.py new file mode 100644 index 000000000..89d483e57 --- /dev/null +++ b/infra/bisector_test.py @@ -0,0 +1,66 @@ +# 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: + 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() |