diff --git a/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py b/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py index 2bdecdfe47..419590bc59 100644 --- a/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py +++ b/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py @@ -1169,6 +1169,11 @@ def create_testcase(group: uworker_msg_pb2.FuzzTaskCrashGroup, comment = (f'Fuzzer {fully_qualified_fuzzer_name} generated testcase crashed ' f'in {crash.crash_time} seconds ' f'(r{fuzz_task_output.crash_revision})') + + fuzzer = uworker_io.entity_from_protobuf(uworker_input.setup_input.fuzzer, + data_types.Fuzzer) + is_trusted = fuzzer.trusted + testcase_id = data_handler.store_testcase( crash=crash, fuzzed_keys=crash.fuzzed_key or None, @@ -1192,9 +1197,7 @@ def create_testcase(group: uworker_msg_pb2.FuzzTaskCrashGroup, timeout_multiplier=get_testcase_timeout_multiplier( group.context.timeout_multiplier, crash, group.context.test_timeout), minimized_arguments=crash.arguments, - # TODO(https://github.com/google/clusterfuzz/issues/4175): Before enabling - # oss-fuzz-on-demand change this. - trusted=True) + trusted=is_trusted) testcase = data_handler.get_testcase_by_id(testcase_id) events.emit( events.TestcaseCreationEvent( diff --git a/src/clusterfuzz/_internal/tests/core/bot/tasks/utasks/fuzz_task_test.py b/src/clusterfuzz/_internal/tests/core/bot/tasks/utasks/fuzz_task_test.py index cbe1d2419c..f67a2113d9 100644 --- a/src/clusterfuzz/_internal/tests/core/bot/tasks/utasks/fuzz_task_test.py +++ b/src/clusterfuzz/_internal/tests/core/bot/tasks/utasks/fuzz_task_test.py @@ -38,7 +38,6 @@ from clusterfuzz._internal.bot.tasks.utasks import uworker_io from clusterfuzz._internal.bot.untrusted_runner import file_host from clusterfuzz._internal.build_management import build_manager -from clusterfuzz._internal.datastore import data_handler from clusterfuzz._internal.datastore import data_types from clusterfuzz._internal.fuzzing import corpus_manager from clusterfuzz._internal.google_cloud_utils import big_query @@ -2092,25 +2091,69 @@ def setUp(self): one_time_crasher_flag=False, ) self.uworker_input = _create_uworker_input() + fuzzer = data_types.Fuzzer(name='engine', trusted=True) + fuzzer.put() + self.uworker_input.setup_input.fuzzer.CopyFrom( + uworker_io.entity_to_protobuf(fuzzer)) self.uworker_output = uworker_msg_pb2.Output( fuzz_task_output=uworker_msg_pb2.FuzzTaskOutput(crash_revision='1')) def test_create_testcase_event_emit(self): """Test that the create_testcase method emits the expected event.""" self.mock.store_testcase.side_effect = _store_generic_testcase - fuzz_task.create_testcase( + testcase = fuzz_task.create_testcase( group=self.group, uworker_input=self.uworker_input, uworker_output=self.uworker_output, fully_qualified_fuzzer_name='engine') - - testcase = data_handler.get_testcase_by_id(1) self.mock.emit.assert_called_once_with( events.TestcaseCreationEvent( testcase=testcase, creation_origin=events.TestcaseOrigin.FUZZ_TASK, uploader=None)) + def test_create_testcase_trusted_fuzzer(self): + """Test creating a testcase with a trusted fuzzer.""" + fuzzer = data_types.Fuzzer(name='engine', trusted=True) + fuzzer.put() + + self.uworker_input.setup_input.CopyFrom(uworker_msg_pb2.SetupInput()) + self.uworker_input.setup_input.fuzzer.CopyFrom( + uworker_io.entity_to_protobuf(fuzzer)) + + self.mock.store_testcase.side_effect = _store_generic_testcase + + fuzz_task.create_testcase( + group=self.group, + uworker_input=self.uworker_input, + uworker_output=self.uworker_output, + fully_qualified_fuzzer_name='engine') + + self.mock.store_testcase.assert_called_once() + kwargs = self.mock.store_testcase.call_args[1] + self.assertTrue(kwargs.get('trusted')) + + def test_create_testcase_untrusted_fuzzer(self): + """Test creating a testcase with an untrusted fuzzer.""" + fuzzer = data_types.Fuzzer(name='engine', trusted=False) + fuzzer.put() + + self.uworker_input.setup_input.CopyFrom(uworker_msg_pb2.SetupInput()) + self.uworker_input.setup_input.fuzzer.CopyFrom( + uworker_io.entity_to_protobuf(fuzzer)) + + self.mock.store_testcase.side_effect = _store_generic_testcase + + fuzz_task.create_testcase( + group=self.group, + uworker_input=self.uworker_input, + uworker_output=self.uworker_output, + fully_qualified_fuzzer_name='engine') + + self.mock.store_testcase.assert_called_once() + kwargs = self.mock.store_testcase.call_args[1] + self.assertFalse(kwargs.get('trusted')) + def _store_generic_testcase(*args, **kwargs): # pylint: disable=unused-argument """Store a generic testcase and return its id."""