From d95848bdc6977abea8bf0588aa722041152f8fe0 Mon Sep 17 00:00:00 2001 From: Javan Lacerda Date: Fri, 19 Jun 2026 16:45:02 +0000 Subject: [PATCH] check platform on feature flag for enabling fuzz for bots Signed-off-by: Javan Lacerda --- .../_internal/base/tasks/__init__.py | 4 +- .../tests/core/base/tasks/tasks_test.py | 69 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/clusterfuzz/_internal/base/tasks/__init__.py b/src/clusterfuzz/_internal/base/tasks/__init__.py index f5df91b188..65c62e62a7 100644 --- a/src/clusterfuzz/_internal/base/tasks/__init__.py +++ b/src/clusterfuzz/_internal/base/tasks/__init__.py @@ -439,7 +439,9 @@ def get_task(): logs.info(f'Could not get task from {regular_queue()}. Fuzzing.') - if not feature_flags.FeatureFlags.ENABLE_FUZZ_FOR_BOTS.enabled: + if (not feature_flags.FeatureFlags.ENABLE_FUZZ_FOR_BOTS.enabled or + environment.platform().lower() not in + feature_flags.FeatureFlags.ENABLE_FUZZ_FOR_BOTS.string_value): logs.warning('Fuzzing is disabled for long-lived bots.') return None diff --git a/src/clusterfuzz/_internal/tests/core/base/tasks/tasks_test.py b/src/clusterfuzz/_internal/tests/core/base/tasks/tasks_test.py index 2b6874a78b..c8d4f9ebb7 100644 --- a/src/clusterfuzz/_internal/tests/core/base/tasks/tasks_test.py +++ b/src/clusterfuzz/_internal/tests/core/base/tasks/tasks_test.py @@ -589,3 +589,72 @@ def test_fallback_to_random_choice(self): self.assertEqual(tasks.tworker_get_task(override_queue=''), 'task2') self.mock.get_postprocess_task.assert_called_once() self.mock.get_preprocess_task.assert_not_called() + + +class GetFuzzTaskFallbackTest(unittest.TestCase): + """Tests for get_task when falling back to fuzzing.""" + + def setUp(self): + helpers.patch(self, [ + 'clusterfuzz._internal.base.tasks.get_regular_task', + 'clusterfuzz._internal.base.tasks.get_postprocess_task', + 'clusterfuzz._internal.base.tasks.get_preprocess_task', + 'clusterfuzz._internal.base.tasks.get_fuzz_task', + 'clusterfuzz._internal.system.environment.platform', + 'clusterfuzz._internal.system.environment.is_android', + 'clusterfuzz._internal.base.tasks.allow_all_tasks', + ]) + self.mock.get_regular_task.return_value = None + self.mock.get_postprocess_task.return_value = None + self.mock.get_preprocess_task.return_value = None + self.mock.is_android.return_value = False + self.mock.allow_all_tasks.return_value = True + + self.mock.get_fuzz_task.return_value = 'fuzz_task' + self.mock.platform.return_value = 'LINUX' + + @mock.patch( + 'clusterfuzz._internal.base.feature_flags.FeatureFlags.enabled', + new_callable=mock.PropertyMock) + @mock.patch( + 'clusterfuzz._internal.base.feature_flags.FeatureFlags.string_value', + new_callable=mock.PropertyMock) + def test_fuzzing_disabled_by_flag(self, mock_string_value, mock_enabled): + """Test that fuzzing is not picked if flag is disabled.""" + mock_enabled.return_value = False + mock_string_value.return_value = 'linux' + + task = tasks.get_task() + self.assertIsNone(task) + self.mock.get_fuzz_task.assert_not_called() + + @mock.patch( + 'clusterfuzz._internal.base.feature_flags.FeatureFlags.enabled', + new_callable=mock.PropertyMock) + @mock.patch( + 'clusterfuzz._internal.base.feature_flags.FeatureFlags.string_value', + new_callable=mock.PropertyMock) + def test_fuzzing_disabled_by_platform_mismatch(self, mock_string_value, + mock_enabled): + """Test that fuzzing is not picked if platform does not match.""" + mock_enabled.return_value = True + mock_string_value.return_value = 'windows' + + task = tasks.get_task() + self.assertIsNone(task) + self.mock.get_fuzz_task.assert_not_called() + + @mock.patch( + 'clusterfuzz._internal.base.feature_flags.FeatureFlags.enabled', + new_callable=mock.PropertyMock) + @mock.patch( + 'clusterfuzz._internal.base.feature_flags.FeatureFlags.string_value', + new_callable=mock.PropertyMock) + def test_fuzzing_enabled(self, mock_string_value, mock_enabled): + """Test that fuzzing is picked if flag is enabled and platform matches.""" + mock_enabled.return_value = True + mock_string_value.return_value = 'linux,windows' + + task = tasks.get_task() + self.assertEqual(task, 'fuzz_task') + self.mock.get_fuzz_task.assert_called_once()