def testParseStacktraceReturnsCache(self): """Tests that ``stacktrace`` returns cached ``_stacktrace`` value.""" crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData()) stack = CallStack(1) stacktrace = Stacktrace([stack], stack) crash_data._stacktrace = stacktrace self._VerifyTwoStacktracesEqual(crash_data.stacktrace, stacktrace)
def testProperties(self): """Tests ``ClusterfuzzData`` specific properties.""" regression_range = { 'repo_url': 'http://repo', 'repo_path': 'src', 'old_revision': 'rev2', 'new_revision': 'rev7' } raw_crash_data = self.GetDummyClusterfuzzData( sanitizer='ASAN', regression_range=regression_range) crash_data = ClusterfuzzData(raw_crash_data, self.GetMockRepoFactory()) self.assertEqual(crash_data.crash_address, raw_crash_data['customized_data']['crash_address']) self.assertEqual(crash_data.crash_type, raw_crash_data['customized_data']['crash_type']) self.assertEqual(crash_data.sanitizer, SanitizerType.ADDRESS_SANITIZER) self.assertEqual(crash_data.job_type, raw_crash_data['customized_data']['job_type']) self.assertEqual(crash_data.regression_range, ('rev2', 'rev7')) self.assertEqual(crash_data.testcase_id, raw_crash_data['customized_data']['testcase_id']) self.assertEqual(crash_data.security_flag, raw_crash_data['customized_data']['security_flag']) raw_crash_data['customized_data']['regression_range'] = None crash_data = ClusterfuzzData(raw_crash_data, self.GetMockRepoFactory()) self.assertIsNone(crash_data.regression_range)
def testDependencyRollsReturnsCache(self): """Tests that ``dependency_rolls`` returns cached ``_dependency_rolls``.""" crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData()) dep_roll = { 'src/': DependencyRoll('src/', 'https://repo', 'rev0', 'rev3') } crash_data._dependency_rolls = dep_roll self.assertEqual(crash_data.dependency_rolls, dep_roll)
def testParseStacktraceSucceeded(self): """Tests parsing ``stacktrace``.""" crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData()) stack = CallStack(0) stacktrace = Stacktrace([stack], stack) with mock.patch('analysis.clusterfuzz_parser.ClusterfuzzParser.Parse' ) as mock_parse: mock_parse.return_value = stacktrace self._VerifyTwoStacktracesEqual(crash_data.stacktrace, stacktrace)
def testCommitCountInRegressionRangeReturns0ForEmptyRegressionRange(self): """Tests ``commit_count_in_regression_range`` property.""" regression_range = { 'dep_path': 'src', 'repo_url': 'https://repo', 'old_revision': None, 'new_revision': None } crash_data = ClusterfuzzData( self.GetDummyClusterfuzzData(regression_range=regression_range), self.GetMockRepoFactory()) self.assertEqual(crash_data.commit_count_in_regression_range, 0)
def testCommitCountInRegressionRangeProperty(self, mock_get_commits): """Tests ``commit_count_in_regression_range`` property.""" mock_get_commits.return_value = 6 regression_range = { 'dep_path': 'src', 'repo_url': 'https://repo', 'old_revision': 'rev0', 'new_revision': 'rev3' } crash_data = ClusterfuzzData( self.GetDummyClusterfuzzData(regression_range=regression_range), self.GetMockRepoFactory()) self.assertEqual(crash_data.commit_count_in_regression_range, 6)
def testProperties(self): """Tests ``ClusterfuzzData`` specific properties.""" raw_crash_data = self.GetDummyClusterfuzzData(sanitizer='ASAN') crash_data = ClusterfuzzData(raw_crash_data) self.assertEqual(crash_data.crashed_address, raw_crash_data['customized_data']['crashed_address']) self.assertEqual(crash_data.crashed_type, raw_crash_data['customized_data']['crashed_type']) self.assertEqual(crash_data.sanitizer, SanitizerType.ADDRESS_SANITIZER) self.assertEqual(crash_data.job_type, raw_crash_data['customized_data']['job_type']) self.assertEqual(crash_data.regression_range, raw_crash_data['customized_data']['regression_range']) self.assertEqual(crash_data.testcase, raw_crash_data['customized_data']['testcase'])
def testRegressionRangeProperty(self): regression_range = { 'dep_path': 'src', 'repo_url': 'https://repo', 'old_revision': 'rev0', 'new_revision': 'rev3' } crash_data = ClusterfuzzData( self.GetDummyClusterfuzzData(regression_range=regression_range), self.GetMockRepoFactory()) self.assertEqual(crash_data.regression_range, (regression_range['old_revision'], regression_range['new_revision'])) self.assertEqual(crash_data.regression_repository, regression_range)
def testDependencies(self): """Tests ``dependencies`` property.""" dep = Dependency('src/', 'https://repo', 'rev1') crash_data = ClusterfuzzData( self.GetDummyClusterfuzzData(dependencies=[{ 'dep_path': dep.path, 'repo_url': dep.repo_url, 'revision': dep.revision }])) self.assertEqual(len(crash_data.dependencies), 1) self.assertTrue(dep.path in crash_data.dependencies) self.assertEqual(crash_data.dependencies[dep.path].path, dep.path) self.assertEqual(crash_data.dependencies[dep.path].repo_url, dep.repo_url) self.assertEqual(crash_data.dependencies[dep.path].revision, dep.revision)
def testDependencyRolls(self): """Tests ``regression_rolls`` property.""" dep_roll = DependencyRoll('src/', 'https://repo', 'rev1', 'rev6') crash_data = ClusterfuzzData( self.GetDummyClusterfuzzData( dependency_rolls=[{ 'dep_path': dep_roll.path, 'repo_url': dep_roll.repo_url, 'old_revision': dep_roll.old_revision, 'new_revision': dep_roll.new_revision }])) self.assertEqual(len(crash_data.dependency_rolls), 1) self.assertTrue(dep_roll.path in crash_data.dependency_rolls) self.assertEqual(crash_data.dependency_rolls[dep_roll.path].path, dep_roll.path) self.assertEqual(crash_data.dependency_rolls[dep_roll.path].repo_url, dep_roll.repo_url) self.assertEqual( crash_data.dependency_rolls[dep_roll.path].old_revision, dep_roll.old_revision) self.assertEqual( crash_data.dependency_rolls[dep_roll.path].new_revision, dep_roll.new_revision)
def testDependenciesReturnsCache(self): """Tests that ``dependencies`` returns cached ``_dependencies`` value.""" crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData()) deps = {'src/': Dependency('src/', 'https://repo', 'rev')} crash_data._dependencies = deps self.assertEqual(crash_data.dependencies, deps)
def testParseStacktraceFailed(self, mock_parse): """Tests that ``stacktrace`` is None when failed to pars stacktrace.""" mock_parse.return_value = None crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData()) self.assertIsNone(crash_data.stacktrace)
def GetCrashData(self, raw_crash_data): """Gets ``ClusterfuzzData`` from ``raw_crash_data``.""" return ClusterfuzzData(raw_crash_data)
def GetCrashData(self, raw_crash_data): """Gets ``ClusterfuzzData`` from ``raw_crash_data``.""" return ClusterfuzzData(raw_crash_data, self._get_repository, top_n_frames=self.client_config['top_n'])
def testAlwaysRedoClusterfuzzAnalysis(self): """Tests the redo of ClusterfuzzData is always True.""" crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData(), self.GetMockRepoFactory()) self.assertTrue(crash_data.redo)
def testIdentifiers(self): crash_data = ClusterfuzzData(self.GetDummyClusterfuzzData(), self.GetMockRepoFactory()) self.assertEqual(crash_data.identifiers, crash_data.testcase_id)