def test_generate_blackbox_fuzzers(self): """Test generate_blackbox_fuzzers (success).""" output = ('metadata::fuzzer_binary_name: fuzzer_binary_name\n') self.mock.run.side_effect = functools.partial(_mock_fuzzer_run, output, 4, 'corpus_dir') self.assertTrue(setup.update_fuzzer_and_data_bundles('libFuzzer')) session = fuzz_task.FuzzingSession('libFuzzer', 'job', 1) session.testcase_directory = '/output' session.data_directory = '/input' (error_occurred, testcase_file_paths, sync_corpus_directory, fuzzer_metadata) = session.generate_blackbox_testcases( self.fuzzer, self.fuzzer_directory, 4) self.assertEqual(1, len(self.mock.run.call_args_list)) self.assertEqual(('/input', '/output', 4), self.mock.run.call_args[0][1:]) self.assertFalse(error_occurred) self.assertItemsEqual([ '/output/fuzz-0', '/output/fuzz-1', '/output/fuzz-2', '/output/fuzz-3', ], testcase_file_paths) self.assertEqual('corpus_dir', sync_corpus_directory) self.assertDictEqual({'fuzzer_binary_name': 'fuzzer_binary_name'}, fuzzer_metadata)
def test_generate_blackbox_fuzzers(self): """Test generate_blackbox_fuzzers (success).""" output = "metadata::fuzzer_binary_name: fuzzer_binary_name\n" self.mock.run.side_effect = functools.partial(_mock_fuzzer_run, output, 4, "corpus_dir") self.assertTrue(setup.update_fuzzer_and_data_bundles("libFuzzer")) session = fuzz_task.FuzzingSession("libFuzzer", "job", 1) session.testcase_directory = "/output" session.data_directory = "/input" ( error_occurred, testcase_file_paths, sync_corpus_directory, fuzzer_metadata, ) = session.generate_blackbox_testcases(self.fuzzer, self.fuzzer_directory, 4) self.assertEqual(1, len(self.mock.run.call_args_list)) self.assertEqual(("/input", "/output", 4), self.mock.run.call_args[0][1:]) self.assertFalse(error_occurred) self.assertItemsEqual( [ "/output/fuzz-0", "/output/fuzz-1", "/output/fuzz-2", "/output/fuzz-3" ], testcase_file_paths, ) self.assertEqual("corpus_dir", sync_corpus_directory) self.assertDictEqual({"fuzzer_binary_name": "fuzzer_binary_name"}, fuzzer_metadata)
def test_generate_blackbox_fuzzers_fail(self): """Test generate_blackbox_fuzzers (failure).""" self.mock.run.side_effect = builtin.BuiltinFuzzerException() self.assertTrue(setup.update_fuzzer_and_data_bundles('libFuzzer')) session = fuzz_task.FuzzingSession('libFuzzer', 'job', 1) session.testcase_directory = '/output' session.data_directory = '/input' with self.assertRaises(builtin.BuiltinFuzzerException): session.generate_blackbox_testcases(self.fuzzer, self.fuzzer_directory, 4)
def test_basic(self): """Test basic fuzzing session.""" session = fuzz_task.FuzzingSession('libFuzzer', 'libfuzzer_asan_test', 60) session.testcase_directory = os.environ['FUZZ_INPUTS'] session.data_directory = '/data_dir' os.environ['FUZZ_TARGET'] = 'test_target' os.environ['APP_REVISION'] = '1' expected_crashes = [engine.Crash('/input', 'stack', ['args'], 1.0)] engine_impl = mock.Mock() engine_impl.name = 'libFuzzer' engine_impl.prepare.return_value = engine.FuzzOptions( '/corpus', ['arg'], ['strategy_1', 'strategy_2']) engine_impl.fuzz.return_value = engine.Result( 'logs', ['cmd'], expected_crashes, {'stat': 1}, 42.0) crashes, fuzzer_metadata = session.do_engine_fuzzing(engine_impl) self.assertDictEqual({ 'issue_components': 'component1,component2', 'issue_labels': 'label1,label2', 'issue_owners': '*****@*****.**', }, fuzzer_metadata) log_time = datetime.datetime(1970, 1, 1, 0, 0) self.mock.upload_log.assert_called_with( 'Component revisions (build r1):\n' 'component: rev\n\n' 'Return code: 1\n\n' 'Command: cmd\nBot: None\nTime ran: 42.0\n\n' 'logs\n' 'cf::fuzzing_strategies: strategy_1,strategy_2', log_time) self.mock.upload_testcase.assert_called_with('/input', log_time) self.assertEqual(1, len(crashes)) self.assertEqual('/input', crashes[0].file_path) self.assertEqual(1, crashes[0].return_code) self.assertEqual('stack', crashes[0].unsymbolized_crash_stacktrace) self.assertEqual(1.0, crashes[0].crash_time) self.assertListEqual(['test_target', 'args'], crashes[0].arguments) upload_args = self.mock.upload_stats.call_args[0][0] testcase_run = upload_args[0] self.assertDictEqual({ 'build_revision': 1, 'command': ['cmd'], 'fuzzer': u'libFuzzer_test_target', 'job': 'libfuzzer_asan_test', 'kind': 'TestcaseRun', 'stat': 1, 'timestamp': 0.0, }, testcase_run.data)