def test_event_hash_variant(infile): with open(os.path.join(_fixture_path, infile + '.json')) as f: input = json.load(f) with open(os.path.join(_fixture_path, infile + '.out')) as f: refval = f.read().decode('utf-8').rstrip() mgr = EventManager(data=input) mgr.normalize() evt = Event(data=mgr.get_data()) rv = [] for (key, value) in sorted(evt.get_grouping_variants().items()): if rv: rv.append('-' * 74) rv.append('%s:' % key) dump_variant(value, rv, 1) output = '\n'.join(rv) if not refval: log(output) log(repr(evt.get_hashes())) assert sorted(evt.get_hashes()) == sorted( filter(None, [x.get_hash() for x in evt.get_grouping_variants().values()])) assert refval == output
def test_stacktrace_wins_over_http(http_comp_hash, stack_comp_hash): # this was a regression, and a very important one http_comp_hash.return_value = [['baz']] stack_comp_hash.return_value = [['foo', 'bar']] event = Event( data={ 'stacktrace': { 'frames': [{ 'lineno': 1, 'filename': 'foo.py', }], }, 'request': { 'url': 'http://example.com' }, }, platform='python', message='Foo bar', ) hashes = event.get_hashes() assert len(hashes) == 1 hash_one = hashes[0] stack_comp_hash.assert_called_once_with('python') assert not http_comp_hash.called assert hash_one == hash_from_values(['foo', 'bar'])
def test_event_hash_variant(config_name, test_name): with open(os.path.join(_fixture_path, config_name, test_name + '.json')) as f: input = json.load(f) try: with open(os.path.join(_fixture_path, config_name, test_name + '.out')) as f: refval = f.read().decode('utf-8').rstrip() except IOError: refval = '' mgr = EventManager(data=input) mgr.normalize() data = mgr.get_data() evt = Event(data=data, platform=data['platform']) rv = [] for (key, value) in sorted(evt.get_grouping_variants().items()): if rv: rv.append('-' * 74) rv.append('%s:' % key) dump_variant(value, rv, 1) output = '\n'.join(rv) if not refval: log(output) log(repr(evt.get_hashes())) assert refval == output
def test_stacktrace_wins_over_http(http_comp_hash, stack_comp_hash): # this was a regression, and a very important one http_comp_hash.return_value = [['baz']] stack_comp_hash.return_value = [['foo', 'bar']] event = Event( data={ 'stacktrace': { 'frames': [{ 'lineno': 1, 'filename': 'foo.py', }], }, 'request': { 'url': 'http://example.com' }, }, platform='python', message='Foo bar', ) hashes = event.get_hashes() assert len(hashes) == 1 hash_one = hashes[0] stack_comp_hash.assert_called_once_with('python') assert not http_comp_hash.called assert hash_one == md5_from_hash(['foo', 'bar'])
def test_event_hash_variant(insta_snapshot, config_name, test_name, log): with open(os.path.join(_fixture_path, test_name + '.json')) as f: input = json.load(f) # Cutomize grouping config from the _grouping config grouping_config = get_default_grouping_config_dict(config_name) grouping_info = input.pop('_grouping', None) or {} enhancement_base = grouping_info.get('enhancement_base') enhancements = grouping_info.get('enhancements') if enhancement_base or enhancements: enhancement_bases = [enhancement_base] if enhancement_base else [] e = Enhancements.from_config_string(enhancements or '', bases=enhancement_bases) grouping_config['enhancements'] = e.dumps() # Noramlize the event mgr = EventManager(data=input, grouping_config=grouping_config) mgr.normalize() data = mgr.get_data() # Normalize the stacktrace for grouping. This normally happens in # save() normalize_stacktraces_for_grouping(data, load_grouping_config(grouping_config)) evt = Event(data=data, platform=data['platform']) # Make sure we don't need to touch the DB here because this would # break stuff later on. evt.project = None rv = [] for (key, value) in sorted(evt.get_grouping_variants().items()): if rv: rv.append('-' * 74) rv.append('%s:' % key) dump_variant(value, rv, 1) output = '\n'.join(rv) log(repr(evt.get_hashes())) assert evt.get_grouping_config() == grouping_config insta_snapshot(output)
def test_event_hash_variant(insta_snapshot, config_name, test_name, log): with open(os.path.join(_fixture_path, config_name, test_name + '.json')) as f: input = json.load(f) mgr = EventManager(data=input) mgr.normalize() data = mgr.get_data() evt = Event(data=data, platform=data['platform']) rv = [] for (key, value) in sorted(evt.get_grouping_variants().items()): if rv: rv.append('-' * 74) rv.append('%s:' % key) dump_variant(value, rv, 1) output = '\n'.join(rv) log(repr(evt.get_hashes())) insta_snapshot(output)