Ejemplo n.º 1
0
    def test_run_fuzz_targets_quits(self, mock_create_fuzz_target_obj,
                                    mock_run_fuzz_target, _, __):
        """Tests that run_fuzz_targets doesn't quit on the first crash it finds."""
        runner = run_fuzzers.BatchFuzzTargetRunner(self.config)
        runner.initialize()

        call_count = 0

        def mock_run_fuzz_target_impl(_):
            nonlocal call_count
            if call_count == 0:
                testcase = self.testcase1
            elif call_count == 1:
                testcase = self.testcase2
            assert call_count != 2
            call_count += 1
            if not os.path.exists(self.CORPUS_DIR):
                self.fs.create_dir(self.CORPUS_DIR)
            return fuzz_target.FuzzResult(testcase, self.STACKTRACE,
                                          self.CORPUS_DIR)

        mock_run_fuzz_target.side_effect = mock_run_fuzz_target_impl
        magic_mock = mock.MagicMock()
        magic_mock.target_name = 'target1'
        mock_create_fuzz_target_obj.return_value = magic_mock
        self.assertTrue(runner.run_fuzz_targets())
        self.assertEqual(mock_run_fuzz_target.call_count, 2)
Ejemplo n.º 2
0
    def test_run_fuzz_targets_upload_crashes_and_builds(
            self, mock_upload_crashes, _):
        """Tests that run_fuzz_targets uploads crashes and builds correctly."""
        runner = run_fuzzers.BatchFuzzTargetRunner(self.config)
        # TODO(metzman): Don't rely on this failing gracefully.
        runner.initialize()

        self.assertFalse(runner.run_fuzz_targets())
        self.assertEqual(mock_upload_crashes.call_count, 1)
Ejemplo n.º 3
0
    def test_run_fuzz_targets_quits(self, mocked_create_fuzz_target_obj,
                                    mocked_run_fuzz_target,
                                    mocked_get_fuzz_targets):
        """Tests that run_fuzz_targets doesn't quit on the first crash it finds."""
        workspace = 'workspace'
        out_path = os.path.join(workspace, 'out')
        self.fs.create_dir(out_path)
        config = test_helpers.create_run_config(fuzz_seconds=FUZZ_SECONDS,
                                                workspace=workspace,
                                                project_name=EXAMPLE_PROJECT)
        runner = run_fuzzers.BatchFuzzTargetRunner(config)

        mocked_get_fuzz_targets.return_value = ['target1', 'target2']
        runner.initialize()
        testcase1 = os.path.join(workspace, 'testcase-aaa')
        testcase2 = os.path.join(workspace, 'testcase-bbb')
        self.fs.create_file(testcase1)
        self.fs.create_file(testcase2)
        stacktrace = b'stacktrace'
        call_count = 0
        corpus_dir = 'corpus'

        def mock_run_fuzz_target(_):
            nonlocal call_count
            if call_count == 0:
                testcase = testcase1
            elif call_count == 1:
                testcase = testcase2
            assert call_count != 2
            call_count += 1
            return fuzz_target.FuzzResult(testcase, stacktrace, corpus_dir)

        mocked_run_fuzz_target.side_effect = mock_run_fuzz_target
        magic_mock = mock.MagicMock()
        magic_mock.target_name = 'target1'
        mocked_create_fuzz_target_obj.return_value = magic_mock
        self.assertTrue(runner.run_fuzz_targets())
        self.assertIn('target1-address-testcase-aaa',
                      os.listdir(runner.crashes_dir))
        self.assertEqual(mocked_run_fuzz_target.call_count, 2)
Ejemplo n.º 4
0
    def test_run_fuzz_targets_quits(self, mocked_create_fuzz_target_obj,
                                    mocked_run_fuzz_target):
        """Tests that run_fuzz_targets quits on the first crash it finds."""
        workspace = 'workspace'
        out_path = os.path.join(workspace, 'out')
        self.fs.create_dir(out_path)
        config = _create_config(fuzz_seconds=FUZZ_SECONDS,
                                workspace=workspace,
                                project_name=EXAMPLE_PROJECT)
        runner = run_fuzzers.BatchFuzzTargetRunner(config)

        with mock.patch('utils.get_fuzz_targets') as mocked_get_fuzz_targets:
            mocked_get_fuzz_targets.return_value = ['target1', 'target2']
            runner.initialize()
        testcase1 = os.path.join(workspace, 'testcase1')
        testcase2 = os.path.join(workspace, 'testcase2')
        self.fs.create_file(testcase1)
        self.fs.create_file(testcase2)
        stacktrace = b'stacktrace'
        call_count = 0

        def mock_run_fuzz_target(_):
            nonlocal call_count
            if call_count == 0:
                testcase = testcase1
            elif call_count == 1:
                testcase = testcase2
            assert call_count != 2
            call_count += 1
            return testcase, stacktrace

        mocked_run_fuzz_target.side_effect = mock_run_fuzz_target
        magic_mock = mock.MagicMock()
        magic_mock.target_name = 'target1'
        mocked_create_fuzz_target_obj.return_value = magic_mock
        self.assertTrue(runner.run_fuzz_targets())
        self.assertIn('target1-testcase', os.listdir(runner.artifacts_dir))
        self.assertEqual(mocked_run_fuzz_target.call_count, 2)