def reprocess_minidump(data): project = Project.objects.get_from_cache(id=data['project']) minidump_is_reprocessed_cache_key = minidump_reprocessed_cache_key_for_event(data) if default_cache.get(minidump_is_reprocessed_cache_key): return if not _is_symbolicator_enabled(project, data): rv = reprocess_minidump_with_cfi(data) default_cache.set(minidump_is_reprocessed_cache_key, True, 3600) return rv minidump = get_attached_minidump(data) if not minidump: logger.error("Missing minidump for minidump event") return request_id_cache_key = request_id_cache_key_for_event(data) response = run_symbolicator( project=project, request_id_cache_key=request_id_cache_key, create_task=create_minidump_task, minidump=make_buffered_slice_reader(minidump.data, None) ) if handle_symbolicator_response_status(data, response): merge_symbolicator_minidump_response(data, response) event_cache_key = cache_key_for_event(data) default_cache.set(event_cache_key, dict(data), 3600) default_cache.set(minidump_is_reprocessed_cache_key, True, 3600) return data
def reprocess_minidump(data): project = Project.objects.get_from_cache(id=data['project']) minidump_is_reprocessed_cache_key = minidump_reprocessed_cache_key_for_event( data) if default_cache.get(minidump_is_reprocessed_cache_key): return if not _is_symbolicator_enabled(project, data): rv = reprocess_minidump_with_cfi(data) default_cache.set(minidump_is_reprocessed_cache_key, True, 3600) return rv minidump = get_attached_minidump(data) if not minidump: logger.error("Missing minidump for minidump event") return request_id_cache_key = request_id_cache_key_for_event(data) response = run_symbolicator(project=project, request_id_cache_key=request_id_cache_key, create_task=create_minidump_task, minidump=make_buffered_slice_reader( minidump.data, None)) if handle_symbolicator_response_status(data, response): merge_symbolicator_minidump_response(data, response) event_cache_key = cache_key_for_event(data) default_cache.set(event_cache_key, dict(data), 3600) default_cache.set(minidump_is_reprocessed_cache_key, True, 3600) return data
def test_cfi_reprocessing(self, mock_cache_get, mock_cache_set, mock_attachment_get): dif = self.create_dif_file( debug_id='c0bcc3f1-9827-fe65-3058-404b2831d9e6', features=['unwind'] ) cache_file = self.create_file_from_path( path=os.path.join(os.path.dirname(__file__), 'fixtures', 'linux.cficache'), type='project.cficache' ) ProjectCfiCacheFile.objects.create( project=self.project, cache_file=cache_file, debug_file=dif, checksum=dif.file.checksum, version=CFICACHE_LATEST_VERSION, ) mock_attachment_get.return_value = self.mock_attachments() data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id mock_attachment_get.assert_called_once_with(cache_key) mock_cache_set.assert_called_with('st:b4eeed5c7008d0003cc5549c36dba6b7', CFI_CACHE) assert result == self.get_mock_event(reprocessed=True)
def test_cfi_reprocessing(self, mock_cache_get, mock_attachment_get): dif = self.create_dif_file( debug_id='c0bcc3f1-9827-fe65-3058-404b2831d9e6', features=['unwind']) cache_file = self.create_file_from_path(path=os.path.join( os.path.dirname(__file__), 'fixtures', 'linux.cficache'), type='project.cficache') ProjectCfiCacheFile.objects.create( project=self.project, cache_file=cache_file, debug_file=dif, checksum=dif.file.checksum, version=CFICACHE_LATEST_VERSION, ) mock_attachment_get.return_value = self.mock_attachments() data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id mock_attachment_get.assert_called_once_with(cache_key) assert result == self.get_mock_event(reprocessed=True)
def test_cfi_reprocessing_no_cfi_caches(self, mock_attachment_get): mock_attachment_get.return_value = self.mock_attachments() data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) assert result is None
def test_cfi_reprocessing_cached(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = [ ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1dc0', 'scan'), (None, '0x7f5140cdc000', 'scan'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x0040', 'scan'), (None, '0x7fff5aef1000', 'scan'), (None, '0x7fff5ae4ac88', 'cfi'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1de9', 'scan'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1dc0', 'scan'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x14ca0', 'scan'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1c70', 'scan'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1dc0', 'scan'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1c70', 'scan'), ('451a38b5-0679-79d2-0738-22a5ceb24c4b', '0x20830', 'cfi'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1d72', 'context'), ] data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with( 'st:a996085d85a6793c0f4c377630965675') assert mock_attachment_get.call_count == 0 assert result == self.get_mock_event(reprocessed=True)
def test_cfi_reprocessing_no_cfi_caches(self, mock_attachment_get): mock_attachment_get.return_value = self.mock_attachments() data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) assert result is None
def test_cfi_reprocessing_no_minidump(self, mock_cache_get, mock_attachment_get): data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) # mock_cache_get.assert_called_with('st:86e3a22f05a287eeeca681ecbeef3067') cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id mock_attachment_get.assert_called_once_with(cache_key) assert result is None
def test_cfi_reprocessing_no_minidump(self, mock_cache_get, mock_attachment_get): data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) # mock_cache_get.assert_called_with('st:86e3a22f05a287eeeca681ecbeef3067') cache_key = 'e:9dac1e3a7ea043818ba6f0685e258c09:%s' % self.project.id mock_attachment_get.assert_called_once_with(cache_key) assert result is None
def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = '__no_cfi__' data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with('st:b4eeed5c7008d0003cc5549c36dba6b7') assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_reprocessing_cached(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = CFI_CACHE data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with('st:b4eeed5c7008d0003cc5549c36dba6b7') assert mock_attachment_get.call_count == 0 assert result == self.get_mock_event(reprocessed=True)
def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = '__no_cfi__' data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with( 'st:a996085d85a6793c0f4c377630965675') assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = '__no_cfi__' data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with( 'st:80d8fdd07a3fb9639403afa33b0e930e') assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_unchanged(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = '__no_cfi__' data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with( 'st:b4eeed5c7008d0003cc5549c36dba6b7') assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_reprocessing_no_scanned_frames(self, mock_cache_get, mock_attachment_get): data = self.get_mock_event(reprocessed=False) for frame in data['exception']['values'][0]['stacktrace']['frames']: if frame['trust'] == 'scan': frame['trust'] = 'cfi' result = reprocess_minidump_with_cfi(data) assert mock_cache_get.call_count == 0 assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_reprocessing_cached(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = CFI_CACHE data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with( 'st:b4eeed5c7008d0003cc5549c36dba6b7') assert mock_attachment_get.call_count == 0 assert result == self.get_mock_event(reprocessed=True)
def test_cfi_reprocessing_no_scanned_frames(self, mock_cache_get, mock_attachment_get): data = copy.deepcopy(self.get_mock_event(reprocessed=False)) for frame in data['exception']['values'][0]['stacktrace']['frames']: if frame['trust'] == 'scan': frame['trust'] = 'cfi' result = reprocess_minidump_with_cfi(data) assert mock_cache_get.call_count == 0 assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_missing_stacktrace(self, mock_cache_get, mock_attachment_get): data = { 'exception': { 'values': [{ 'stacktrace': None, }] }, } result = reprocess_minidump_with_cfi(data) assert mock_cache_get.call_count == 0 assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_missing_stacktrace(self, mock_cache_get, mock_attachment_get): data = { 'exception': { 'values': [ { 'stacktrace': None, } ] }, } result = reprocess_minidump_with_cfi(data) assert mock_cache_get.call_count == 0 assert mock_attachment_get.call_count == 0 assert result is None
def test_cfi_reprocessing_cached(self, mock_cache_get, mock_attachment_get): mock_cache_get.return_value = [ (None, '0x7f5140cdc000', 'scan'), (None, '0x7fff5aef1000', 'scan'), ('451a38b5-0679-79d2-0738-22a5ceb24c4b', '0x20830', 'cfi'), ('c0bcc3f1-9827-fe65-3058-404b2831d9e6', '0x1d72', 'context'), ] data = self.get_mock_event(reprocessed=False) result = reprocess_minidump_with_cfi(data) mock_cache_get.assert_called_once_with( 'st:80d8fdd07a3fb9639403afa33b0e930e') assert mock_attachment_get.call_count == 0 assert result == self.get_mock_event(reprocessed=True)