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()
Example #2
0
    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))
Example #3
0
    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')
Example #4
0
    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'])
Example #5
0
    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()
Example #6
0
    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)
Example #7
0
  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)