def setUp(self):
    helpers.patch_environ(self)

    job = data_types.Job()
    job.name = 'job_with_help_format'
    job.environment_string = (
        'HELP_FORMAT = -%TESTCASE%\\n-%FUZZER_NAME%\\n-%FUZZ_TARGET%\\n'
        '-%PROJECT%\\n-%REVISION%\\n-%ENGINE%\\n-%SANITIZER%\\n%ARGS%\\n'
        '%SANITIZER_OPTIONS%\n'
        'PROJECT_NAME = test_project')
    job.put()

    job = data_types.Job()
    job.name = 'ubsan_job_without_help_format'
    job.environment_string = (
        'PROJECT_NAME = test_project\n'
        'APP_ARGS = '
        '--disable-logging --disable-experiments --testcase=%TESTCASE_HTTP_URL%'
    )
    job.put()

    fuzz_target = data_types.FuzzTarget(id='libFuzzer_test_project_test_fuzzer')
    fuzz_target.binary = 'test_fuzzer'
    fuzz_target.project = 'test_project'
    fuzz_target.engine = 'libFuzzer'
    fuzz_target.put()
예제 #2
0
    def setUp(self):
        test_helpers.patch(self, [
            'libs.auth.get_current_user',
            'libs.auth.is_current_user_admin',
            'handlers.fuzzer_stats.build_results',
        ])

        self.mock.build_results.return_value = json.dumps({})

        flaskapp = flask.Flask('testflask')
        flaskapp.add_url_rule(
            '/fuzzer-stats/load',
            view_func=fuzzer_stats.LoadHandler.as_view('/fuzzer-stats/load'))
        self.app = webtest.TestApp(flaskapp)

        data_types.ExternalUserPermission(
            email='*****@*****.**',
            entity_kind=data_types.PermissionEntityKind.JOB,
            entity_name='job1',
            is_prefix=False,
            auto_cc=data_types.AutoCCType.ALL).put()

        data_types.ExternalUserPermission(
            email='*****@*****.**',
            entity_kind=data_types.PermissionEntityKind.JOB,
            entity_name='job2',
            is_prefix=False,
            auto_cc=data_types.AutoCCType.ALL).put()

        data_types.Job(name='job1').put()
        data_types.Job(name='job2').put()
        data_types.Job(name='job3').put()
예제 #3
0
    def setUp(self):
        job_1 = data_types.Job()
        job_1.name = 'job_1'
        job_1.environment_string = 'test = 1'
        job_1.put()

        job_2 = data_types.Job()
        job_2.name = 'job_2'
        job_2.environment_string = 'test = 2'
        job_2.put()
  def setUp(self):
    flaskapp = flask.Flask('testflask')
    flaskapp.add_url_rule(
        '/schedule-open-reproducible-testcase-tasks',
        view_func=recurring_tasks.OpenReproducibleTestcaseTasksScheduler.
        as_view('/schedule-open-reproducible-testcase-tasks'))
    self.app = webtest.TestApp(flaskapp)

    self.testcase_0 = data_types.Testcase(
        open=True,
        one_time_crasher_flag=False,
        status='Processed',
        job_type='job',
        queue='jobs-linux')
    self.testcase_0.put()

    self.testcase_1 = data_types.Testcase(
        open=False,
        one_time_crasher_flag=False,
        status='Processed',
        job_type='job',
        queue='jobs-linux')
    self.testcase_1.put()

    self.testcase_2 = data_types.Testcase(
        open=True,
        one_time_crasher_flag=True,
        status='Processed',
        job_type='job',
        queue='jobs-linux')
    self.testcase_2.put()

    self.testcase_3 = data_types.Testcase(
        open=True,
        one_time_crasher_flag=False,
        status='NA',
        job_type='job',
        queue='jobs-linux')
    self.testcase_3.put()

    self.testcase_4 = data_types.Testcase(
        open=True,
        one_time_crasher_flag=False,
        status='Processed',
        job_type='job_windows',
        queue='jobs-windows')
    self.testcase_4.put()

    data_types.Job(name='job', environment_string='', platform='LINUX').put()
    data_types.Job(
        name='job_windows', environment_string='', platform='WINDOWS').put()

    helpers.patch(self, [
        'handlers.base_handler.Handler.is_cron',
    ])
예제 #5
0
    def setUp(self):
        helpers.patch_environ(self)
        helpers.patch(self, [
            'clusterfuzz._internal.google_cloud_utils.blobs.read_key',
        ])

        self.mock.read_key.return_value = b'reproducer'

        self.client = pubsub.PubSubClient()
        self.topic = pubsub.topic_name('proj', 'repro')
        self.client.create_topic(self.topic)
        self.subscription = pubsub.subscription_name('proj', 'repro')
        self.client.create_subscription(self.subscription, self.topic)

        data_types.Job(
            name='libfuzzer_asan_blah_external',
            platform='LINUX',
            environment_string=
            ('RELEASE_BUILD_BUCKET_PATH = gs://bucket/a/b/release-([0-9]+).zip\n'
             'PROJECT_NAME = proj\n'),
            external_reproduction_topic=self.topic,
            external_updates_subscription='projects/proj/subscriptions/updates'
        ).put()

        data_types.Job(
            name='libfuzzer_msan_blah_external',
            platform='LINUX',
            environment_string=(
                'FUZZ_TARGET_BUILD_BUCKET_PATH = '
                'gs://bucket/a/b/%TARGET%/release-([0-9]+).zip\n'
                'PROJECT_NAME = proj\n'),
            external_reproduction_topic=self.topic,
            external_updates_subscription='projects/proj/subscriptions/updates'
        ).put()

        data_types.FuzzTarget(id='libFuzzer_abc',
                              engine='libFuzzer',
                              binary='abc').put()

        self.testcase_0 = data_types.Testcase(
            fuzzer_name='libFuzzer',
            overridden_fuzzer_name='libFuzzer_abc',
            crash_revision=1336,
            minimized_keys='key')
        self.testcase_0.set_metadata('last_tested_revision', 1337)
        self.testcase_0.put()

        self.testcase_1 = data_types.Testcase(
            fuzzer_name='libFuzzer',
            overridden_fuzzer_name='libFuzzer_abc',
            crash_revision=1336,
            fuzzed_keys='key')
        self.testcase_1.put()
  def test_record_fuzz_target_ossfuzz(self, binary_name):
    """Test that record_fuzz_target works with OSS-Fuzz projects."""
    self.mock.is_oss_fuzz.return_value = True
    data_types.Job(name='job', environment_string='PROJECT_NAME = proj\n').put()

    data_handler.record_fuzz_target('libFuzzer', binary_name, 'job')
    fuzz_target = ndb.Key(data_types.FuzzTarget, 'libFuzzer_proj_child').get()
    self.assertDictEqual({
        'binary': binary_name,
        'engine': 'libFuzzer',
        'project': 'proj',
    }, fuzz_target.to_dict())

    job_mapping = ndb.Key(data_types.FuzzTargetJob,
                          'libFuzzer_proj_child/job').get()
    self.assertDictEqual({
        'fuzz_target_name': 'libFuzzer_proj_child',
        'job': 'job',
        'engine': 'libFuzzer',
        'last_run': datetime.datetime(2018, 1, 1, 0, 0),
        'weight': 1.0,
    }, job_mapping.to_dict())

    self.assertEqual('libFuzzer_proj_child', fuzz_target.fully_qualified_name())
    self.assertEqual('proj_child', fuzz_target.project_qualified_name())
예제 #7
0
    def setUp(self):
        self.maxDiff = None  # pylint: disable=invalid-name
        test_helpers.patch_environ(self)
        test_helpers.patch(self, [
            'clusterfuzz._internal.google_cloud_utils.blobs.get_blob_info',
            'clusterfuzz._internal.google_cloud_utils.blobs.write_blob',
            'libs.access.has_access',
            'libs.helpers.get_user_email',
            'clusterfuzz._internal.base.utils.current_date_time',
            'clusterfuzz._internal.base.utils.utcnow',
        ])

        self.mock.get_blob_info.return_value.filename = 'input'
        self.mock.get_blob_info.return_value.key.return_value = 'blob_key'
        self.mock.write_blob.return_value = 'blob_key'
        self.mock.has_access.return_value = True
        self.mock.current_date_time.return_value = '2021-01-01 00:00:00 UTC'
        self.mock.utcnow.return_value = datetime.datetime(2021, 1, 1)
        self.mock.get_user_email.return_value = 'uploader@email'

        data_types.FuzzTarget(engine='libFuzzer',
                              project='test-project',
                              binary='binary').put()

        data_types.Job(name='libfuzzer_proj_external',
                       environment_string='PROJECT_NAME = proj',
                       platform='LINUX',
                       external_reproduction_topic='topic',
                       external_updates_subscription='sub').put()

        self.app = flask.Flask('testflask')
        self.app.add_url_rule(
            '/', view_func=upload_testcase.UploadHandlerOAuth.as_view(''))
    def setUp(self):
        BaseTest.setUp(self)
        self.fuchsia_corpus_dir = os.path.join(self.corpus_bucket, 'fuchsia')
        shutil.copytree(os.path.join(TEST_DIR, 'fuchsia'),
                        self.fuchsia_corpus_dir)
        self.temp_dir = tempfile.mkdtemp()
        builds_dir = os.path.join(self.temp_dir, 'builds')
        os.mkdir(builds_dir)
        urls_dir = os.path.join(self.temp_dir, 'urls')
        os.mkdir(urls_dir)

        environment.set_value('BUILDS_DIR', builds_dir)
        environment.set_value('BUILD_URLS_DIR', urls_dir)
        environment.set_value('QUEUE_OVERRIDE', 'FUCHSIA')
        environment.set_value('OS_OVERRIDE', 'FUCHSIA')

        env_string = ('RELEASE_BUILD_BUCKET_PATH = '
                      'gs://clusterfuchsia-builds-test/libfuzzer/'
                      'fuchsia-([0-9]+).zip')
        commands.update_environment_for_job(env_string)

        data_types.Job(name='libfuzzer_asan_fuchsia',
                       platform='FUCHSIA',
                       environment_string=env_string).put()
        data_types.FuzzTarget(binary='example-fuzzers/crash_fuzzer',
                              engine='libFuzzer',
                              project='fuchsia').put()

        environment.set_value('UNPACK_ALL_FUZZ_TARGETS_AND_FILES', True)
        helpers.patch(self, [
            'clusterfuzz._internal.system.shell.clear_temp_directory',
        ])
예제 #9
0
    def setUp(self):
        helpers.patch_environ(self)
        helpers.patch(self, [
            'clusterfuzz._internal.base.persistent_cache.get_value',
            'clusterfuzz._internal.base.persistent_cache.set_value',
            'clusterfuzz._internal.base.utils.utcnow',
            'time.sleep',
        ])

        self.mock.get_value.return_value = None
        self.mock.sleep.return_value = None
        data_types.Job(name='job').put()

        client = pubsub.PubSubClient()
        topic = pubsub.topic_name('test-clusterfuzz', 'jobs-linux')
        client.create_topic(topic)
        client.create_subscription(
            pubsub.subscription_name('test-clusterfuzz', 'jobs-linux'), topic)

        topic = pubsub.topic_name('test-clusterfuzz', 'high-end-jobs-linux')
        client.create_topic(topic)
        client.create_subscription(
            pubsub.subscription_name('test-clusterfuzz',
                                     'high-end-jobs-linux'), topic)

        self.mock.utcnow.return_value = test_utils.CURRENT_TIME.replace(
            microsecond=0)
    def setUp(self):
        test_helpers.patch_environ(self)
        flaskapp = flask.Flask('testflask')
        flaskapp.add_url_rule(
            '/apply-ccs',
            view_func=oss_fuzz_apply_ccs.Handler.as_view('/apply-ccs'))
        self.app = webtest.TestApp(flaskapp)

        data_types.ExternalUserPermission(
            email='*****@*****.**',
            entity_name='job',
            entity_kind=data_types.PermissionEntityKind.JOB,
            is_prefix=False,
            auto_cc=data_types.AutoCCType.ALL).put()

        data_types.ExternalUserPermission(
            email='*****@*****.**',
            entity_name='job',
            entity_kind=data_types.PermissionEntityKind.JOB,
            is_prefix=False,
            auto_cc=data_types.AutoCCType.ALL).put()

        test_helpers.patch(self, [
            'clusterfuzz._internal.base.utils.utcnow',
            'handlers.base_handler.Handler.is_cron',
            'libs.issue_management.issue_tracker.IssueTracker.get_original_issue',
            'libs.issue_management.issue_tracker_policy.get',
            'libs.issue_management.issue_tracker_utils.'
            'get_issue_tracker_for_testcase',
        ])

        self.itm = IssueTrackerManager('oss-fuzz')
        self.mock.get_issue_tracker_for_testcase.return_value = (
            monorail.IssueTracker(self.itm))
        self.mock.utcnow.return_value = datetime.datetime(2016, 1, 1)
        self.mock.get.return_value = OSS_FUZZ_POLICY
        self.mock.get_original_issue.side_effect = get_original_issue

        self.job = data_types.Job(name='job', environment_string='')
        self.job.put()

        data_types.Testcase(open=True,
                            status='Processed',
                            bug_information='1337',
                            job_type='job').put()

        data_types.Testcase(open=True,
                            status='Processed',
                            bug_information='1338',
                            job_type='job').put()

        data_types.Testcase(open=True,
                            status='Processed',
                            bug_information='1339',
                            job_type='job').put()

        data_types.Testcase(open=True,
                            status='Processed',
                            bug_information='1340',
                            job_type='job').put()
예제 #11
0
 def test_get_from_job(self):
   """Test getting from job."""
   data_types.Job(
       name='job',
       environment_string=('ISSUE_TRACKER = from_job\n'
                           'HELP_URL = help_url\n')).put()
   self.assertEqual('from_job', data_handler.get_issue_tracker_name('job'))
예제 #12
0
    def setUp(self):
        """Prepare testcases to file to GitHub."""
        data_types.Job(name='job1',
                       environment_string=JOB1_ENVIRONMENT,
                       platform='linux').put()

        data_types.Job(name='job2',
                       environment_string=JOB2_ENVIRONMENT,
                       platform='linux').put()

        data_types.Job(name='job3',
                       environment_string=JOB3_ENVIRONMENT,
                       platform='linux').put()

        data_types.Job(name='job4',
                       environment_string=JOB4_ENVIRONMENT,
                       platform='linux').put()

        testcase_args1 = {
            'bug_information': '300',
        }

        testcase_args2 = {
            'bug_information': '300',
            'github_repo_id': GITHUB_REPO_ID,
            'github_issue_num': GITHUB_ISSUE_NUM,
        }

        self.testcase1 = data_types.Testcase(job_type='job1', **testcase_args1)
        self.testcase1.put()

        self.testcase2 = data_types.Testcase(job_type='job2', **testcase_args1)
        self.testcase2.put()

        self.testcase3 = data_types.Testcase(job_type='job3', **testcase_args1)
        self.testcase3.put()

        self.testcase4 = data_types.Testcase(job_type='job1', **testcase_args2)
        self.testcase4.put()

        self.testcase5 = data_types.Testcase(job_type='job4', **testcase_args1)
        self.testcase5.put()

        test_helpers.patch(self, [
            'clusterfuzz._internal.config.db_config.get_value',
        ])
        self.mock.get_value.return_value = GITHUB_ACCESS_TOKEN
예제 #13
0
 def test_get_from_job(self):
   """Test getting from job."""
   data_types.Job(
       name='job',
       environment_string=('PROJECT_NAME = from_internal_project\n'
                           'HELP_URL = help_url\n')).put()
   self.assertEqual('from_internal_project',
                    data_handler.get_project_name('job'))
예제 #14
0
 def test_not_found(self):
     """Test target not found."""
     data_types.Job(name='job', environment_string='').put()
     with self.assertRaises(helpers.EarlyExitException):
         self.assertEqual(
             (None, None),
             upload_testcase.find_fuzz_target('libFuzzer', 'notfound',
                                              'job'))
예제 #15
0
 def test_without_project_prefix(self):
     """Test find_fuzz_target with a target_name that isn't prefixed with the
 project."""
     data_types.Job(name='job',
                    environment_string='PROJECT_NAME = proj\n').put()
     self.assertEqual(
         ('libFuzzer_proj_binary', 'binary'),
         upload_testcase.find_fuzz_target('libFuzzer', 'binary', 'job'))
예제 #16
0
    def test_no_mappings(self):
        """Ensure that we do nothing if a job has no mappings."""
        job = data_types.Job()
        job.name = 'no_mappings'
        job.put()

        fuzzer_selection.update_mappings_for_job(job, [])

        self.assertEqual(_get_fuzzer_list_for_job(job), [])
예제 #17
0
    def setUp(self):
        helpers.patch_environ(self)

        data_types.Job(
            name='linux_asan_chrome',
            environment_string=('APP_ARGS = --orig-arg1 --orig-arg2')).put()
        data_types.Job(
            name='linux_msan_chrome_variant',
            environment_string=(
                'APP_ARGS = --arg1 --arg2 --arg3="--flag1 --flag2"')).put()

        data_types.Job(name='libfuzzer_asan_chrome',
                       environment_string=('')).put()
        data_types.Job(name='libfuzzer_msan_chrome_variant',
                       environment_string=('')).put()
        data_types.Job(name='afl_asan_chrome_variant',
                       environment_string=('')).put()

        self.testcase = test_utils.create_generic_testcase()
예제 #18
0
    def test_new_addition(self):
        """Ensure that we add mappings for a new job."""
        job = data_types.Job()
        job.name = 'new_addition'
        job.put()

        fuzzer_selection.update_mappings_for_job(job, ['fuzzer_1', 'fuzzer_2'])

        mappings = _get_fuzzer_list_for_job(job)
        self.assertIn('fuzzer_1', mappings)
        self.assertIn('fuzzer_2', mappings)
예제 #19
0
  def test_get_components_list_no_exact_matches(self):
    """Test get_components_list (no exact matches)."""
    data_types.Job(
        name='libfuzzer_asan_php',
        environment_string=('PROJECT_NAME = php\n'
                            'HELP_URL = help_url\n')).put()
    revisions_dict = {
        '/src/afl': {
            'type': 'git',
            'url': 'https://github.com/AFLplusplus/AFLplusplus.git',
            'rev': '7cfa690d1c677e04e0935d6ac3c6b94b5fed50ad'
        },
        '/src/PHP-src': {
            'type': 'git',
            'url': 'https://github.com/php/php-src.git',
            'rev': '853b7945bc6c97d7d1643f5f8b22851e323829cd'
        },
        '/src/php-src/oniguruma': {
            'type': 'git',
            'url': 'https://github.com/kkos/oniguruma.git',
            'rev': '2b7b94122c696ffb5ed7fbe9a42c73d4563e3498'
        },
    }

    expected_components_list = [
        '/src/PHP-src', '/src/afl', '/src/php-src/oniguruma'
    ]
    actual_components_list = revisions.get_components_list(
        revisions_dict, 'libfuzzer_asan_php')
    self.assertEqual(expected_components_list, actual_components_list)

    revisions_dict = {
        '/src/afl': {
            'type': 'git',
            'url': 'https://github.com/AFLplusplus/AFLplusplus.git',
            'rev': '7cfa690d1c677e04e0935d6ac3c6b94b5fed50ad'
        },
        '/src/php-src': {
            'type': 'git',
            'url': 'https://github.com/php/php-src.git',
            'rev': '853b7945bc6c97d7d1643f5f8b22851e323829cd'
        },
        '/src/php': {
            'type': 'git',
            'url': 'https://github.com/kkos/oniguruma.git',
            'rev': '2b7b94122c696ffb5ed7fbe9a42c73d4563e3498'
        },
    }

    expected_components_list = ['/src/php', '/src/afl', '/src/php-src']
    actual_components_list = revisions.get_components_list(
        revisions_dict, 'libfuzzer_asan_php')
    self.assertEqual(expected_components_list, actual_components_list)
예제 #20
0
    def setUp(self):
        job = data_types.Job(name='test_job',
                             environment_string='X = 1\nY = 2\n')
        job.put()

        testcase = data_types.Testcase()
        testcase.status = 'Pending'
        testcase.open = True
        testcase.job_type = 'test_job'
        testcase.put()

        self.testcase = testcase
예제 #21
0
  def setUp(self):
    flaskapp = flask.Flask('testflask')
    flaskapp.add_url_rule(
        '/external-update', view_func=external_update.Handler.as_view(''))
    self.app = webtest.TestApp(flaskapp)

    test_helpers.patch(self, [
        'clusterfuzz._internal.base.utils.utcnow',
        'google.oauth2.id_token.verify_oauth2_token',
    ])

    self.mock.verify_oauth2_token.return_value = {
        'email_verified': True,
        'email': '*****@*****.**',
    }
    self.mock.utcnow.return_value = datetime.datetime(2021, 1, 1)

    data_types.Job(
        name='libfuzzer_external_job',
        external_reproduction_topic='topic',
        external_updates_subscription='subscription').put()
    data_types.Job(name='job').put()

    data_types.FuzzTarget(engine='libFuzzer', binary='fuzzer').put()

    self.testcase = data_types.Testcase(
        open=True,
        status='Processed',
        fuzzer_name='libFuzzer',
        overridden_fuzzer_name='libFuzzer_fuzzer',
        job_type='libfuzzer_external_job',
        crash_state=('blink::InputTypeView::element\n'
                     'blink::TextFieldInputType::didSetValueByUserEdit\n'
                     'blink::TextFieldInputType::subtreeHasChanged\n'),
        crash_revision=1336,
        crash_stacktrace='original',
        last_tested_crash_stacktrace='last_tested',
        crash_type='',
        security_flag=True)
    self.testcase.put()
예제 #22
0
  def setUp(self):
    helpers.patch_environ(self)
    helpers.patch(self, [
        'clusterfuzz._internal.base.utils.default_project_name',
        'clusterfuzz._internal.base.memoize.FifoOnDisk.get',
        'clusterfuzz._internal.base.memoize.FifoOnDisk.put',
        'clusterfuzz._internal.config.local_config.ProjectConfig',
    ])

    self.mock.get.return_value = None
    self.mock.default_project_name.return_value = 'project'
    self.mock.ProjectConfig.return_value = mock_config.MockConfig({
        'env': {
            'REVISION_VARS_URL':
                'https://chromium.googlesource.com/chromium/src/+/%s/DEPS'
                '?format=text'
        }
    })

    os.environ['REVISION_VARS_URL'] = (
        'https://chromium.googlesource.com/chromium/src/+/%s/DEPS?format=text')
    data_types.Job(
        name=ANDROID_JOB_TYPE,
        environment_string=(
            'HELP_URL = help_url\n'
            'REVISION_VARS_URL = https://commondatastorage.googleapis.com/'
            'chrome-test-builds/android/revisions/%s')).put()
    data_types.Job(
        name=BASIC_JOB_TYPE,
        environment_string=('HELP_URL = help_url\n')).put()
    data_types.Job(
        name=SRCMAP_JOB_TYPE,
        environment_string=(
            'PROJECT_NAME = libass\n'
            'HELP_URL = help_url\n'
            'REVISION_VARS_URL = https://commondatastorage.googleapis.com/'
            'blah-%s.srcmap.json')).put()
    data_types.Job(
        name=CUSTOM_BINARY_JOB_TYPE,
        environment_string=('CUSTOM_BINARY = True\n')).put()
예제 #23
0
    def test_mapping_removed(self):
        """Ensure that mappings are removed properly."""
        job = data_types.Job()
        job.name = 'remove_fuzzer'
        job.put()

        self.fuzzer_1.jobs.append('remove_fuzzer')
        self.fuzzer_1.put()

        fuzzer_selection.update_mappings_for_job(job, [])

        mappings = _get_fuzzer_list_for_job(job)
        self.assertEqual([], mappings)
예제 #24
0
    def setUp(self):
        test_helpers.patch_environ(self)
        flaskapp = flask.Flask('testflask')
        flaskapp.add_url_rule(
            '/schedule-ml-train-tasks',
            view_func=ml_train.Handler.as_view('/schedule-ml-train-tasks'))
        self.app = webtest.TestApp(flaskapp)

        test_helpers.patch(self, [
            'clusterfuzz._internal.base.tasks.add_task',
            'handlers.base_handler.Handler.is_cron',
            'clusterfuzz._internal.metrics.logs.log_error'
        ])

        # Create fake jobs.
        data_types.Job(
            name='libfuzzer_asan',
            environment_string='ML_MODELS_TO_USE = rnn_generator').put()
        data_types.Job(name='libfuzzer_msan', environment_string='').put()
        data_types.Job(name='afl_asan', environment_string='').put()

        data_types.Job(
            name='libfuzzer_asan_invalid',
            environment_string='ML_MODELS_TO_USE = invalid_model\n').put()

        # Create fake fuzzers.
        data_types.Fuzzer(name='afl', jobs=['afl_asan']).put()

        # Create fake child fuzzers.
        data_types.FuzzTarget(engine='libFuzzer',
                              binary='fake_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='libFuzzer_fake_fuzzer',
                                 job='libfuzzer_asan').put()
        data_types.FuzzTarget(engine='afl',
                              binary='fake_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='afl_fake_fuzzer',
                                 job='afl_asan').put()
예제 #25
0
    def setUp(self):
        helpers.patch_environ(self)

        helpers.patch(self, [
            'clusterfuzz._internal.build_management.build_manager.get_primary_bucket_path',
            'clusterfuzz._internal.build_management.build_manager.get_revisions_list',
            'clusterfuzz._internal.build_management.revisions.get_component_range_list',
            'clusterfuzz._internal.config.local_config.ProjectConfig',
            'clusterfuzz._internal.google_cloud_utils.blobs.read_key',
            'clusterfuzz._internal.google_cloud_utils.pubsub.PubSubClient.publish',
        ])
        self.mock.ProjectConfig.return_value = mock_config.MockConfig({
            'env': {
                'PROJECT_NAME': 'test-project',
            },
            'bisect_service': {
                'pubsub_topic': '/projects/project/topics/topic',
            }
        })

        data_types.FuzzTarget(id='libFuzzer_proj_target',
                              engine='libFuzzer',
                              project='proj',
                              binary='target').put()

        self.testcase = data_types.Testcase(
            timestamp=datetime.datetime(2021, 1, 1),
            crash_type='crash-type',
            crash_state='A\nB\nC',
            security_flag=True,
            bug_information='1337',
            job_type='libfuzzer_asan_proj',
            fuzzer_name='libFuzzer',
            overridden_fuzzer_name='libFuzzer_proj_target',
            regression='123:456',
            fixed='123:456',
            crash_revision=3,
            security_severity=data_types.SecuritySeverity.MEDIUM,
            additional_metadata='{"last_tested_crash_revision": 4}')
        self.testcase.put()

        data_types.Job(
            name='libfuzzer_asan_proj',
            environment_string='MAIN_REPO = https://repo_url').put()

        self.mock.read_key.return_value = b'reproducer'
        self.mock.get_component_range_list.return_value = [
            {
                'link_text': 'old:new',
            },
        ]
    def setUp(self):
        """Set up."""
        super(UntrustedRunnerIntegrationTest, self).setUp()
        data_types.Config().put()

        environment_string = ('APP_NAME = app\n'
                              'RELEASE_BUILD_BUCKET_PATH = '
                              'gs://clusterfuzz-test-data/test_builds/'
                              'test-build-([0-9]+).zip\n')
        data_types.Job(name='job', environment_string=environment_string).put()

        environment_string = (
            'RELEASE_BUILD_BUCKET_PATH = '
            'gs://clusterfuzz-test-data/test_libfuzzer_builds/'
            'test-libfuzzer-build-([0-9]+).zip\n'
            'UNPACK_ALL_FUZZ_TARGETS_AND_FILES = True')
        data_types.Job(name='libfuzzer_asan_job',
                       environment_string=environment_string).put()

        data_types.Fuzzer(name='fuzzer', data_bundle_name='bundle').put()

        data_types.DataBundle(name='bundle',
                              is_local=True,
                              sync_to_worker=True).put()
예제 #27
0
    def _create_job(self,
                    name,
                    environment_string,
                    description='',
                    platform='LINUX'):
        """Create a test job."""
        job = data_types.Job()
        job.name = name
        if environment_string.strip():
            job.environment_string = environment_string
        job.platform = platform
        job.descripton = description
        job.put()

        return job
예제 #28
0
    def test_mapping_added(self):
        """Ensure that we properly add mappings for existing jobs."""
        job = data_types.Job()
        job.name = 'adding_fuzzers'
        job.put()

        fuzzer_selection.update_mappings_for_job(job, ['fuzzer_1'])

        mappings = _get_fuzzer_list_for_job(job)
        self.assertIn('fuzzer_1', mappings)
        self.assertNotIn('fuzzer_2', mappings)

        fuzzer_selection.update_mappings_for_job(job, ['fuzzer_1', 'fuzzer_2'])

        mappings = _get_fuzzer_list_for_job(job)
        self.assertIn('fuzzer_1', mappings)
        self.assertIn('fuzzer_2', mappings)
  def setUp(self):
    """Set up."""
    super().setUp()
    environment.set_value('JOB_NAME', 'libfuzzer_asan_job')

    job = data_types.Job(
        name='libfuzzer_asan_job',
        environment_string=(
            'RELEASE_BUILD_BUCKET_PATH = '
            'gs://clusterfuzz-test-data/test_libfuzzer_builds/'
            'test-libfuzzer-build-([0-9]+).zip\n'
            'REVISION_VARS_URL = https://commondatastorage.googleapis.com/'
            'clusterfuzz-test-data/test_libfuzzer_builds/'
            'test-libfuzzer-build-%s.srcmap.json\n'))
    job.put()

    self.temp_dir = tempfile.mkdtemp(dir=environment.get_value('FUZZ_INPUTS'))
예제 #30
0
    def test_mapping_substituted(self):
        """Ensure that mappings are substituted properly."""
        job = data_types.Job()
        job.name = 'substitute_fuzzers'
        job.put()

        fuzzer_selection.update_mappings_for_job(job, ['fuzzer_1'])

        mappings = _get_fuzzer_list_for_job(job)
        self.assertIn('fuzzer_1', mappings)
        self.assertNotIn('fuzzer_2', mappings)

        fuzzer_selection.update_mappings_for_job(job, ['fuzzer_2'])

        mappings = _get_fuzzer_list_for_job(job)
        self.assertNotIn('fuzzer_1', mappings)
        self.assertIn('fuzzer_2', mappings)