def test_indirect_before_direct_leak(self): """Test highlighting when indirect leak precedes first direct leak.""" data = self._read_test_data('indirect_before_direct_leak.txt') actual_data = leak_blacklist.highlight_first_direct_leak(data) expected_data = self._read_test_data( 'indirect_before_direct_leak_highlighted.txt') self.assertEqual(expected_data, actual_data)
def filter_stacktrace(crash_stacktrace, crash_type, stack_clean_regex_lines, revisions_dict): """Clean up and format a stack trace for display.""" if not crash_stacktrace: return '' # Get stacktrace clean regex for filtering strings and even full lines. stack_clean_regex_list = filter(bool, stack_clean_regex_lines.splitlines()) stack_clean_regex = ( re.compile('(%s)' % '|'.join(stack_clean_regex_list)) if stack_clean_regex_list else None) filtered_crash_lines = [] for line in crash_stacktrace.splitlines(): # Null out matched string from stacktrace clean regex. if stack_clean_regex: line = stack_clean_regex.sub('', line) if not line: continue # Html escape line content to prevent XSS. line = cgi.escape(line, quote=True) line = source_mapper.linkify_stack_frame(line, revisions_dict) filtered_crash_lines.append(line) filtered_crash_stacktrace = '\n'.join(filtered_crash_lines) if crash_type == leak_blacklist.DIRECT_LEAK_LABEL: return leak_blacklist.highlight_first_direct_leak(filtered_crash_stacktrace) return highlight_common_stack_frames(filtered_crash_stacktrace)
def filter_stacktrace(crash_stacktrace, crash_type, revisions_dict): """Clean up and format a stack trace for display.""" if not crash_stacktrace: return '' filtered_crash_lines = [] for line in crash_stacktrace.splitlines(): # Html escape line content to prevent XSS. line = cgi.escape(line, quote=True) line = source_mapper.linkify_stack_frame(line, revisions_dict) filtered_crash_lines.append(line) filtered_crash_stacktrace = '\n'.join(filtered_crash_lines) if crash_type == leak_blacklist.DIRECT_LEAK_LABEL: return leak_blacklist.highlight_first_direct_leak(filtered_crash_stacktrace) return highlight_common_stack_frames(filtered_crash_stacktrace)
def filter_stacktrace(crash_stacktrace, crash_type, revisions_dict, platform, job_type): """Clean up and format a stack trace for display.""" if not crash_stacktrace: return '' filtered_crash_lines = [] for line in crash_stacktrace.splitlines(): # Html escape line content to prevent XSS. line = html.escape(line, quote=True) line = source_mapper.linkify_stack_frame(line, revisions_dict) if 'android' in platform or environment.is_lkl_job(job_type): line = _linkify_android_kernel_stack_frame_if_needed(line) filtered_crash_lines.append(line) filtered_crash_stacktrace = '\n'.join(filtered_crash_lines) if crash_type == leak_blacklist.DIRECT_LEAK_LABEL: return leak_blacklist.highlight_first_direct_leak( filtered_crash_stacktrace) return highlight_common_stack_frames(filtered_crash_stacktrace)
def test_multi_direct_leaks(self): """Test highlighting for report with multiple direct leaks.""" data = self._read_test_data('multi_direct_leak.txt') actual_data = leak_blacklist.highlight_first_direct_leak(data) expected_data = self._read_test_data('multi_direct_leak_expected.txt') self.assertEqual(expected_data, actual_data)
def test_single_leak(self): """Test highlighting for report with single direct leak.""" data = self._read_test_data('single_direct_leak.txt') actual_data = leak_blacklist.highlight_first_direct_leak(data) expected_data = data self.assertEqual(expected_data, actual_data)