Exemplo n.º 1
0
  def setUp(self):
    self.suppress_logging_methods()
    self.chrome_src = '/usr/local/google/home/user/repos/chromium/src'
    self.mock_os_environment({'V8_SRC': '/v8/src', 'CHROME_SRC': '/pdf/src'})
    helpers.patch(self, [
        'clusterfuzz.common.ensure_important_dirs',
        'clusterfuzz.commands.reproduce.create_builder_class',
        'clusterfuzz.commands.reproduce.get_definition',
        'clusterfuzz.commands.reproduce.get_testcase_and_identity',
        'clusterfuzz.testcase.Testcase.get_testcase_path',
    ])
    self.builder = mock.Mock(symbolizer_path='/path/to/symbolizer')
    self.reproducer = mock.Mock()
    self.definition = mock.Mock()

    self.definition.reproducer.return_value = self.reproducer

    self.mock.get_definition.return_value = self.definition
    self.mock.create_builder_class.return_value = self.builder

    self.testcase = mock.Mock(
        id='1234', build_url='chrome_build_url', revision=123456,
        job_type='linux_asan_d8', reproducible=True,
        reproduction_args='--always-opt', platform='linux')
    self.mock.get_testcase_and_identity.return_value = (
        self.testcase, 'identity@something')
    self.options = libs.make_options(
        testcase_id=str(self.testcase.id),
        extra_log_params={
            'identity': 'identity@something',
            'job_type': self.testcase.job_type,
            'platform': self.testcase.platform,
            'reproducible': self.testcase.reproducible
        }
    )
Exemplo n.º 2
0
    def test_correct_calls(self):
        """Tests the correct checks and commands are run to build."""

        revision_num = 12345
        testcase_id = 54321
        chrome_source = '/chrome/source'
        testcase = mock.Mock(id=testcase_id,
                             build_url='',
                             revision=revision_num)
        self.mock_os_environment({'V8_SRC': chrome_source})
        definition = mock.Mock(source_var='V8_SRC', binary_name='binary')
        builder = binary_providers.V8Builder(testcase, definition,
                                             libs.make_options())
        builder.build_directory = '/chrome/source/out/clusterfuzz_54321'
        builder.build_target()

        self.assert_exact_calls(self.mock.execute, [
            mock.call('gclient', 'sync --no-history --shallow', chrome_source),
            mock.call('gclient', 'runhooks', chrome_source),
            mock.call('python', 'tools/clang/scripts/update.py',
                      chrome_source),
            mock.call(
                'ninja',
                ("-w 'dupbuild=err' -C /chrome/source/out/clusterfuzz_54321 "
                 '-j 120 -l 8 d8'),
                chrome_source,
                capture_output=False,
                stdout_transformer=mock.ANY)
        ])
        self.assertIsInstance(
            self.mock.execute.call_args[1]['stdout_transformer'],
            output_transformer.Ninja)
        self.assert_exact_calls(self.mock.setup_gn_args, [mock.call(builder)])
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.GenericBuilder.get_source_dir_path'
     ])
     self.builder = binary_providers.GenericBuilder(
         libs.make_testcase(),
         libs.make_definition(source_name='something'), libs.make_options())
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.GenericBuilder.get_source_dir_path',
     ])
     self.builder = binary_providers.GenericBuilder(
         libs.make_testcase(testcase_id='1234', revision='999'),
         libs.make_definition(), libs.make_options(current=False))
Exemplo n.º 5
0
 def setUp(self):
     helpers.patch(self, ['clusterfuzz.binary_providers.sha_from_revision'])
     self.mock_os_environment({'V8_SRC': '/source/dir'})
     testcase = mock.Mock(id=1234, build_url='', revision=54321)
     definition = mock.Mock(source_var='V8_SRC')
     self.builder = binary_providers.V8Builder(
         testcase, definition, libs.make_options(testcase_id=testcase.id))
Exemplo n.º 6
0
    def test_base_with_env_args(self):
        """Test base's reproduce_crash with environment args."""

        mocked_testcase = mock.Mock(
            id=1234,
            reproduction_args='--app-dir=%APP_DIR% --testcase=%TESTCASE%',
            environment={'ASAN_OPTIONS': 'test-asan'},
            gestures=None,
            stacktrace_lines=[{
                'content': 'line'
            }],
            job_type='job_type')
        mocked_testcase.get_testcase_path.return_value = self.testcase_path
        mocked_provider = mock.Mock(symbolizer_path='%s/llvm-symbolizer' %
                                    self.app_directory)
        mocked_provider.get_binary_path.return_value = '%s/d8' % self.app_directory
        mocked_provider.get_build_directory.return_value = self.app_directory

        reproducer = reproducers.BaseReproducer(
            self.definition, mocked_provider, mocked_testcase, 'UBSAN',
            libs.make_options(target_args='--test'))
        reproducer.setup_args()
        reproducer.reproduce_crash()
        self.assert_exact_calls(self.mock.execute, [
            mock.call('/chrome/source/folder/d8',
                      '--app-dir=%s --testcase=%s --test' %
                      (self.app_directory, self.testcase_path),
                      '/chrome/source/folder',
                      env={'ASAN_OPTIONS': 'test-asan'},
                      exit_on_error=False,
                      timeout=30,
                      stdout_transformer=mock.ANY,
                      redirect_stderr_to_stdout=True)
        ])
Exemplo n.º 7
0
def create_reproducer(klass):
  """Creates a LinuxChromeJobReproducer for use in testing."""

  binary_provider = mock.Mock(symbolizer_path='/path/to/symbolizer')
  binary_provider.get_binary_path.return_value = '/fake/build_dir/test_binary'
  binary_provider.get_build_dir_path.return_value = '/fake/build_dir'
  testcase = mock.Mock(
      gestures=None,
      stacktrace_lines=[{
          'content': 'line'
      }],
      job_type='job_type',
      reproduction_args='--original',
      android_package_name='package')
  testcase.get_testcase_path.return_value = '/fake/testcase_dir/testcase'
  reproducer = klass(
      definition=mock.Mock(),
      binary_provider=binary_provider,
      testcase=testcase,
      sanitizer='UBSAN',
      options=libs.make_options(target_args='--test'))
  reproducer.args = '--always-opt'
  reproducer.environment = {}
  reproducer.source_directory = '/fake/source_dir'
  reproducer.original_testcase_path = '/fake/original_testcase_dir/testcase'
  return reproducer
    def test_gn_args(self):
        """Tests the args.gn parsing of extra values."""
        self.builder = binary_providers.PdfiumBuilder(
            self.testcase, self.definition,
            libs.make_options(goma_dir='/goma/dir'))

        os.makedirs(self.testcase_dir)
        with open(os.path.join(self.testcase_dir, 'args.gn'), 'w') as f:
            f.write('Not correct args.gn')
        build_dir = os.path.join(common.CLUSTERFUZZ_BUILDS_DIR, '1234_build')
        os.makedirs(build_dir)
        with open(os.path.join(build_dir, 'args.gn'), 'w') as f:
            f.write('goma_dir = /not/correct/dir')

        self.builder.build_directory = self.testcase_dir
        self.builder.setup_gn_args()

        self.assert_exact_calls(self.mock.execute, [
            mock.call('gn', 'gen  %s' % self.testcase_dir,
                      '/chrome/source/dir')
        ])
        with open(os.path.join(self.testcase_dir, 'args.gn'), 'r') as f:
            self.assertEqual(f.read(), ('goma_dir = "/goma/dir"\n'
                                        'pdf_is_standalone = true\n'
                                        'use_goma = true'))
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.sha_from_revision',
         'clusterfuzz.binary_providers.get_third_party_sha'
     ])
     self.builder = binary_providers.PdfiumBuilder(
         libs.make_testcase(revision=1234), libs.make_definition(),
         libs.make_options())
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.common.execute',
         'clusterfuzz.binary_providers.GenericBuilder.get_source_dir_path',
     ])
     self.builder = binary_providers.GenericBuilder(libs.make_testcase(),
                                                    libs.make_definition(),
                                                    libs.make_options())
Exemplo n.º 11
0
  def test_debug(self):
    """Test reproduce in debugger."""
    self.reproducer.options = libs.make_options(enable_debug=True)
    self.reproducer.reproduce(10)

    self.mock.pre_build_steps.assert_called_once_with(self.reproducer)
    self.mock.reproduce_debug.assert_called_once_with(self.reproducer)
    self.assertEqual(0, self.mock.reproduce_normal.call_count)
 def test_run(self):
     """Test run."""
     builder = binary_providers.GenericBuilder(
         libs.make_testcase(), libs.make_definition(),
         libs.make_options(skip_deps=False))
     builder.setup_all_deps()
     self.mock.gclient_sync.assert_called_once_with(builder)
     self.mock.gclient_runhooks.assert_called_once_with(builder)
     self.mock.install_deps.assert_called_once_with(builder)
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.install_build_deps',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_source_dir_path',
         'clusterfuzz.binary_providers.ChromiumBuilder.install_deps',
     ])
     self.mock.get_source_dir_path.return_value = '/chrome/src'
     self.builder = binary_providers.ChromiumBuilder32Bit(
         libs.make_testcase(), libs.make_definition(), libs.make_options())
Exemplo n.º 14
0
 def test_not_specifying(self):
     """Test not specifying goma threads."""
     self.builder = binary_providers.ChromiumBuilder(
         self.testcase, self.definition,
         libs.make_options(goma_threads=None,
                           goma_load=None,
                           goma_dir='dir'))
     self.assertEqual(self.builder.get_goma_cores(), 3200)
     self.assertEqual(self.builder.get_goma_load(), 128)
Exemplo n.º 15
0
 def test_run(self):
     """Test run."""
     builder = binary_providers.V8Builder(
         self.testcase, self.definition,
         libs.make_options(goma_dir='/goma/dir', skip_deps=False))
     builder.setup_all_deps()
     self.mock.gclient_sync.assert_called_once_with(builder)
     self.mock.gclient_runhooks.assert_called_once_with(builder)
     self.mock.install_deps.assert_called_once_with(builder)
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.ChromiumBuilder.get_gn_args',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_source_dir_path',
         'clusterfuzz.binary_providers.ChromiumBuilder.gclient_runhooks',
         'clusterfuzz.binary_providers.gclient_runhooks_msan',
     ])
     self.builder = binary_providers.MsanChromiumBuilder(
         libs.make_testcase(), libs.make_definition(), libs.make_options())
 def test_skip(self):
     """Test skip."""
     builder = binary_providers.GenericBuilder(
         libs.make_testcase(), libs.make_definition(),
         libs.make_options(skip_deps=True))
     builder.setup_all_deps()
     self.assert_n_calls(0, [
         self.mock.gclient_sync, self.mock.gclient_runhooks,
         self.mock.install_deps
     ])
Exemplo n.º 18
0
 def test_skip(self):
     """Test skip."""
     builder = binary_providers.V8Builder(
         self.testcase, self.definition,
         libs.make_options(goma_dir='/goma/dir', skip_deps=True))
     builder.setup_all_deps()
     self.assert_n_calls(0, [
         self.mock.gclient_sync, self.mock.gclient_runhooks,
         self.mock.install_deps
     ])
Exemplo n.º 19
0
    def setUp(self):
        helpers.patch(self, [
            'clusterfuzz.binary_providers.gclient_runhooks_msan',
            'clusterfuzz.binary_providers.sha_from_revision'
        ])

        testcase = mock.Mock(id=12345, build_url='', revision=4567, gn_args={})
        self.mock_os_environment({'V8_SRC': '/chrome/src'})
        definition = mock.Mock(source_var='V8_SRC', binary_name='binary')
        self.builder = binary_providers.MsanChromiumBuilder(
            testcase, definition, libs.make_options())
Exemplo n.º 20
0
  def test_chromium(self):
    """Test chromium's reproduce_crash."""

    self.mock.start_execute.return_value = mock.Mock()
    self.mock.__enter__.return_value = ':display'
    mocked_testcase = mock.Mock(
        id=1234,
        reproduction_args='--repro',
        environment={'ASAN_OPTIONS': 'test-asan'},
        gestures=None,
        stacktrace_lines=[{
            'content': 'line'
        }],
        job_type='job_type')
    mocked_testcase.get_testcase_path.return_value = self.testcase_path
    mocked_provider = mock.Mock(
        symbolizer_path='%s/llvm-symbolizer' % self.app_directory)
    mocked_provider.get_binary_path.return_value = '%s/d8' % self.app_directory
    mocked_provider.get_build_dir_path.return_value = self.app_directory

    reproducer = reproducers.LinuxChromeJobReproducer(
        self.definition,
        mocked_provider,
        mocked_testcase,
        'UBSAN',
        libs.make_options(target_args='--test'))
    reproducer.gestures = ['gesture,1', 'gesture,2']
    reproducer.setup_args()
    err, text = reproducer.reproduce_crash()
    self.assertEqual(err, 0)
    self.assertEqual(text, 'symbolized')
    self.assert_exact_calls(self.mock.start_execute, [
        mock.call(
            '/chrome/source/folder/d8',
            '--repro --test %s' % self.testcase_path,
            '/chrome/source/folder',
            env={
                'DISPLAY': ':display',
                'ASAN_OPTIONS': 'test-asan',
            },
            redirect_stderr_to_stdout=True,
            stdin=self.mock.UserStdin.return_value)
    ])
    self.assert_exact_calls(self.mock.wait_execute, [
        mock.call(
            self.mock.start_execute.return_value,
            exit_on_error=False,
            timeout=30,
            stdout_transformer=mock.ANY,
            read_buffer_length=1)
    ])
    self.assert_exact_calls(self.mock.run_gestures, [
        mock.call(reproducer, self.mock.start_execute.return_value, ':display')
    ])
Exemplo n.º 21
0
    def test_disable_xvfb(self):
        """Test disable xvfb."""
        reproducer = reproducers.LinuxChromeJobReproducer(
            self.definition, self.provider, self.testcase, 'UBSAN',
            libs.make_options(
                disable_xvfb=True,
                target_args='--test --disable-gl-drawing-for-tests'))

        reproducer.setup_args()
        self.assertEqual('--repro --test %s' % self.testcase_path,
                         reproducer.args)
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.common.execute',
         'clusterfuzz.binary_providers.sha_from_revision',
         'clusterfuzz.binary_providers.ChromiumBuilder.install_deps',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_source_dir_path',
         'os.path.exists'
     ])
     self.mock.get_source_dir_path.return_value = '/chrome/src'
     self.builder = binary_providers.CfiChromiumBuilder(
         libs.make_testcase(), libs.make_definition(), libs.make_options())
Exemplo n.º 23
0
    def setUp(self):
        helpers.patch(self, [
            'clusterfuzz.binary_providers.install_build_deps_32bit',
            'clusterfuzz.binary_providers.sha_from_revision',
            'clusterfuzz.binary_providers.V8Builder.install_deps'
        ])

        testcase = mock.Mock(id=12345, build_url='', revision=4567)
        self.mock_os_environment({'V8_SRC': '/chrome/src'})
        definition = mock.Mock(source_var='V8_SRC', binary_name='binary')
        self.builder = binary_providers.V8Builder32Bit(testcase, definition,
                                                       libs.make_options())
Exemplo n.º 24
0
    def setUp(self):
        helpers.patch(self, [
            'clusterfuzz.common.execute',
            'clusterfuzz.binary_providers.sha_from_revision',
            'clusterfuzz.binary_providers.ChromiumBuilder.pre_build_steps'
        ])

        testcase = mock.Mock(id=12345, build_url='', revision=4567)
        self.mock_os_environment({'V8_SRC': '/chrome/src'})
        definition = mock.Mock(source_var='V8_SRC', binary_name='binary')
        self.builder = binary_providers.CfiChromiumBuilder(
            testcase, definition, libs.make_options())
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.GenericBuilder.get_source_dir_path',
         'clusterfuzz.binary_providers.sha_from_revision',
         'clusterfuzz.binary_providers.get_third_party_sha',
         'clusterfuzz.binary_providers.install_build_deps',
         'clusterfuzz.common.execute',
     ])
     self.mock.get_source_dir_path.return_value = '/src'
     self.builder = binary_providers.V8Builder(
         libs.make_testcase(revision=1234), libs.make_definition(),
         libs.make_options())
Exemplo n.º 26
0
    def setUp(self):
        self.suppress_logging_methods()
        self.chrome_src = '/usr/local/google/home/user/repos/chromium/src'
        self.mock_os_environment({
            'V8_SRC': '/v8/src',
            'CHROME_SRC': '/pdf/src'
        })
        helpers.patch(self, [
            'clusterfuzz.commands.reproduce.get_definition',
            'clusterfuzz.commands.reproduce.get_testcase_info',
            'clusterfuzz.testcase.Testcase',
            'clusterfuzz.commands.reproduce.ensure_goma',
            'clusterfuzz.binary_providers.DownloadedBinary',
            'clusterfuzz.binary_providers.V8Builder',
            'clusterfuzz.binary_providers.ChromiumBuilder',
        ])
        self.response = {
            'testcase': {
                'gestures': 'test'
            },
            'id': 1234,
            'crash_type': 'Bad Crash',
            'crash_state': ['halted'],
            'crash_revision': '123456',
            'metadata': {
                'build_url': 'chrome_build_url'
            },
            'crash_stacktrace': {
                'lines': ['Line 1', 'Line 2']
            }
        }
        self.mock.get_testcase_info.return_value = self.response
        self.mock.ensure_goma.return_value = '/goma/dir'

        self.builder = mock.Mock(symbolizer_path='/path/to/symbolizer')
        self.builder.get_binary_path.return_value = '/path/to/binary'

        self.definition = mock.Mock(kwargs={},
                                    source_var='V8_SRC',
                                    sanitizer='ASAN')

        self.definition.builder.return_value = self.builder
        self.mock.get_definition.return_value = self.definition

        self.testcase = mock.Mock(id=1234,
                                  build_url='chrome_build_url',
                                  revision=123456,
                                  job_type='linux_asan_d8',
                                  reproducible=True,
                                  reproduction_args='--always-opt')
        self.mock.Testcase.return_value = self.testcase
        self.options = libs.make_options(testcase_id=str(self.testcase.id))
    def setUp(self):
        helpers.patch(self, [
            'clusterfuzz.binary_providers.setup_debug_symbol_if_needed',
            'clusterfuzz.binary_providers.setup_gn_goma_params',
        ])
        self.builder = binary_providers.GenericBuilder(
            libs.make_testcase(raw_gn_args='a=b\nc=d'),
            libs.make_definition(sanitizer='ASAN'),
            libs.make_options(current=False, enable_debug=True))
        self.builder.extra_gn_args = {'e': 'f'}

        self.mock.setup_debug_symbol_if_needed.side_effect = lambda v, _1, _2: v
        self.mock.setup_gn_goma_params.side_effect = lambda v, _: v
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.download_build_if_needed',
         'clusterfuzz.binary_providers.get_or_ask_for_source_location',
         'clusterfuzz.binary_providers.BinaryProvider.get_binary_path',
     ])
     self.definition = libs.make_definition(binary_name='d8')
     self.testcase = libs.make_testcase(
         testcase_id=12345,
         build_url='https://storage.cloud.google.com/abc.zip')
     self.provider = binary_providers.DownloadedBinary(
         testcase=self.testcase,
         definition=self.definition,
         options=libs.make_options())
Exemplo n.º 29
0
    def test_parameter_already_set(self):
        """Tests functionality when build_directory parameter is already set."""

        testcase = mock.Mock(id=12345,
                             build_url=self.build_url,
                             revision=54321)
        definition = mock.Mock(source_var='V8_SRC')
        provider = binary_providers.V8Builder(testcase, definition,
                                              libs.make_options())

        provider.build_directory = 'dir/already/set'

        result = provider.get_build_directory()
        self.assertEqual(result, 'dir/already/set')
 def setUp(self):
     helpers.patch(self, [
         'clusterfuzz.binary_providers.get_clank_sha',
         'clusterfuzz.common.execute',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_source_dir_path',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_build_dir_path',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_binary_name',
         'clusterfuzz.binary_providers.ChromiumBuilder.install_deps',
         'clusterfuzz.binary_providers.ChromiumBuilder.get_gn_args',
     ])
     self.builder = binary_providers.ClankiumBuilder(
         libs.make_testcase(revision='1234'),
         libs.make_definition(revision_url='test_url/%s'),
         libs.make_options())