def test_run_fuzz_targets_quits(self, mock_create_fuzz_target_obj, mock_run_fuzz_target, _, __): """Tests that run_fuzz_targets doesn't quit on the first crash it finds.""" runner = run_fuzzers.BatchFuzzTargetRunner(self.config) runner.initialize() call_count = 0 def mock_run_fuzz_target_impl(_): nonlocal call_count if call_count == 0: testcase = self.testcase1 elif call_count == 1: testcase = self.testcase2 assert call_count != 2 call_count += 1 if not os.path.exists(self.CORPUS_DIR): self.fs.create_dir(self.CORPUS_DIR) return fuzz_target.FuzzResult(testcase, self.STACKTRACE, self.CORPUS_DIR) mock_run_fuzz_target.side_effect = mock_run_fuzz_target_impl magic_mock = mock.MagicMock() magic_mock.target_name = 'target1' mock_create_fuzz_target_obj.return_value = magic_mock self.assertTrue(runner.run_fuzz_targets()) self.assertEqual(mock_run_fuzz_target.call_count, 2)
def test_run_fuzz_targets_upload_crashes_and_builds( self, mock_upload_crashes, _): """Tests that run_fuzz_targets uploads crashes and builds correctly.""" runner = run_fuzzers.BatchFuzzTargetRunner(self.config) # TODO(metzman): Don't rely on this failing gracefully. runner.initialize() self.assertFalse(runner.run_fuzz_targets()) self.assertEqual(mock_upload_crashes.call_count, 1)
def test_run_fuzz_targets_quits(self, mocked_create_fuzz_target_obj, mocked_run_fuzz_target, mocked_get_fuzz_targets): """Tests that run_fuzz_targets doesn't quit on the first crash it finds.""" workspace = 'workspace' out_path = os.path.join(workspace, 'out') self.fs.create_dir(out_path) config = test_helpers.create_run_config(fuzz_seconds=FUZZ_SECONDS, workspace=workspace, project_name=EXAMPLE_PROJECT) runner = run_fuzzers.BatchFuzzTargetRunner(config) mocked_get_fuzz_targets.return_value = ['target1', 'target2'] runner.initialize() testcase1 = os.path.join(workspace, 'testcase-aaa') testcase2 = os.path.join(workspace, 'testcase-bbb') self.fs.create_file(testcase1) self.fs.create_file(testcase2) stacktrace = b'stacktrace' call_count = 0 corpus_dir = 'corpus' def mock_run_fuzz_target(_): nonlocal call_count if call_count == 0: testcase = testcase1 elif call_count == 1: testcase = testcase2 assert call_count != 2 call_count += 1 return fuzz_target.FuzzResult(testcase, stacktrace, corpus_dir) mocked_run_fuzz_target.side_effect = mock_run_fuzz_target magic_mock = mock.MagicMock() magic_mock.target_name = 'target1' mocked_create_fuzz_target_obj.return_value = magic_mock self.assertTrue(runner.run_fuzz_targets()) self.assertIn('target1-address-testcase-aaa', os.listdir(runner.crashes_dir)) self.assertEqual(mocked_run_fuzz_target.call_count, 2)
def test_run_fuzz_targets_quits(self, mocked_create_fuzz_target_obj, mocked_run_fuzz_target): """Tests that run_fuzz_targets quits on the first crash it finds.""" workspace = 'workspace' out_path = os.path.join(workspace, 'out') self.fs.create_dir(out_path) config = _create_config(fuzz_seconds=FUZZ_SECONDS, workspace=workspace, project_name=EXAMPLE_PROJECT) runner = run_fuzzers.BatchFuzzTargetRunner(config) with mock.patch('utils.get_fuzz_targets') as mocked_get_fuzz_targets: mocked_get_fuzz_targets.return_value = ['target1', 'target2'] runner.initialize() testcase1 = os.path.join(workspace, 'testcase1') testcase2 = os.path.join(workspace, 'testcase2') self.fs.create_file(testcase1) self.fs.create_file(testcase2) stacktrace = b'stacktrace' call_count = 0 def mock_run_fuzz_target(_): nonlocal call_count if call_count == 0: testcase = testcase1 elif call_count == 1: testcase = testcase2 assert call_count != 2 call_count += 1 return testcase, stacktrace mocked_run_fuzz_target.side_effect = mock_run_fuzz_target magic_mock = mock.MagicMock() magic_mock.target_name = 'target1' mocked_create_fuzz_target_obj.return_value = magic_mock self.assertTrue(runner.run_fuzz_targets()) self.assertIn('target1-testcase', os.listdir(runner.artifacts_dir)) self.assertEqual(mocked_run_fuzz_target.call_count, 2)