apptuit-fluent-plugin 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +25 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +64 -0
- data/LICENSE +202 -0
- data/README.md +82 -0
- data/Rakefile +13 -0
- data/apptuit-fluent-plugin.gemspec +26 -0
- data/lib/fluent/plugin/filter_Apptuit.rb +87 -0
- data/lib/fluent/plugin/fingerprinter.rb +181 -0
- data/test/helper.rb +16 -0
- data/test/plugin/java_fingerprint_tests.rb +652 -0
- data/test/plugin/node_fingerprint_tests.rb +71 -0
- data/test/plugin/python_fingerprint_tests.rb +208 -0
- data/test/plugin/test_filter_Apptuit.rb +320 -0
- metadata +152 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2017 Agilx, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
#!/usr/bin/env ruby
|
17
|
+
"""Exception Fingerprint tests"""
|
18
|
+
require 'test/unit/assertions'
|
19
|
+
include Test::Unit::Assertions
|
20
|
+
|
21
|
+
|
22
|
+
class NodeFingerprintTests
|
23
|
+
|
24
|
+
def test_fp_not_a_stacktrace(fingerprinter)
|
25
|
+
result = fingerprinter.fingerprint_nodejs(
|
26
|
+
'User and his address details in appDataDynamic call {"user_type":"member","user_id":6763239,"selected_address":{"nick":"","id":"102840374","lat":10.96460749142318,"lng":76.9185347010498,"area":"Perur Chettipalayam, Coimbatore, Tamil Nadu","city_name":"Coimbatore","city_id":12,"city_short_name":"CBE","pin":641010,"is_partial":false,"is_default":true,"residential_complex":"HAD nagar","first_name":"Manhar","last_name":"JS","contact_area":"Perur Chettipalayam, Coimbatore, Tamil Nadu","contact_no":"8489947000","landmark":"nest to GVD Nagar arch","address_1":"oriental Inframart","address_2":"perur Kovaipudur main road","is_express":true,"shadow_city_id":12}}')
|
27
|
+
assert_equal(nil,result)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_fp_basic(fingerprinter)
|
31
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_nodejs(
|
32
|
+
'TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object. --- at fromObject (buffer.js:262:9) --- at Function.Buffer.from (buffer.js:101:10) --- at new Buffer (buffer.js:80:17) --- at Object.module.exports.decodeBase64 (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/bb-commons/utils/index.js:38:20) --- at module.exports.onAutosearchMapi (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/routes/index.js:96:27) --- at Layer.handle [as handle_request] (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/layer.js:95:5) --- at next (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/route.js:131:13) --- at Route.dispatch (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/route.js:112:3) --- at Layer.handle [as handle_request] (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/layer.js:95:5) --- at /srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:277:22 --- at param (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:349:14) --- at param (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:365:14) --- at param (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:365:14) --- at Function.process_params (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:410:3) --- at next (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:271:10) --- at module.exports.AutocompleteMiddleware (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/routes/middleware.js:8:5) --- at Layer.handle [as handle_request] (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/layer.js:95:5) --- at trim_prefix (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:312:13) --- at /srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:280:7 --- at Function.process_params (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:330:12) --- at next (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/express/lib/router/index.js:271:10) --- at module.exports.AggregatedRequestMiddleware (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/bb-commons/middlewares/aggregated_request_middleware.js:19:5) ')
|
33
|
+
assert_equal('TypeError', err_name)
|
34
|
+
assert_equal('c791f8a9c9e3f2df435a2852f32a42915dfe5548', fingerprint)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_fp_short(fingerprinter)
|
38
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_nodejs(
|
39
|
+
'TypeError: Cannot read property \'Hub\' of null --- at async (/srv/webapps/bigbasket.com/BigBasket/services/clan/node_modules/bb-commons/restWrappers/memberStores.js:422:31) --- at tryBlock (/srv/webapps/bigbasket.com/BigBasket/services/clan/node_modules/asyncawait/src/async/fiberManager.js:39:33) --- at runInFiber (/srv/webapps/bigbasket.com/BigBasket/services/clan/node_modules/asyncawait/src/async/fiberManager.js:26:9) ')
|
40
|
+
# print(err_name + ":" + fingerprint)
|
41
|
+
assert_equal('TypeError', err_name)
|
42
|
+
assert_equal('dce7fa69b17a121ffeb250c9528fda048fa59ed7', fingerprint)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_fp_mulitline_message(fingerprinter)
|
46
|
+
log_message = 'SolrError: {"responseHeader":{"zkConnected":true,"status":400,"QTime":1,"params":{"qt":"dismax_tc","fq":"parent_locality_283_i:1 AND text:()","wt":"json"}},"error":{"metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.parser.ParseException"],"msg":"org.apache.solr.search.SyntaxError: Cannot parse \'parent_locality_283_i:1 AND text:()\': Encountered \" \")\" \") \"\" at line 1, column 34.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <LPARAMS> ...\n \"filter(\" ...\n <NUMBER> ...\n <TERM> ...\n ","code":400}}\n --- Request URL: http://solrcloud.bigbasket.com:8983/solr/bbconfig/select?fq=parent_locality_283_i:1%20AND%20text:()&qt=dismax_tc&wt=json\n --- Request method: GET\n --- Status code: 400 - Bad Request\n --- Request headers: \n --- accept: application/json; charset=utf-8\n --- host: solrcloud.bigbasket.com:8983\n --- Response headers: \n --- date: Thu, 10 May 2018 06:17:03 GMT\n --- content-type: text/plain;charset=utf-8\n --- content-length: 766\n --- connection: close\n --- cache-control: no-cache, no-store\n --- pragma: no-cache\n --- expires: Sat, 01 Jan 2000 01:00:00 GMT\n --- last-modified: Thu, 10 May 2018 06:17:03 GMT\n --- etag: "16348b22089" --- at IncomingMessage.<anonymous> (/srv/webapps/bigbasket.com/bb-solr-client/lib/solr.js:943:19) --- at emitNone (events.js:91:20) --- at IncomingMessage.emit (events.js:185:7) --- at endReadableNT (_stream_readable.js:974:12) --- at _combinedTickCallback (internal/process/next_tick.js:74:11) --- at process._tickDomainCallback (internal/process/next_tick.js:122:9) '
|
47
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_nodejs(
|
48
|
+
log_message)
|
49
|
+
#print(err_name + ":" + fingerprint)
|
50
|
+
#rint(log_message)
|
51
|
+
#print(essence)
|
52
|
+
assert_equal('SolrError', err_name)
|
53
|
+
assert_equal('9463b56bcf92930574cd9aa1be489ebe97815d4a', fingerprint)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_fp_json_wrapped(fingerprinter)
|
57
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_nodejs(
|
58
|
+
'Aerospike cache miss for Key::1:nsearch.psauto.cG1eZAYhYyIxNSFxJ3NveWEgc2EibWQLImx0TQolI21yaSEibmZD {"message":"AEROSPIKE_ERR_RECORD_NOT_FOUND","name":"AerospikeError","code":2,"func":"as_event_command_parse_result","file":"src/main/aerospike/as_event.c","line":619,"stack":"AerospikeError: AEROSPIKE_ERR_RECORD_NOT_FOUND at Function.AerospikeError.fromASError (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/aerospike/lib/aerospike_error.js:118:10) at Client.DefaultCallbackHandler [as callbackHandler] (/srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/aerospike/lib/client.js:161:72) at /srv/webapps/bigbasket.com/BigBasket/services/nodeAutosearch/node_modules/aerospike/lib/client.js:1532:19"}')
|
59
|
+
# print(err_name + ":" + fingerprint)
|
60
|
+
assert_equal('AerospikeError', err_name)
|
61
|
+
assert_equal('b0e6ae45ba72ae1aa3b4bfd6f0bd34608d4b3dd3', fingerprint)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_fp_json_with_at(fingerprinter)
|
65
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_nodejs(
|
66
|
+
'Error in increasing product quantity {"message":"Error in updating the cartItemQty. Should not happen","stack":"Error: Error in updating the cartItemQty. Should not happen at /srv/webapps/bigbasket.com/BigBasket/services/cart/controllers/BasketOperations.js:59:23 at tryBlock (/srv/webapps/bigbasket.com/BigBasket/services/cart/node_modules/asyncawait/src/async/fiberManager.js:39:33) at runInFiber (/srv/webapps/bigbasket.com/BigBasket/services/cart/node_modules/asyncawait/src/async/fiberManager.js:26:9)"}')
|
67
|
+
# print(err_name + ":" + fingerprint)
|
68
|
+
assert_equal('Error', err_name)
|
69
|
+
assert_equal('0e3a7d113bf9787cfa57d2fc8d8f8e43e62ec5be', fingerprint)
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,208 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2017 Agilx, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
#!/usr/bin/env ruby
|
17
|
+
"""Exception Fingerprint tests"""
|
18
|
+
require 'test/unit/assertions'
|
19
|
+
include Test::Unit::Assertions
|
20
|
+
|
21
|
+
|
22
|
+
class PythonFingerprintTests
|
23
|
+
|
24
|
+
def test_fp_tmp(fingerprinter)
|
25
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
26
|
+
': upload-picked-order Internal Server Error for order 47353835 :invalid literal for int() with base 10: \'\' Traceback (most recent call last): '+
|
27
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/wapi/api.py", line 3648, in api_upload_process_picksubtypes '+
|
28
|
+
'--- try: '+
|
29
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/product/models.py", line 227, in get_cached '+
|
30
|
+
'--- \'product_description__category\').filter( '+
|
31
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 781, in filter '+
|
32
|
+
'--- return self._filter_or_exclude(False, *args, **kwargs) '+
|
33
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 799, in _filter_or_exclude '+
|
34
|
+
'--- clone.query.add_q(Q(*args, **kwargs)) '+
|
35
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1260, in add_q '+
|
36
|
+
'--- clause, _ = self._add_q(q_object, self.used_aliases) '+
|
37
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1286, in _add_q '+
|
38
|
+
'--- allow_joins=allow_joins, split_subq=split_subq, '+
|
39
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1220, in build_filter '+
|
40
|
+
'--- condition = self.build_lookup(lookups, col, value) '+
|
41
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1114, in build_lookup '+
|
42
|
+
'--- return final_lookup(lhs, rhs) '+
|
43
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/lookups.py", line 24, in __init__ '+
|
44
|
+
'--- self.rhs = self.get_prep_lookup() '+
|
45
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/lookups.py", line 74, in get_prep_lookup '+
|
46
|
+
'--- return self.lhs.output_field.get_prep_value(self.rhs) '+
|
47
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1849, in get_prep_value '+
|
48
|
+
'--- return int(value) '+
|
49
|
+
'--- ValueError: invalid literal for int() with base 10: \'\' ---'
|
50
|
+
)
|
51
|
+
assert_equal('ValueError', err_name)
|
52
|
+
assert_equal('4ba02aa3b1e653a1bcf656be90183b6899561fad', fingerprint)
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
def test_fp_colon_in_code(fingerprinter)
|
58
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
59
|
+
' Error while sending push notification for order: 46951142 Traceback (most recent call last): '+
|
60
|
+
'--- File "order/models.py", line 10760, in alert_order_cancellation_via_email_and_push_notification '+
|
61
|
+
'--- try: '+
|
62
|
+
'--- File "order/models.py", line 22188, in creating_entry_in_van_asssign_history '+
|
63
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 555, in latest '+
|
64
|
+
'--- return self._earliest_or_latest(field_name=field_name, direction="-") '+
|
65
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 549, in _earliest_or_latest '+
|
66
|
+
'--- return obj.get() '+
|
67
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 379, in get '+
|
68
|
+
'--- self.model._meta.object_name '+
|
69
|
+
'--- DoesNotExist: TPLOrderStatusLog matching query does not exist. ---')
|
70
|
+
assert_equal('DoesNotExist', err_name)
|
71
|
+
assert_equal('3fd256270a264d132c848648789c9b2e7d49be9d', fingerprint)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_fp_colon_in_code1(fingerprinter)
|
75
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
76
|
+
'\'AnonymousUser\' object is not iterable Traceback (most recent call last): '+
|
77
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/mapi/cart_views.py", line 400, in get_cart_items_and_summary '+
|
78
|
+
'--- sections_resp = self.add_section_to_basket(cart, cart_dict) '+
|
79
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/mapi/cart_views.py", line 425, in add_section_to_basket '+
|
80
|
+
'--- particular_voucher_id=True) '+
|
81
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/evoucher/models.py", line 141, in get_promotional_evouchers '+
|
82
|
+
'--- valid_vouchers = EVoucher.objects.get_valid_vouchers_for_cart(member, cart) '+
|
83
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/evoucher/models.py", line 302, in get_valid_vouchers_for_cart '+
|
84
|
+
'--- voucher_order_association = self.get_voucher_order_association(vouchers, member) '+
|
85
|
+
'--- File "/srv/webapps/bigbasket.com/BigBasket/evoucher/models.py", line 247, in get_voucher_order_association '+
|
86
|
+
'--- order__isnull=False) \ '+
|
87
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/manager.py", line 85, in manager_method '+
|
88
|
+
'--- return getattr(self.get_queryset(), name)(*args, **kwargs) '+
|
89
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 781, in filter '+
|
90
|
+
'--- return self._filter_or_exclude(False, *args, **kwargs) '+
|
91
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/query.py", line 799, in _filter_or_exclude '+
|
92
|
+
'--- clone.query.add_q(Q(*args, **kwargs)) '+
|
93
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1260, in add_q '+
|
94
|
+
'--- clause, _ = self._add_q(q_object, self.used_aliases) '+
|
95
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1286, in _add_q '+
|
96
|
+
'--- allow_joins=allow_joins, split_subq=split_subq, '+
|
97
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1189, in build_filter '+
|
98
|
+
'--- self.check_related_objects(field, value, opts) '+
|
99
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1088, in check_related_objects '+
|
100
|
+
'--- for v in value: '+
|
101
|
+
'--- File "/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/utils/functional.py", line 239, in inner '+
|
102
|
+
'--- return func(self._wrapped, *args) '+
|
103
|
+
'--- TypeError: \'AnonymousUser\' object is not iterable --- ')
|
104
|
+
assert_equal('TypeError', err_name)
|
105
|
+
assert_equal('ca949fe44e2cd0c874b26d3153cc0f96389b0d6a', fingerprint)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_fp_one_err(fingerprinter)
|
109
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
110
|
+
' Catching exception while processing the Message, '+
|
111
|
+
'with Task ID = 41f916a3-a468-4d89-80c6-c6f1e9e7caef Traceback '+
|
112
|
+
'(most recent call last): --- File '+
|
113
|
+
'"/srv/webapps/bigbasket.com/BigBasket/bbasync/consumer.py", '+
|
114
|
+
'line 622, in retriable_dispatcher_task --- '+
|
115
|
+
'consumer_group, handler_call_args, handler_call_kwargs, '+
|
116
|
+
'msg_headers) --- File '+
|
117
|
+
'"/srv/webapps/bigbasket.com/BigBasket/bbasync/consumer.py", '+
|
118
|
+
'line 518, in dispatcher_task --- '+
|
119
|
+
'handler_call_kwargs) --- '+
|
120
|
+
'File "/srv/webapps/bigbasket.com/BigBasket/bbasync/consumer.py", '+
|
121
|
+
'line 572, in _dispatcher_task --- meth = fn(*args, **kwargs) '+
|
122
|
+
'--- File "warehouse/services.py", line 1631, in '+
|
123
|
+
'queueable_make_product_available --- '+
|
124
|
+
'make_product_available_sync(sr_obj_id, old_stock, force, stock) '+
|
125
|
+
'--- File "warehouse/services.py", line 1638, in '+
|
126
|
+
'make_product_available_sync --- raise '+
|
127
|
+
'Exception(\'Stock Reservation entry does not exist for %d\' '+
|
128
|
+
'% sr_obj_id) --- Exception: Stock Reservation entry does '+
|
129
|
+
'not exist for 1873208 --- ')
|
130
|
+
assert_equal('Exception', err_name)
|
131
|
+
assert_equal('50d4d0924c2bfc907f5dd976654a8c23d3449e79', fingerprint)
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_fp_multi_err(fingerprinter)
|
135
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
136
|
+
'Traceback (most recent call last): --- File '+
|
137
|
+
'"/srv/webapps/bigbasket.com/BigBasket/member/models.py", line 9860, '+
|
138
|
+
'in _bulk_update_locality --- MemberAddressLocality.objects.'+
|
139
|
+
'create(member_address_id=member_address_id, locality_id=locality.id) '+
|
140
|
+
'--- AttributeError: \'NoneType\' object has no attribute \'id\' '+
|
141
|
+
'--- Traceback (most recent call last): --- File '+
|
142
|
+
'"/srv/webapps/bigbasket.com/BigBasket/member/models.py", line 9860, '+
|
143
|
+
'in _bulk_update_locality --- MemberAddressLocality.objects.'+
|
144
|
+
'create(member_address_id=member_address_id, locality_id=locality.id) '+
|
145
|
+
'--- AttributeError: \'NoneType\' object has no attribute \'id\' --- ')
|
146
|
+
assert_equal('AttributeError', err_name)
|
147
|
+
assert_equal('a4602817afb0e58e9a3da77e4e512ac1b2b3fc42', fingerprint)
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_fp_no_message(fingerprinter)
|
151
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
152
|
+
': Locus: There are no orders which are open and mapped to send to '+
|
153
|
+
'locus for Hub :Samalka , Slot Group : Delhi: D-S3 for order delivery '+
|
154
|
+
'date 2018-04-29 Traceback (most recent call last): --- File '+
|
155
|
+
'"/srv/webapps/bigbasket.com/BigBasket/locus/management/commands/'+
|
156
|
+
'locus_send_order_data.py", line 364, in send_batch --- '+
|
157
|
+
'order_ids=order_ids) --- File "/srv/webapps/bigbasket.com/BigBasket/'+
|
158
|
+
'locus/models.py", line 336, in create_batch_data --- '+
|
159
|
+
'raise NoOrdersForBatchException --- NoOrdersForBatchException --- ')
|
160
|
+
assert_equal('NoOrdersForBatchException', err_name)
|
161
|
+
assert_equal('ad3a804eea4de5c0531b607a4f904ffd5a3ab9bb', fingerprint)
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_fp_message_has_traceback(fingerprinter)
|
165
|
+
err_name, fingerprint, essence, stack = fingerprinter.fingerprint_python(
|
166
|
+
'SENDING MAIL: Unable to send using this \'MAILGUN\' mailer settings '+
|
167
|
+
'{\'username\': \'postmaster@mg.bigbasket.com\', \'fail_silently\': '+
|
168
|
+
'False, \'use_tls\': True, \'host\': \'smtp.mailgun.org\', '+
|
169
|
+
'\'password\': \'8723123123\', \'port\': 587} Traceback '+
|
170
|
+
'(most recent call last): --- File "/srv/webapps/bigbasket.com/'+
|
171
|
+
'BigBasket/saul/utils.py", line 568, in send --- '+
|
172
|
+
'connection.send_messages([message]) --- File "/srv/webapps/'+
|
173
|
+
'bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/'+
|
174
|
+
'site-packages/django/core/mail/backends/smtp.py", line 111, '+
|
175
|
+
'in send_messages --- sent = self._send(message) --- File '+
|
176
|
+
'"/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/'+
|
177
|
+
'python2.7/site-packages/django/core/mail/backends/smtp.py", line 125, '+
|
178
|
+
'in _send --- message = email_message.message() --- File "/srv/'+
|
179
|
+
'webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/'+
|
180
|
+
'site-packages/django/core/mail/message.py", line 303, in message '+
|
181
|
+
'--- msg[\'Subject\'] = self.subject --- File "/srv/webapps/'+
|
182
|
+
'bigbasket.com/virtualenvs/bigbasket1.11/local/lib/python2.7/'+
|
183
|
+
'site-packages/django/core/mail/message.py", line 217, in __setitem__ '+
|
184
|
+
'--- name, val = forbid_multi_line_headers(name, val, '+
|
185
|
+
'self.encoding) --- File "/srv/webapps/bigbasket.com/virtualenvs/'+
|
186
|
+
'bigbasket1.11/local/lib/python2.7/site-packages/django/core/mail/'+
|
187
|
+
'message.py", line 92, in forbid_multi_line_headers --- '+
|
188
|
+
'raise BadHeaderError("Header values can\'t contain newlines (got %r '+
|
189
|
+
'for header %r)" % (val, name)) --- BadHeaderError: Header values '+
|
190
|
+
'can\'t contain newlines (got u\'Error in converting into small '+
|
191
|
+
'order: 46132322, Traceback (most recent call last):\\n File '+
|
192
|
+
'"/srv/webapps/bigbasket.com/BigBasket/order/models.py", line 9297, '+
|
193
|
+
'in check_and_move_small_order\\n ret_dict = self.change_hub('+
|
194
|
+
'new_hub, self.slot.slot_date, new_slot, change_hub_flag='+
|
195
|
+
'change_hub_flag)\\n File "/srv/webapps/bigbasket.com/BigBasket/order/'+
|
196
|
+
'models.py", line 8678, in change_hub\\n slot=self.slot.slot_time)'+
|
197
|
+
'.restrict_orderpick_by_vanassign\\n File "/srv/webapps/bigbasket.com/'+
|
198
|
+
'virtualenvs/bigbasket1.11/local/lib/python2.7/site-packages/django/db/'+
|
199
|
+
'models/manager.py", line 85, in manager_method\\n return '+
|
200
|
+
'getattr(self.get_queryset(), name)(*args, **kwargs)\\n File '+
|
201
|
+
'"/srv/webapps/bigbasket.com/virtualenvs/bigbasket1.11/local/lib/'+
|
202
|
+
'python2.7/site-packages/django/db/models/query.py", line 379, in '+
|
203
|
+
'get\\n self.model._meta.object_name\\nDoesNotExist: SlotHubCapacity '+
|
204
|
+
'matching query does not exist.\\n\' for header u\'Subject\') --- ')
|
205
|
+
assert_equal('BadHeaderError', err_name)
|
206
|
+
assert_equal('c29f4da45781e7a534a14d741abc38f22df8791d', fingerprint)
|
207
|
+
end
|
208
|
+
end
|
@@ -0,0 +1,320 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2017 Agilx, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require "helper"
|
17
|
+
require "fluent/plugin/filter_Apptuit.rb"
|
18
|
+
require "test/plugin/java_fingerprint_tests.rb"
|
19
|
+
require "test/plugin/node_fingerprint_tests.rb"
|
20
|
+
require "test/plugin/python_fingerprint_tests.rb"
|
21
|
+
require "fluent/plugin/fingerprinter.rb"
|
22
|
+
|
23
|
+
class ApptuitFilterTest < Test::Unit::TestCase
|
24
|
+
setup do
|
25
|
+
Fluent::Test.setup
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_driver(conf)
|
29
|
+
Fluent::Test::Driver::Filter.new(Fluent::Plugin::ApptuitFilter).configure(conf)
|
30
|
+
end
|
31
|
+
|
32
|
+
python_conf = %[
|
33
|
+
lang python
|
34
|
+
]
|
35
|
+
java_conf = %[
|
36
|
+
lang java
|
37
|
+
]
|
38
|
+
nodejs_conf = %[
|
39
|
+
lang nodejs
|
40
|
+
]
|
41
|
+
|
42
|
+
python_msg = 'Traceback (most recent call last):
|
43
|
+
File "./app.py", line 7, in <module>
|
44
|
+
from schema import schema
|
45
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/schema.py", line 60, in <module>
|
46
|
+
schema = graphene.Schema(query=Query, types=[Department, Employee, Role])
|
47
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py", line 62, in __init__
|
48
|
+
self.build_typemap()
|
49
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py", line 126, in build_typemap
|
50
|
+
initial_types, auto_camelcase=self.auto_camelcase, schema=self
|
51
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 80, in __init__
|
52
|
+
super(TypeMap, self).__init__(types)
|
53
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py", line 28, in __init__
|
54
|
+
self.update(reduce(self.reducer, types, OrderedDict())) # type: ignore
|
55
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
56
|
+
return self.graphene_reducer(map, type)
|
57
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 117, in graphene_reducer
|
58
|
+
return GraphQLTypeMap.reducer(map, internal_type)
|
59
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py", line 106, in reducer
|
60
|
+
field_map = type.fields
|
61
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 22, in __get__
|
62
|
+
value = obj.__dict__[self.func.__name__] = self.func(obj)
|
63
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 221, in fields
|
64
|
+
return define_field_map(self, self._fields)
|
65
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 235, in define_field_map
|
66
|
+
field_map = field_map()
|
67
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 274, in construct_fields_for_type
|
68
|
+
map = self.reducer(map, field.type)
|
69
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
70
|
+
return self.graphene_reducer(map, type)
|
71
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 117, in graphene_reducer
|
72
|
+
return GraphQLTypeMap.reducer(map, internal_type)
|
73
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py", line 106, in reducer
|
74
|
+
field_map = type.fields
|
75
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 22, in __get__
|
76
|
+
value = obj.__dict__[self.func.__name__] = self.func(obj)
|
77
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 221, in fields
|
78
|
+
return define_field_map(self, self._fields)
|
79
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 235, in define_field_map
|
80
|
+
field_map = field_map()
|
81
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 274, in construct_fields_for_type
|
82
|
+
map = self.reducer(map, field.type)
|
83
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
84
|
+
return self.graphene_reducer(map, type)
|
85
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 93, in graphene_reducer
|
86
|
+
return self.reducer(map, type.of_type)
|
87
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
88
|
+
return self.graphene_reducer(map, type)
|
89
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 93, in graphene_reducer
|
90
|
+
return self.reducer(map, type.of_type)
|
91
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
92
|
+
return self.graphene_reducer(map, type)
|
93
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 117, in graphene_reducer
|
94
|
+
return GraphQLTypeMap.reducer(map, internal_type)
|
95
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py", line 106, in reducer
|
96
|
+
field_map = type.fields
|
97
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 22, in __get__
|
98
|
+
value = obj.__dict__[self.func.__name__] = self.func(obj)
|
99
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 221, in fields
|
100
|
+
return define_field_map(self, self._fields)
|
101
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 235, in define_field_map
|
102
|
+
field_map = field_map()
|
103
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 274, in construct_fields_for_type
|
104
|
+
map = self.reducer(map, field.type)
|
105
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
106
|
+
return self.graphene_reducer(map, type)
|
107
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 117, in graphene_reducer
|
108
|
+
return GraphQLTypeMap.reducer(map, internal_type)
|
109
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py", line 106, in reducer
|
110
|
+
field_map = type.fields
|
111
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 22, in __get__
|
112
|
+
value = obj.__dict__[self.func.__name__] = self.func(obj)
|
113
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 221, in fields
|
114
|
+
return define_field_map(self, self._fields)
|
115
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 235, in define_field_map
|
116
|
+
field_map = field_map()
|
117
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 274, in construct_fields_for_type
|
118
|
+
map = self.reducer(map, field.type)
|
119
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
120
|
+
return self.graphene_reducer(map, type)
|
121
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 117, in graphene_reducer
|
122
|
+
return GraphQLTypeMap.reducer(map, internal_type)
|
123
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py", line 106, in reducer
|
124
|
+
field_map = type.fields
|
125
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 22, in __get__
|
126
|
+
value = obj.__dict__[self.func.__name__] = self.func(obj)
|
127
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 221, in fields
|
128
|
+
return define_field_map(self, self._fields)
|
129
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py", line 235, in define_field_map
|
130
|
+
field_map = field_map()
|
131
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 274, in construct_fields_for_type
|
132
|
+
map = self.reducer(map, field.type)
|
133
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 88, in reducer
|
134
|
+
return self.graphene_reducer(map, type)
|
135
|
+
File "/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py", line 99, in graphene_reducer
|
136
|
+
).format(_type.graphene_type, type)
|
137
|
+
AssertionError: Found different types with the same name in the schema: EmployeeConnection, EmployeeConnection'
|
138
|
+
|
139
|
+
python_sys_msg = "Traceback (most recent call last):#012File \"./app.py\", line 7, in <module>#012 from schema import schema#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/schema.py\", line 60, in <module>#012 schema = graphene.Schema(query=Query, types=[Department, Employee, Role])#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py\", line 62, in __init__#012 self.build_typemap()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py\", line 126, in build_typemap#012 initial_types, auto_camelcase=self.auto_camelcase, schema=self#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 80, in __init__#012 super(TypeMap, self).__init__(types)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 28, in __init__#012 self.update(reduce(self.reducer, types, OrderedDict())) # type: ignore#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 93, in graphene_reducer#012 return self.reducer(map, type.of_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 93, in graphene_reducer#012 return self.reducer(map, type.of_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 99, in graphene_reducer#012 ).format(_type.graphene_type, type)#012AssertionError: Found different types with the same name in the schema: EmployeeConnection, EmployeeConnection"
|
140
|
+
|
141
|
+
java_msg = 'SEVERE [http-nio-8080-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Testing] in context with path [/test] threw exception [GET method is not supported.] with root cause
|
142
|
+
javax.servlet.ServletException: GET method is not supported.
|
143
|
+
at TestingServlet.doGet(TestingServlet.java:18)
|
144
|
+
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
|
145
|
+
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
|
146
|
+
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
|
147
|
+
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
|
148
|
+
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
|
149
|
+
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
|
150
|
+
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
|
151
|
+
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
|
152
|
+
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
|
153
|
+
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
|
154
|
+
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
|
155
|
+
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
|
156
|
+
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
|
157
|
+
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
|
158
|
+
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
|
159
|
+
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
|
160
|
+
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
|
161
|
+
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
|
162
|
+
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
|
163
|
+
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
|
164
|
+
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
|
165
|
+
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
166
|
+
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
|
167
|
+
at java.base/java.lang.Thread.run(Thread.java:844)'
|
168
|
+
|
169
|
+
java_sys_msg = 'SEVERE [http-nio-8080-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Testing] in context with path [/test] threw exception [GET method is not supported.] with root cause#012 javax.servlet.ServletException: GET method is not supported.#012#011at TestingServlet.doGet(TestingServlet.java:18)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)#012#011at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)#012#011at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)#012#011at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)#012#011at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)#012#011at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)#012#011at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)#012#011at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)#012#011at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)#012#011at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)#012#011at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)#012#011at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)#012#011at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)#012#011at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)#012#011at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)#012#011at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)#012#011at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)#012#011at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)#012#011at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)#012#011at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)#012#011at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)#012#011at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)#012#011at java.base/java.lang.Thread.run(Thread.java:844)'
|
170
|
+
|
171
|
+
nodejs_msg = 'Error: Something unexpected has occurred.
|
172
|
+
at main (c:\Users\Me\Documents\MyApp\app.js:9:15)
|
173
|
+
at Object. (c:\Users\Me\Documents\MyApp\app.js:17:1)
|
174
|
+
at Module._compile (module.js:460:26)
|
175
|
+
at Object.Module._extensions..js (module.js:478:10)
|
176
|
+
at Module.load (module.js:355:32)
|
177
|
+
at Function.Module._load (module.js:310:12)
|
178
|
+
at Function.Module.runMain (module.js:501:10)
|
179
|
+
at startup (node.js:129:16)
|
180
|
+
at node.js:814:3'
|
181
|
+
|
182
|
+
nodejs_sys_msg = "Error: Something unexpected has occurred.#012 at main (c:\\Users\\Me\\Documents\\MyApp\\app.js:9:15)#012 at Object. (c:\\Users\\Me\\Documents\\MyApp\\app.js:17:1)#012 at Module._compile (module.js:460:26)#012 at Object.Module._extensions..js (module.js:478:10)#012 at Module.load (module.js:355:32)#012 at Function.Module._load (module.js:310:12)#012 at Function.Module.runMain (module.js:501:10)#012 at startup (node.js:129:16)#012 at node.js:814:3"
|
183
|
+
|
184
|
+
nodejs_error_msg = "Something unexpected has occurred.#012 at main (c:\\Users\\Me\\Documents\\MyApp\\app.js:9:15)#012 at Object. (c:\\Users\\Me\\Documents\\MyApp\\app.js:17:1)#012 at Module._compile (module.js:460:26)#012 at Object.Module._extensions..js (module.js:478:10)#012 at Module.load (module.js:355:32)#012 at Function.Module._load (module.js:310:12)#012 at Function.Module.runMain (module.js:501:10)#012 at startup (node.js:129:16)#012 at node.js:814:3"
|
185
|
+
|
186
|
+
|
187
|
+
test "filter" do
|
188
|
+
d = create_driver(python_conf)
|
189
|
+
time = event_time
|
190
|
+
d.run do
|
191
|
+
d.feed("filter.python", time, {'message' => python_msg})
|
192
|
+
end
|
193
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['fingerprint'])
|
194
|
+
d = create_driver(python_conf+"syslog true")
|
195
|
+
time = event_time
|
196
|
+
d.run do
|
197
|
+
d.feed("filter.python",time, {'message' => python_sys_msg})
|
198
|
+
end
|
199
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['fingerprint'])
|
200
|
+
d = create_driver(python_conf+"error_msg_tag error_message")
|
201
|
+
time = event_time
|
202
|
+
d.run do
|
203
|
+
d.feed("filter.python",time, {'error_message' => python_msg})
|
204
|
+
end
|
205
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['fingerprint'])
|
206
|
+
d = create_driver(python_conf+"error_msg_tag error_message")
|
207
|
+
time = event_time
|
208
|
+
d.run do
|
209
|
+
d.feed("filter.python",time, {'error_message' => python_sys_msg})
|
210
|
+
end
|
211
|
+
assert_equal(nil, d.filtered_records[0]['fingerprint'])
|
212
|
+
d = create_driver(python_conf+"syslog true\n"+"error_msg_tag error_message")
|
213
|
+
time = event_time
|
214
|
+
d.run do
|
215
|
+
d.feed("filter.python",time, {'error_message' => python_sys_msg})
|
216
|
+
end
|
217
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['fingerprint'])
|
218
|
+
d = create_driver(java_conf)
|
219
|
+
time = event_time
|
220
|
+
d.run do
|
221
|
+
d.feed("filter.java", time, {'message' => java_msg})
|
222
|
+
end
|
223
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['fingerprint'])
|
224
|
+
d = create_driver(java_conf+"syslog true")
|
225
|
+
time = event_time
|
226
|
+
d.run do
|
227
|
+
d.feed("filter.java", time, {'message' => java_sys_msg})
|
228
|
+
end
|
229
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['fingerprint'])
|
230
|
+
d = create_driver(java_conf+"error_msg_tag error_message")
|
231
|
+
time = event_time
|
232
|
+
d.run do
|
233
|
+
d.feed("filter.java", time, {'error_message' => java_msg})
|
234
|
+
end
|
235
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['fingerprint'])
|
236
|
+
d = create_driver(java_conf+"syslog true\n"+"error_msg_tag error_message")
|
237
|
+
time = event_time
|
238
|
+
d.run do
|
239
|
+
d.feed("filter.java", time, {'error_message' => java_sys_msg})
|
240
|
+
end
|
241
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['fingerprint'])
|
242
|
+
d = create_driver(java_conf+"error_msg_tag error_message")
|
243
|
+
time = event_time
|
244
|
+
d.run do
|
245
|
+
d.feed("filter.java", time, {'error_message' => java_sys_msg})
|
246
|
+
end
|
247
|
+
assert_equal(nil, d.filtered_records[0]['fingerprint'])
|
248
|
+
d = create_driver(nodejs_conf)
|
249
|
+
time = event_time
|
250
|
+
d.run do
|
251
|
+
d.feed("filter.nodejs", time, {'message' => nodejs_msg})
|
252
|
+
end
|
253
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['fingerprint'])
|
254
|
+
d = create_driver(nodejs_conf+"syslog true")
|
255
|
+
time = event_time
|
256
|
+
d.run do
|
257
|
+
d.feed("filter.nodejs", time, {'message' => nodejs_sys_msg})
|
258
|
+
end
|
259
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['fingerprint'])
|
260
|
+
d = create_driver(nodejs_conf+"error_msg_tag error_message")
|
261
|
+
time = event_time
|
262
|
+
d.run do
|
263
|
+
d.feed("filter.nodejs", time, {'error_message' => nodejs_msg})
|
264
|
+
end
|
265
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['fingerprint'])
|
266
|
+
d = create_driver(nodejs_conf+"syslog true\n"+"error_msg_tag error_message")
|
267
|
+
time = event_time
|
268
|
+
d.run do
|
269
|
+
d.feed("filter.nodejs", time, {'error_message' => nodejs_sys_msg})
|
270
|
+
end
|
271
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['fingerprint'])
|
272
|
+
d = create_driver(nodejs_conf+"error_msg_tag error_message")
|
273
|
+
time = event_time
|
274
|
+
d.run do
|
275
|
+
d.feed("filter.nodejs", time, {'error_message' => nodejs_error_msg})
|
276
|
+
end
|
277
|
+
assert_equal(nil, d.filtered_records[0]['fingerprint'])
|
278
|
+
end
|
279
|
+
|
280
|
+
#Nodejs fingerprint tests
|
281
|
+
testing_object = NodeFingerprintTests.new()
|
282
|
+
fingerprint_object = FingerPrinter.new()
|
283
|
+
|
284
|
+
testing_object.test_fp_not_a_stacktrace(fingerprint_object)
|
285
|
+
testing_object.test_fp_basic(fingerprint_object)
|
286
|
+
testing_object.test_fp_short(fingerprint_object)
|
287
|
+
testing_object.test_fp_mulitline_message(fingerprint_object)
|
288
|
+
testing_object.test_fp_json_wrapped(fingerprint_object)
|
289
|
+
testing_object.test_fp_json_with_at(fingerprint_object)
|
290
|
+
|
291
|
+
#Python fingerprint tests
|
292
|
+
testing_object = PythonFingerprintTests.new()
|
293
|
+
fingerprint_object = FingerPrinter.new()
|
294
|
+
|
295
|
+
testing_object.test_fp_tmp(fingerprint_object)
|
296
|
+
testing_object.test_fp_colon_in_code(fingerprint_object)
|
297
|
+
testing_object.test_fp_colon_in_code1(fingerprint_object)
|
298
|
+
testing_object.test_fp_one_err(fingerprint_object)
|
299
|
+
testing_object.test_fp_multi_err(fingerprint_object)
|
300
|
+
testing_object.test_fp_no_message(fingerprint_object)
|
301
|
+
testing_object.test_fp_message_has_traceback(fingerprint_object)
|
302
|
+
|
303
|
+
#Java fingerprint tests
|
304
|
+
testing_object = JavaFingerprintTests.new()
|
305
|
+
fingerprint_object = FingerPrinter.new()
|
306
|
+
|
307
|
+
testing_object.test_baseline(fingerprint_object)
|
308
|
+
testing_object.test_nested_basic(fingerprint_object)
|
309
|
+
testing_object.test_fill_nostacktrace_nested_exception(fingerprint_object)
|
310
|
+
testing_object.test_otsd_exception(fingerprint_object)
|
311
|
+
testing_object.test_old_nesting_sax(fingerprint_object)
|
312
|
+
testing_object.test_old_nesting_jaxb(fingerprint_object)
|
313
|
+
testing_object.test_linenumbers_ignored(fingerprint_object)
|
314
|
+
testing_object.test_circular_ref(fingerprint_object)
|
315
|
+
testing_object.test_exception_in_dynamic_proxy(fingerprint_object)
|
316
|
+
testing_object.test_reflection_inflation(fingerprint_object)
|
317
|
+
testing_object.test_nested_non_nested(fingerprint_object)
|
318
|
+
testing_object.test_multi_line_message(fingerprint_object)
|
319
|
+
testing_object.test_heuristic_stacktrace_search(fingerprint_object)
|
320
|
+
end
|