def setUp(self): test_fuzzer_jobs = { 'libFuzzer': [ 'libfuzzer_asan_job', 'libfuzzer_msan_job', 'libfuzzer_ubsan_job', 'libfuzzer_tsan_job', 'libfuzzer_cfi_job', ], 'afl': [ 'afl_asan_job', ], 'blackbox': [ 'asan_blackbox_job', ] } for fuzzer, jobs in test_fuzzer_jobs.items(): for job in jobs: data_types.Job(name=job).put() data_types.FuzzerJob(fuzzer=fuzzer, job=job).put() data_types.FuzzTargetsCount(id='libfuzzer_asan_job', count=10).put() data_types.FuzzTargetsCount(id='libfuzzer_msan_job', count=5).put() data_types.FuzzTargetsCount(id='libfuzzer_ubsan_job', count=5).put() data_types.FuzzTargetsCount(id='libfuzzer_tsan_job', count=5).put() data_types.FuzzTargetsCount(id='libfuzzer_cfi_job', count=5).put() data_types.FuzzTargetsCount(id='afl_asan_job', count=10).put()
def test_platform_restriction(self): """Ensure that we can find a task with a valid platform.""" windows_mapping = data_types.FuzzerJob() windows_mapping.fuzzer = 'wrong_fuzzer' windows_mapping.job = 'job_1' windows_mapping.platform = 'windows' windows_mapping.put() self.assertEqual( (None, None), fuzzer_selection.get_fuzz_task_payload(platform='linux')) linux_mapping = data_types.FuzzerJob() linux_mapping.fuzzer = 'right_fuzzer' linux_mapping.job = 'job_2' linux_mapping.platform = 'linux' linux_mapping.put() argument, job = fuzzer_selection.get_fuzz_task_payload('linux') self.assertEqual(('right_fuzzer', 'job_2'), (argument, job))
def test_unrelated_job_not_updated(self): """Ensure that we only update platform for the specified job's mappings.""" fuzzer_1_mapping = data_types.FuzzerJob() fuzzer_1_mapping.fuzzer = 'fuzzer_1' fuzzer_1_mapping.job = 'test_job' fuzzer_1_mapping.platform = 'wrong_platform' fuzzer_1_mapping.put() fuzzer_2_mapping = data_types.FuzzerJob() fuzzer_2_mapping.fuzzer = 'fuzzer_2' fuzzer_2_mapping.job = 'unrelated_job' fuzzer_2_mapping.platform = 'unrelated_platform' fuzzer_2_mapping.put() fuzzer_selection.update_platform_for_job('test_job', 'right_platform') query = data_types.FuzzerJob.query() query = query.filter(data_types.FuzzerJob.fuzzer == 'fuzzer_2') fuzzer_2_mapping = query.get() self.assertEqual(fuzzer_2_mapping.platform, 'unrelated_platform')
def test_jobs_updated(self): """Ensure that we properly update multiple jobs.""" fuzzer_1_mapping = data_types.FuzzerJob() fuzzer_1_mapping.fuzzer = 'fuzzer_1' fuzzer_1_mapping.job = 'test_job' fuzzer_1_mapping.platform = 'wrong_platform' fuzzer_1_mapping.put() fuzzer_2_mapping = data_types.FuzzerJob() fuzzer_2_mapping.fuzzer = 'fuzzer_2' fuzzer_2_mapping.job = 'test_job' fuzzer_2_mapping.platform = 'wrong_platform' fuzzer_2_mapping.put() fuzzer_selection.update_platform_for_job('test_job', 'right_platform') platforms = [ job.platform for job in ndb_utils.get_all_from_model(data_types.FuzzerJob) ] self.assertListEqual(platforms, ['right_platform', 'right_platform'])
def setUp(self): self.total_fuzzer_jobs = 7000 self.platforms = ['LINUX', 'WINDOWS'] fuzzer_jobs = [] for platform in self.platforms: for i in range(self.total_fuzzer_jobs): fuzzer_job = data_types.FuzzerJob( fuzzer='libFuzzer', job='libfuzzer_asan_{}_{:06d}'.format(platform, i), platform=platform) fuzzer_jobs.append(fuzzer_job) ndb.put_multi(fuzzer_jobs) # Should be removed. data_types.FuzzerJobs(id='LINUX-2', platform='LINUX').put()
def setUp(self): test_helpers.patch_environ(self) # Set up a Fuzzer. data_types.Fuzzer( revision=1, additional_environment_string= 'FUCHSIA_RESOURCES_URL = gs://fuchsia-on-clusterfuzz-v2/*', builtin=True, differential=False, file_size='builtin', jobs=['libfuzzer_asan_test_fuzzer'], name='libFuzzer', source='builtin', max_testcases=4).put() # Set up a FuzzerJob. data_types.FuzzerJob(fuzzer='libFuzzer', job='libfuzzer_asan_test_fuzzer', platform='FUCHSIA', weight=1.0).put() # Set up a FuzzTarget data_types.FuzzTarget(binary='libfuzzer_asan_test_fuzzer', engine='libFuzzer', project='test-project').put() # Set up a FuzzTargetJob data_types.FuzzTargetJob( engine='libFuzzer', fuzz_target_name='libFuzzer_libfuzzer_asan_test_fuzzer', job='libfuzzer_asan_test_fuzzer', weight=1.0).put() # Set up a Job data_types.Job(environment_string=( 'CUSTOM_BINARY = True\n' 'FUCHSIA_RESOURCES_URL = gs://fuchsia-on-clusterfuzz-v2/*\n' 'QUEUE_OVERRIDE=FUCHSIA\n' 'OS_OVERRIDE=FUCHSIA'), name='libfuzzer_asan_test_fuzzer', platform='FUCHSIA', templates=['libfuzzer', 'engine_asan']).put() # Set up a JobTemplate data_types.JobTemplate( name='libfuzzer', environment_string=('APP_NAME = launcher.py\n' 'MAX_FUZZ_THREADS = 1\n' 'MAX_TESTCASES = 4\n' 'FUZZ_TEST_TIMEOUT = 4800\n' 'TEST_TIMEOUT = 30\n' 'WARMUP_TIMEOUT = 30\n' 'BAD_BUILD_CHECK = False\n' 'THREAD_ALIVE_CHECK_INTERVAL = 1\n' 'REPORT_OOMS_AND_HANGS = True\n' 'CORPUS_FUZZER_NAME_OVERRIDE = libFuzzer\n' 'ENABLE_GESTURES = False\n' 'THREAD_DELAY = 30.0')).put() # Set up another JobTemplate data_types.JobTemplate( name='engine_asan', environment_string= ('LSAN = True\n' 'ADDITIONAL_ASAN_OPTIONS = quarantine_size_mb=64:strict_memcmp=1' ':symbolize=0:fast_unwind_on_fatal=0' ':allocator_release_to_os_interval_ms=500\n')).put() environment.set_value('QUEUE_OVERRIDE', 'FUCHSIA') environment.set_value('OS_OVERRIDE', 'FUCHSIA') environment.set_value('FUCHSIA_RESOURCES_URL', 'gs://fuchsia-on-clusterfuzz-v2/*') # set_bot_environment gives us access to RESOURCES_DIR environment.set_bot_environment() # Cannot simply call super(TestLauncherFuchsia).setUp, because the # with_cloud_emulators decorator modifies what the parent class would be. # Just explicitly call BaseLauncherTest's setUp. BaseLauncherTest.setUp(self)
def setUp(self): BaseIntegrationTest.setUp(self) # Set up a Fuzzer. data_types.Fuzzer( revision=1, additional_environment_string= 'FUCHSIA_BUILD_URL = gs://fuchsia-clusterfuzz-test-august-12-2019/*\n', builtin=True, differential=False, file_size='builtin', jobs=['libfuzzer_asan_test_fuzzer'], name='libFuzzer', source='builtin', max_testcases=4).put() # Set up a FuzzerJob. data_types.FuzzerJob( fuzzer='libFuzzer', job='libfuzzer_asan_test_fuzzer', platform='FUCHSIA', weight=1.0).put() # Set up a FuzzTarget data_types.FuzzTarget( binary='libfuzzer_asan_test_fuzzer', engine='libFuzzer', project='test-project').put() # Set up a FuzzTargetJob data_types.FuzzTargetJob( engine='libFuzzer', fuzz_target_name='libFuzzer_libfuzzer_asan_test_fuzzer', job='libfuzzer_asan_test_fuzzer', weight=1.0).put() # Set up a Job data_types.Job( environment_string=( 'CUSTOM_BINARY = True\n' 'FUCHSIA_BUILD_URL = gs://fuchsia-clusterfuzz-test-august-12-2019/*' '\n' 'QUEUE_OVERRIDE=FUCHSIA\n' 'OS_OVERRIDE=FUCHSIA'), name='libfuzzer_asan_test_fuzzer', platform='FUCHSIA', templates=['libfuzzer', 'engine_asan']).put() # Set up a JobTemplate data_types.JobTemplate( name='libfuzzer', environment_string=('MAX_FUZZ_THREADS = 1\n' 'MAX_TESTCASES = 4\n' 'FUZZ_TEST_TIMEOUT = 4800\n' 'TEST_TIMEOUT = 30\n' 'WARMUP_TIMEOUT = 30\n' 'BAD_BUILD_CHECK = False\n' 'THREAD_ALIVE_CHECK_INTERVAL = 1\n' 'REPORT_OOMS_AND_HANGS = True\n' 'CORPUS_FUZZER_NAME_OVERRIDE = libFuzzer\n' 'ENABLE_GESTURES = False\n' 'THREAD_DELAY = 30.0')).put() # Set up another JobTemplate data_types.JobTemplate( name='engine_asan', environment_string=( 'LSAN = True\n' 'ADDITIONAL_ASAN_OPTIONS = quarantine_size_mb=64:strict_memcmp=1' ':symbolize=0:fast_unwind_on_fatal=0' ':allocator_release_to_os_interval_ms=500\n')).put() environment.set_value('QUEUE_OVERRIDE', 'FUCHSIA') environment.set_value('OS_OVERRIDE', 'FUCHSIA') environment.set_value('FUCHSIA_BUILD_URL', 'gs://fuchsia-clusterfuzz-test-august-12-2019/*') self.tmp_resources_dir = tempfile.mkdtemp() environment.set_value('RESOURCES_DIR', self.tmp_resources_dir)