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.
@@ -0,0 +1,181 @@
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
+ #Apptuit Error Fingerprinter
18
+ require 'digest/sha1'
19
+ require 'syslog/logger'
20
+
21
+ class FingerPrinter
22
+ LANG_PYTHON = "python"
23
+ LANG_NODEJS = "nodejs"
24
+ LANG_JAVA = "java"
25
+
26
+ REASON_NOT_A_STACKTRACE = "NOT_A_STACKTRACE"
27
+ REASON_NO_EXCEPTION_NAME = "NO_EXCEPTION_NAME"
28
+ REASON_MULTIPLE_EXCEPTION_NAMES = "MULTIPLE_EXCEPTION_NAMES"
29
+
30
+
31
+ def fingerprint_error(lang, reason, message)
32
+ log = Syslog::Logger.new 'finger_printer'
33
+ error_message = 'Error fingerprinting [lang:%s] [reason:%s] message:\n%s' % [lang, reason, message]
34
+ log.error error_message
35
+ return nil
36
+ end
37
+
38
+ def fingerprint_python(message)
39
+ begin
40
+ clean_message = message
41
+ idx = clean_message.index("Traceback (most recent call last)")
42
+ if idx == -1
43
+ return fingerprint_error(LANG_PYTHON, REASON_NOT_A_STACKTRACE, clean_message)
44
+ end
45
+ clean_message = clean_message[idx..-1]
46
+ clean_message = clean_message.gsub('---', "\n---")
47
+ clean_message = clean_message.gsub(/---\s*$/, "")
48
+ t = clean_message.index(/Traceback \(most recent call last\)/)
49
+ clean_message = clean_message[t..-1]
50
+ dup = clean_message.index("Traceback (most recent call last)", idx+1)
51
+ if dup != nil
52
+ clean_message = clean_message[0..dup]
53
+ end
54
+ check_format = clean_message.scan(/---\s/)
55
+ if check_format.length == 0
56
+ clean_message = clean_message.gsub("\n", "\n--- ")
57
+ end
58
+ matches = clean_message.scan(/---\s([a-zA-Z_]+)(:|(\s*$))/)
59
+ if matches.length == 1
60
+ err_name = matches[0][0]
61
+ clean_message = clean_message.gsub(/,\s*line\s*[0-9]*\s*,/, ", line *,")
62
+ clean_message = clean_message.gsub(/---\s*((?!File).)*(\n|$)/, '')
63
+ clean_message = "%s--- %s" % [clean_message, err_name]
64
+ fingerprint = Digest::SHA1.hexdigest clean_message
65
+ stack = Array.new
66
+ stack_matches = clean_message.scan(/---\s+File\s+"([^"]*)".*\s+in\s+([^\s]*)/)
67
+ for stack_match in stack_matches do
68
+ stack << [stack_match[0], stack_match[1]]
69
+ end
70
+ return err_name, fingerprint, clean_message, stack
71
+ elsif matches.length == 0
72
+ return fingerprint_error(LANG_PYTHON, REASON_NO_EXCEPTION_NAME, message)
73
+ else
74
+ return fingerprint_error(LANG_PYTHON, REASON_MULTIPLE_EXCEPTION_NAMES, message)
75
+ end
76
+ rescue
77
+ return nil
78
+ end
79
+ end
80
+
81
+ def fingerprint_nodejs(message)
82
+ begin
83
+ json_stack_matches = message.scan(/"stack"\s*:\s*"([^\"]*)"/)
84
+ if json_stack_matches.length > 0
85
+ clean_message = json_stack_matches[0].to_s
86
+ clean_message = clean_message[2..clean_message.length-3]
87
+ clean_message = clean_message.gsub(/\s+at\s+/, "\n--- at ")
88
+ else
89
+ clean_message = message.gsub('---', "\n---")
90
+ end
91
+ matches = clean_message.scan(/\s*at[^(]*([^)]*\.js:[0-9]+:[0-9]+)/)
92
+ if matches.length < 1
93
+ return fingerprint_error(LANG_NODEJS, REASON_NOT_A_STACKTRACE, clean_message)
94
+ end
95
+ matches = clean_message.scan(/\s*([a-zA-Z]+)(:\s|(\s*$))/)
96
+ if matches.length > 0
97
+ err_name = matches[0][0]
98
+ matches = clean_message.scan(/(^|\n)---\s*at\s*(.*)/)
99
+ lines = ""
100
+ for parts in matches do
101
+ frame = parts[1].strip
102
+ lines = "%sat %s\n" % [lines, frame]
103
+ end
104
+ clean_message = "%s\n%s" % [err_name,lines]
105
+ clean_message = clean_message.gsub(/:[0-9]+:[0-9]+/, ":*:*")
106
+ fingerprint = Digest::SHA1.hexdigest clean_message
107
+ stack = []
108
+ stack_matches = clean_message.scan(/at\s+((.+)\s+\()?([^:]*).*/)
109
+ for stack_match in stack_matches do
110
+ stack << [stack_match[1], stack_match[2]]
111
+ end
112
+ return err_name, fingerprint, clean_message, stack
113
+ else
114
+ return fingerprint_error(LANG_NODEJS, REASON_NO_EXCEPTION_NAME, message)
115
+ end
116
+ rescue
117
+ return
118
+ end
119
+ end
120
+
121
+ def fingerprint_java(message)
122
+ begin
123
+ message = message.gsub(/\\n/, "\n")
124
+ message = message.gsub(/\\t/, "\t")
125
+ matches = message.scan(/^[ \t]*([^ \t]+)[:\r\n]/)
126
+ if matches.length == 1
127
+ err_name = matches[0][0]
128
+ else
129
+ heuristic_message = heuristic_search_java_stack_trace(message)
130
+ if heuristic_message != nil
131
+ err_name = heuristic_message[3]
132
+ message = heuristic_message[2]
133
+ else
134
+ return fingerprint_error(LANG_JAVA, REASON_NO_EXCEPTION_NAME, message)
135
+ end
136
+ end
137
+ clean_message = message
138
+ clean_message = clean_message.gsub(/\A\s*([^:\s]*).*/, '\1')
139
+ clean_message = clean_message.gsub(/(Caused by: [^:\s]*).*/, '\1')
140
+ clean_message = clean_message.gsub(/[ \t]*at[ \t]+([^(]+).*/, "\tat "+'\1')
141
+ clean_message = clean_message.gsub(/at sun\.reflect\.NativeMethodAccessorImpl\.invoke0/, "\n")
142
+ clean_message = clean_message.gsub(/at sun\.reflect\.NativeMethodAccessorImpl(\.[^.\s]+)/, 'at sun.reflect.$$MethodAccessor$$\1')
143
+ clean_message = clean_message.gsub(/at sun\.reflect\.GeneratedMethodAccessor.*(\.[^.\s]+)/, 'at sun.reflect.$$MethodAccessor$$\1')
144
+ clean_message = clean_message.gsub(/at com\.sun\.proxy\.\$Proxy.*\.([^.]+)/, 'at com.sun.proxy.$Proxy$$')
145
+ clean_message = clean_message.gsub(/^((?!(Caused by:|Suppressed:|(\s*at ))).)*$/,'')
146
+ clean_message = clean_message.gsub(/\A^/,err_name)
147
+ clean_message = clean_message.gsub(/([\r\n]\s*[\r\n])+/, "\n").strip
148
+
149
+ stack = Array.new
150
+ cur_stack = Array.new
151
+ stack_matches = clean_message.scan(/(Caused by:|Suppressed:)|(at\s+(.+)\.([^.\s]+))/)
152
+ for stack_match in stack_matches do
153
+ if stack_match[0]
154
+ stack = cur_stack + stack
155
+ cur_stack.clear
156
+ else
157
+ cur_stack << [stack_match[2], stack_match[3]]
158
+ end
159
+ end
160
+ if stack
161
+ stack = cur_stack + stack
162
+ else
163
+ stack = cur_stack
164
+ end
165
+ fingerprint = Digest::SHA1.hexdigest clean_message
166
+ return err_name, fingerprint, clean_message, stack
167
+ rescue
168
+ return
169
+ end
170
+ end
171
+
172
+ def heuristic_search_java_stack_trace(log_message)
173
+ matches = /(^|[\r\n])((([\w_$][\w_$]*\.)*[\w_$][\w_$]*)([\r\\n]|:[^\r\\n]*).*\s*at\s+[^\s]+\(.*)/m.match(log_message)
174
+ if matches != nil
175
+ return matches
176
+ else
177
+ return nil
178
+ end
179
+ end
180
+ end
181
+
data/test/helper.rb ADDED
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.expand_path("../../", __FILE__))
2
+ require 'simplecov'
3
+ SimpleCov.start 'rails' do
4
+ add_filter "/test/"
5
+ end
6
+ if ENV['CI'] == 'true'
7
+ require 'codecov'
8
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
9
+ end
10
+ require "test-unit"
11
+ require "fluent/test"
12
+ require "fluent/test/driver/filter"
13
+ require "fluent/test/helpers"
14
+
15
+ Test::Unit::TestCase.include(Fluent::Test::Helpers)
16
+ Test::Unit::TestCase.extend(Fluent::Test::Helpers)
@@ -0,0 +1,652 @@
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 JavaFingerprintTests
23
+
24
+ def test_baseline(fingerprinter)
25
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
26
+ 'com.bigbasket.po.exceptions.BadRequestException: Invalid Sku id. Sku doesn\'t belong to this city - 10000200\n'+
27
+ '\tat com.bigbasket.po.services.po.impl.ProductProcessor.lambda$fetchProductsWithFIandRI$22(ProductProcessor.java:223)\n'+
28
+ '\tat com.bigbasket.po.common.RxUtil.lambda$zipFlatMap2$1(RxUtil.java:23)\n'+
29
+ '\tat io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:132)\n'+
30
+ '\tat io.reactivex.internal.operators.flowable.FlowableZip$ZipCoordinator.drain(FlowableZip.java:250)\n'+
31
+ '\tat io.reactivex.internal.operators.flowable.FlowableZip$ZipSubscriber.onNext(FlowableZip.java:383)\n'+
32
+ '\tat io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drainLoop(FlowableFlatMap.java:500)\n'+
33
+ '\tat io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drain(FlowableFlatMap.java:366)\n'+
34
+ '\tat io.reactivex.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onNext(FlowableFlatMap.java:662)\n'+
35
+ '\tat io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:118)\n'+
36
+ '\tat io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63)\n'+
37
+ '\tat io.reactivex.internal.operators.single.SingleJust.subscribeActual(SingleJust.java:30)\n'+
38
+ '\tat io.reactivex.Single.subscribe(Single.java:3394)\n'+
39
+ '\tat io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37)\n'+
40
+ '\tat io.reactivex.Flowable.subscribe(Flowable.java:14409)\n'+
41
+ '\tat io.reactivex.Flowable.subscribe(Flowable.java:14356)\n'+
42
+ '\tat io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:163)\n'+
43
+ '\tat io.reactivex.internal.operators.flowable.FlowableZip$ZipCoordinator.drain(FlowableZip.java:250)\n'+
44
+ '\tat io.reactivex.internal.operators.flowable.FlowableZip$ZipSubscriber.onNext(FlowableZip.java:383)\n'+
45
+ '\tat io.reactivex.internal.operators.flowable.FlowableRepeat$RepeatSubscriber.onNext(FlowableRepeat.java:65)\n'+
46
+ '\tat io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:133)\n'+
47
+ '\tat io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63)\n'+
48
+ '\tat io.reactivex.internal.operators.single.SingleCache.subscribeActual(SingleCache.java:59)\n'+
49
+ '\tat io.reactivex.Single.subscribe(Single.java:3394)\n'+
50
+ '\tat io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37)\n'+
51
+ '\tat io.reactivex.Flowable.subscribe(Flowable.java:14409)\n'+
52
+ '\tat io.reactivex.Flowable.subscribe(Flowable.java:14356)\n'+
53
+ '\tat io.reactivex.internal.operators.flowable.FlowableRepeat$RepeatSubscriber.subscribeNext(FlowableRepeat.java:100)\n'+
54
+ '\tat io.reactivex.internal.operators.flowable.FlowableRepeat$RepeatSubscriber.onComplete(FlowableRepeat.java:79)\n'+
55
+ '\tat io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:135)\n'+
56
+ '\tat io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63)\n'+
57
+ '\tat io.reactivex.internal.operators.single.SingleCache.onSuccess(SingleCache.java:134)\n'+
58
+ '\tat io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver.onSuccess(SingleFlatMap.java:111)\n'+
59
+ '\tat io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:64)\n'+
60
+ '\tat io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver.onSuccess(SingleFlatMap.java:111)\n'+
61
+ '\tat io.reactivex.internal.operators.single.SingleJust.subscribeActual(SingleJust.java:30)\n'+
62
+ '\tat io.reactivex.Single.subscribe(Single.java:3394)\n'+
63
+ '\tat io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onSuccess(SingleFlatMap.java:84)\n'+
64
+ '\tat io.vertx.reactivex.core.impl.AsyncResultSingle.lambda$subscribeActual$0(AsyncResultSingle.java:46)\n'+
65
+ '\tat io.vertx.ext.sql.SQLClient.lambda$null$5(SQLClient.java:129)\n'+
66
+ '\tat io.vertx.ext.asyncsql.impl.AsyncSQLConnectionImpl.close(AsyncSQLConnectionImpl.java:190)\n'+
67
+ '\tat io.vertx.ext.sql.SQLClient.lambda$null$6(SQLClient.java:125)\n'+
68
+ '\tat io.vertx.ext.asyncsql.impl.AsyncSQLConnectionImpl.lambda$handleAsyncQueryResultToResultSet$12(AsyncSQLConnectionImpl.java:319)\n'+
69
+ '\tat io.vertx.ext.asyncsql.impl.ScalaUtils$3.apply(ScalaUtils.java:91)\n'+
70
+ '\tat io.vertx.ext.asyncsql.impl.ScalaUtils$3.apply(ScalaUtils.java:87)\n'+
71
+ '\tat scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)\n'+
72
+ '\tat io.vertx.ext.asyncsql.impl.VertxEventLoopExecutionContext.lambda$execute$0(VertxEventLoopExecutionContext.java:59)\n'+
73
+ '\tat io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:339)\n'+
74
+ '\tat io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)\n'+
75
+ '\tat io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)\n'+
76
+ '\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)\n'+
77
+ '\tat io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)\n'+
78
+ '\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n'+
79
+ '\tat java.lang.Thread.run(Thread.java:748)\n'
80
+ )
81
+ assert_equal('com.bigbasket.po.exceptions.BadRequestException', err_name)
82
+ assert_equal('843c0e208a44e24bb73d926bf5af706893c91e75', fingerprint)
83
+ end
84
+
85
+ def test_nested_basic(fingerprinter)
86
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
87
+ 'java.util.concurrent.ExecutionException: 3\n'+
88
+ '\tat fingerprinter.Main.first(Main.java:17)\n'+
89
+ '\tat fingerprinter.Main.main(Main.java:10)\n'+
90
+ 'Caused by: java.util.concurrent.ExecutionException: 2\n'+
91
+ '\tat fingerprinter.Main.second(Main.java:33)\n'+
92
+ '\tat fingerprinter.Main.bloatSecond1(Main.java:26)\n'+
93
+ '\tat fingerprinter.Main.bloatSecond(Main.java:22)\n'+
94
+ '\tat fingerprinter.Main.first(Main.java:15)\n'+
95
+ '\t... 1 more\n'+
96
+ 'Caused by: java.io.IOException: 1\n'+
97
+ '\tat fingerprinter.Main.third(Main.java:46)\n'+
98
+ '\tat fingerprinter.Main.bloatThird1(Main.java:42)\n'+
99
+ '\tat fingerprinter.Main.bloatThird(Main.java:38)\n'+
100
+ '\tat fingerprinter.Main.second(Main.java:31)\n'+
101
+ '\t... 4 more\n'
102
+ )
103
+ assert_equal('java.util.concurrent.ExecutionException', err_name)
104
+ assert_equal('d3b6a4b1f4b389b2f2778b54b1463e66f8803841', fingerprint)
105
+ end
106
+
107
+ def test_fill_nostacktrace_nested_exception(fingerprinter)
108
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
109
+ 'org.elasticsearch.transport.RemoteTransportException: [13.232.79.206][10.0.0.14:9300][indices:data/read/search[phase/query]]\n'+
110
+ 'Caused by: org.elasticsearch.index.query.QueryShardException: Failed to parse query ["connectreema@gmail.com" AND "Reserve" AND 40046547"]\n'+
111
+ '\tat org.elasticsearch.index.query.QueryStringQueryBuilder.doToQuery(QueryStringQueryBuilder.java:1044) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
112
+ '\tat org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
113
+ '\tat org.elasticsearch.index.query.BoolQueryBuilder.addBooleanClauses(BoolQueryBuilder.java:404) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
114
+ '\tat org.elasticsearch.index.query.BoolQueryBuilder.doToQuery(BoolQueryBuilder.java:378) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
115
+ '\tat org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
116
+ '\tat org.elasticsearch.index.query.QueryShardContext.lambda$toQuery$2(QueryShardContext.java:305) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
117
+ '\tat org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:317) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
118
+ '\tat org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:304) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
119
+ '\tat org.elasticsearch.search.SearchService.parseSource(SearchService.java:724) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
120
+ '\tat org.elasticsearch.search.SearchService.createContext(SearchService.java:575) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
121
+ '\tat org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:551) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
122
+ '\tat org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:347) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
123
+ '\tat org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:333) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
124
+ '\tat org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:329) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
125
+ '\tat org.elasticsearch.search.SearchService$3.doRun(SearchService.java:1019) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
126
+ '\tat org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
127
+ '\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
128
+ '\tat org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
129
+ '\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
130
+ '\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_181]\n'+
131
+ '\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_181]\n'+
132
+ '\tat java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]\n'+
133
+ 'Caused by: org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: parse_exception: Cannot parse \'"connectreema@gmail.com" AND "Reserve" AND 40046547"\': Lexical error at line 1, column 54. Encountered: <EOF> after : ""\n'+
134
+ '\tat org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:114) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
135
+ '\tat org.elasticsearch.index.search.QueryStringQueryParser.parse(QueryStringQueryParser.java:793) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
136
+ '\tat org.elasticsearch.index.query.QueryStringQueryBuilder.doToQuery(QueryStringQueryBuilder.java:1042) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
137
+ '\tat org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
138
+ '\tat org.elasticsearch.index.query.BoolQueryBuilder.addBooleanClauses(BoolQueryBuilder.java:404) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
139
+ '\tat org.elasticsearch.index.query.BoolQueryBuilder.doToQuery(BoolQueryBuilder.java:378) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
140
+ '\tat org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
141
+ '\tat org.elasticsearch.index.query.QueryShardContext.lambda$toQuery$2(QueryShardContext.java:305) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
142
+ '\tat org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:317) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
143
+ '\tat org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:304) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
144
+ '\tat org.elasticsearch.search.SearchService.parseSource(SearchService.java:724) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
145
+ '\tat org.elasticsearch.search.SearchService.createContext(SearchService.java:575) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
146
+ '\tat org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:551) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
147
+ '\tat org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:347) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
148
+ '\tat org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:333) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
149
+ '\tat org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:329) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
150
+ '\tat org.elasticsearch.search.SearchService$3.doRun(SearchService.java:1019) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
151
+ '\tat org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
152
+ '\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
153
+ '\tat org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
154
+ '\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
155
+ '\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_181]\n'+
156
+ '\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_181]\n'+
157
+ '\tat java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_181]\n'+
158
+ 'Caused by: org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: token_mgr_error: Lexical error at line 1, column 54. Encountered: <EOF> after : ""\n'+
159
+ '\tat org.apache.lucene.queryparser.classic.QueryParserTokenManager.getNextToken(QueryParserTokenManager.java:1119) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
160
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.jj_scan_token(QueryParser.java:822) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
161
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.jj_3R_4(QueryParser.java:692) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
162
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.jj_3_3(QueryParser.java:714) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
163
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.jj_2_3(QueryParser.java:660) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
164
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:324) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
165
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:303) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
166
+ '\tat org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:215) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
167
+ '\tat org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:109) ~[lucene-queryparser-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:52:15]\n'+
168
+ '\tat org.elasticsearch.index.search.QueryStringQueryParser.parse(QueryStringQueryParser.java:793) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
169
+ '\tat org.elasticsearch.index.query.QueryStringQueryBuilder.doToQuery(QueryStringQueryBuilder.java:1042) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
170
+ '\tat org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
171
+ '\tat org.elasticsearch.index.query.BoolQueryBuilder.addBooleanClauses(BoolQueryBuilder.java:404) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
172
+ '\tat org.elasticsearch.index.query.BoolQueryBuilder.doToQuery(BoolQueryBuilder.java:378) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
173
+ '\tat org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
174
+ '\tat org.elasticsearch.index.query.QueryShardContext.lambda$toQuery$2(QueryShardContext.java:305) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
175
+ '\tat org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:317) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
176
+ '\tat org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:304) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
177
+ '\tat org.elasticsearch.search.SearchService.parseSource(SearchService.java:724) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
178
+ '\tat org.elasticsearch.search.SearchService.createContext(SearchService.java:575) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
179
+ '\tat org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:551) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
180
+ '\tat org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:347) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
181
+ '\tat org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:333) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
182
+ '\tat org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:329) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
183
+ '\tat org.elasticsearch.search.SearchService$3.doRun(SearchService.java:1019) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
184
+ '\tat org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
185
+ '\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
186
+ '\tat org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
187
+ '\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.4.2.jar:6.4.2]\n'+
188
+ '\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_181]\n'+
189
+ '\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_181]\n'+
190
+ '\tat java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_181]\n'+
191
+ '\n')
192
+ assert_equal('org.elasticsearch.transport.RemoteTransportException', err_name)
193
+ assert_equal('12aa95426a5f03e2760af8dc6096203bf30a3fdc', fingerprint)
194
+ end
195
+
196
+ def test_otsd_exception(fingerprinter)
197
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
198
+ 'net.opentsdb.tsd.TokenVerificationException: Failed Verification : token\'s orgId does not match\n'+
199
+ '\tat net.opentsdb.utils.TenantUtil.validateTokenData(TenantUtil.java:233) ~[tsdb-2.3.1.jar:5cd3f87]\n'+
200
+ '\tat net.opentsdb.utils.TenantUtil.getValidatedToken(TenantUtil.java:136) ~[tsdb-2.3.1.jar:5cd3f87]\n'+
201
+ '\tat net.opentsdb.utils.TenantUtil.getValidatedTokenInfo(TenantUtil.java:127) ~[tsdb-2.3.1.jar:5cd3f87]\n'+
202
+ '\tat net.opentsdb.tsd.TenantRpc.doValidate(TenantRpc.java:167) [tsdb-2.3.1.jar:5cd3f87]\n'+
203
+ '\tat net.opentsdb.tsd.TenantRpc.validateTokenOrgId(TenantRpc.java:160) [tsdb-2.3.1.jar:5cd3f87]\n'+
204
+ '\tat net.opentsdb.tsd.TenantRpc.execute(TenantRpc.java:52) [tsdb-2.3.1.jar:5cd3f87]\n'+
205
+ '\tat net.opentsdb.tsd.RpcHandler.handleHttpQuery(RpcHandler.java:348) [tsdb-2.3.1.jar:5cd3f87]\n'+
206
+ '\tat net.opentsdb.tsd.RpcHandler.messageReceived(RpcHandler.java:174) [tsdb-2.3.1.jar:5cd3f87]\n'+
207
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
208
+ '\tat org.jboss.netty.handler.timeout.IdleStateAwareChannelUpstreamHandler.handleUpstream(IdleStateAwareChannelUpstreamHandler.java:36) [netty-3.9.4.Final.jar:na]\n'+
209
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
210
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
211
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.messageReceived(SimpleChannelUpstreamHandler.java:124) [netty-3.9.4.Final.jar:na]\n'+
212
+ '\tat net.opentsdb.tsd.PipelineFactory$DetectHttpOrRpc$3.messageReceived(PipelineFactory.java:235) [tsdb-2.3.1.jar:5cd3f87]\n'+
213
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
214
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
215
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
216
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.messageReceived(SimpleChannelUpstreamHandler.java:124) [netty-3.9.4.Final.jar:na]\n'+
217
+ '\tat net.opentsdb.tsd.PipelineFactory$DetectHttpOrRpc$2.messageReceived(PipelineFactory.java:217) [tsdb-2.3.1.jar:5cd3f87]\n'+
218
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
219
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
220
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
221
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.messageReceived(SimpleChannelUpstreamHandler.java:124) [netty-3.9.4.Final.jar:na]\n'+
222
+ '\tat net.opentsdb.tsd.PipelineFactory$DetectHttpOrRpc$1.messageReceived(PipelineFactory.java:185) [tsdb-2.3.1.jar:5cd3f87]\n'+
223
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
224
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
225
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
226
+ '\tat org.jboss.netty.handler.timeout.IdleStateHandler.messageReceived(IdleStateHandler.java:294) [netty-3.9.4.Final.jar:na]\n'+
227
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
228
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
229
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
230
+ '\tat org.jboss.netty.handler.codec.http.HttpContentEncoder.messageReceived(HttpContentEncoder.java:82) [netty-3.9.4.Final.jar:na]\n'+
231
+ '\tat org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:88) [netty-3.9.4.Final.jar:na]\n'+
232
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
233
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
234
+ '\tat org.jboss.netty.handler.codec.http.HttpContentDecoder.messageReceived(HttpContentDecoder.java:108) [netty-3.9.4.Final.jar:na]\n'+
235
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
236
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
237
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
238
+ '\tat org.jboss.netty.handler.codec.http.HttpChunkAggregator.messageReceived(HttpChunkAggregator.java:145) [netty-3.9.4.Final.jar:na]\n'+
239
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
240
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
241
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
242
+ '\tat org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) [netty-3.9.4.Final.jar:na]\n'+
243
+ '\tat org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:459) [netty-3.9.4.Final.jar:na]\n'+
244
+ '\tat org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:536) [netty-3.9.4.Final.jar:na]\n'+
245
+ '\tat org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) [netty-3.9.4.Final.jar:na]\n'+
246
+ '\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) [netty-3.9.4.Final.jar:na]\n'+
247
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
248
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) [netty-3.9.4.Final.jar:na]\n'+
249
+ '\tat org.jboss.netty.channel.SimpleChannelHandler.messageReceived(SimpleChannelHandler.java:142) [netty-3.9.4.Final.jar:na]\n'+
250
+ '\tat org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:88) [netty-3.9.4.Final.jar:na]\n'+
251
+ '\tat net.opentsdb.tsd.ConnectionManager.handleUpstream(ConnectionManager.java:126) [tsdb-2.3.1.jar:5cd3f87]\n'+
252
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [netty-3.9.4.Final.jar:na]\n'+
253
+ '\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) [netty-3.9.4.Final.jar:na]\n'+
254
+ '\tat org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) [netty-3.9.4.Final.jar:na]\n'+
255
+ '\tat org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) [netty-3.9.4.Final.jar:na]\n'+
256
+ '\tat org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) [netty-3.9.4.Final.jar:na]\n'+
257
+ '\tat org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) [netty-3.9.4.Final.jar:na]\n'+
258
+ '\tat org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) [netty-3.9.4.Final.jar:na]\n'+
259
+ '\tat org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) [netty-3.9.4.Final.jar:na]\n'+
260
+ '\tat org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) [netty-3.9.4.Final.jar:na]\n'+
261
+ '\tat org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.9.4.Final.jar:na]\n'+
262
+ '\tat org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [netty-3.9.4.Final.jar:na]\n'+
263
+ '\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_151]\n'+
264
+ '\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_151]\n'+
265
+ '\tat java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]\n'
266
+ )
267
+ assert_equal('net.opentsdb.tsd.TokenVerificationException', err_name)
268
+ assert_equal('a1ae1f04b76838fc24c91f9bdc47a01d0103ccea', fingerprint)
269
+ end
270
+
271
+ def test_old_nesting_sax(fingerprinter)
272
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
273
+ 'java.util.concurrent.ExecutionException: 3\n'+
274
+ '\tat fingerprinter.Main.first(Main.java:17)\n'+
275
+ '\tat fingerprinter.Main.main(Main.java:10)\n'+
276
+ 'Caused by: org.xml.sax.SAXException: 2\n'+
277
+ 'java.io.IOException: 1\n'+
278
+ '\tat fingerprinter.Main.second(Main.java:33)\n'+
279
+ '\tat fingerprinter.Main.bloatSecond1(Main.java:26)\n'+
280
+ '\tat fingerprinter.Main.bloatSecond(Main.java:22)\n'+
281
+ '\tat fingerprinter.Main.first(Main.java:15)\n'+
282
+ '\t... 1 more\n'+
283
+ 'Caused by: java.io.IOException: 1\n'+
284
+ '\tat fingerprinter.Main.third(Main.java:46)\n'+
285
+ '\tat fingerprinter.Main.bloatThird1(Main.java:42)\n'+
286
+ '\tat fingerprinter.Main.bloatThird(Main.java:38)\n'+
287
+ '\tat fingerprinter.Main.second(Main.java:31)\n'+
288
+ '\t... 4 more\n'
289
+ )
290
+ assert_equal('java.util.concurrent.ExecutionException', err_name)
291
+ assert_equal('c41b63c8736c64f28869c8bd6e5d09d956821c9f', fingerprint)
292
+ end
293
+
294
+ def test_old_nesting_jaxb(fingerprinter)
295
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
296
+ 'javax.xml.bind.JAXBException: 3\n'+
297
+ ' - with linked exception:\n'+
298
+ '[org.xml.sax.SAXException: 2\n'+
299
+ 'java.io.IOException: 1]\n'+
300
+ '\tat fingerprinter.Main.first(Main.java:17)\n'+
301
+ '\tat fingerprinter.Main.main(Main.java:10)\n'+
302
+ 'Caused by: org.xml.sax.SAXException: 2\n'+
303
+ 'java.io.IOException: 1\n'+
304
+ '\tat fingerprinter.Main.second(Main.java:33)\n'+
305
+ '\tat fingerprinter.Main.bloatSecond1(Main.java:26)\n'+
306
+ '\tat fingerprinter.Main.bloatSecond(Main.java:22)\n'+
307
+ '\tat fingerprinter.Main.first(Main.java:15)\n'+
308
+ '\t... 1 more\n'+
309
+ 'Caused by: java.io.IOException: 1\n'+
310
+ '\tat fingerprinter.Main.third(Main.java:46)\n'+
311
+ '\tat fingerprinter.Main.bloatThird1(Main.java:42)\n'+
312
+ '\tat fingerprinter.Main.bloatThird(Main.java:38)\n'+
313
+ '\tat fingerprinter.Main.second(Main.java:31)\n'+
314
+ '\t... 4 more\n'
315
+ )
316
+ assert_equal('javax.xml.bind.JAXBException', err_name)
317
+ assert_equal('ddbf72ae7d0a14e785eb877d80854e9771a52635', fingerprint)
318
+ end
319
+
320
+ def test_linenumbers_ignored(fingerprinter)
321
+ err_name1, fingerprint1, essence1, stack = fingerprinter.fingerprint_java(
322
+ 'java.net.MalformedURLException: no protocol: asdfasdf\n'+
323
+ '\tat java.net.URL.<init>(URL.java:593)\n'+
324
+ '\tat java.net.URL.<init>(URL.java:490)\n'+
325
+ '\tat java.net.URL.<init>(URL.java:439)\n'+
326
+ '\tat fingerprinter.ErrorFingerprintTests._testLineNumbersAreIgnored(ErrorFingerprintTests.java:59)\n'+
327
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:23)\n'
328
+ )
329
+ err_name2, fingerprint2, essence2, stack = fingerprinter.fingerprint_java(
330
+ 'java.net.MalformedURLException: no protocol: asdfasdf\n'+
331
+ '\tat java.net.URL.<init>(URL.java:593)\n'+
332
+ '\tat java.net.URL.<init>(URL.java:490)\n'+
333
+ '\tat java.net.URL.<init>(URL.java:439)\n'+
334
+ '\tat fingerprinter.ErrorFingerprintTests._testLineNumbersAreIgnored(ErrorFingerprintTests.java:65)\n'+
335
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:23)\n'
336
+ )
337
+ assert_equal(err_name1, err_name2)
338
+ assert_equal(fingerprint1, fingerprint2)
339
+ assert_equal(essence1, essence2)
340
+ end
341
+
342
+ def test_circular_ref(fingerprinter)
343
+ circular = fingerprinter.fingerprint_java(
344
+ 'fingerprinter.ErrorFingerprintTests$CircularReferenceException\n'+
345
+ '\tat fingerprinter.ErrorFingerprintTests._testCircularReferenceException(ErrorFingerprintTests.java:98)\n'+
346
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:25)\n'+
347
+ '\t[CIRCULAR REFERENCE:fingerprinter.ErrorFingerprintTests$CircularReferenceException]\n'
348
+ )
349
+ circular1 = fingerprinter.fingerprint_java(
350
+ 'fingerprinter.ErrorFingerprintTests$CircularReferenceException\n'+
351
+ '\tat fingerprinter.ErrorFingerprintTests._testCircularReferenceException(ErrorFingerprintTests.java:99)\n'+
352
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:25)\n'+
353
+ '\t[CIRCULAR REFERENCE:fingerprinter.ErrorFingerprintTests$CircularReferenceException]\n'
354
+ )
355
+ assert_equal(circular[1], circular1[1])
356
+ end
357
+
358
+ def test_exception_in_dynamic_proxy(fingerprinter)
359
+ t1 = fingerprinter.fingerprint_java(
360
+ 'java.lang.NullPointerException\n'+
361
+ '\tat fingerprinter.ErrorFingerprintTests$MyProxy.invoke(ErrorFingerprintTests.java:213)\n'+
362
+ '\tat com.sun.proxy.$Proxy0.size(Unknown Source)\n'+
363
+ '\tat fingerprinter.ErrorFingerprintTests._createExceptionInDynamicProxy(ErrorFingerprintTests.java:123)\n'+
364
+ '\tat fingerprinter.ErrorFingerprintTests._testExceptionsInADynamicProxy(ErrorFingerprintTests.java:114)\n'+
365
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:27)\n'
366
+ )
367
+ t2 = fingerprinter.fingerprint_java(
368
+ 'java.lang.NullPointerException\n'+
369
+ '\tat fingerprinter.ErrorFingerprintTests$MyProxy.invoke(ErrorFingerprintTests.java:213)\n'+
370
+ '\tat com.sun.proxy.$Proxy1.size(Unknown Source)\n'+
371
+ '\tat fingerprinter.ErrorFingerprintTests._createExceptionInDynamicProxy(ErrorFingerprintTests.java:123)\n'+
372
+ '\tat fingerprinter.ErrorFingerprintTests._testExceptionsInADynamicProxy(ErrorFingerprintTests.java:115)\n'+
373
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:27)\n'
374
+ )
375
+ assert_equal(t1[1], t2[1])
376
+ end
377
+
378
+ def test_reflection_inflation(fingerprinter)
379
+ t1 = fingerprinter.fingerprint_java(
380
+ 'java.lang.reflect.InvocationTargetException\n'+
381
+ '\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n'+
382
+ '\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n'+
383
+ '\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n'+
384
+ '\tat java.lang.reflect.Method.invoke(Method.java:498)\n'+
385
+ '\tat fingerprinter.ErrorFingerprintTests._createReflectedException(ErrorFingerprintTests.java:160)\n'+
386
+ '\tat fingerprinter.ErrorFingerprintTests._testExceptionsFromReflectionInflation(ErrorFingerprintTests.java:134)\n'+
387
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:28)\n'+
388
+ 'Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0\n'+
389
+ '\tat java.util.ArrayList.rangeCheck(ArrayList.java:657)\n'+
390
+ '\tat java.util.ArrayList.get(ArrayList.java:433)\n'+
391
+ '\t... 7 more\n'
392
+ )
393
+ t2 = fingerprinter.fingerprint_java(
394
+ 'java.lang.reflect.InvocationTargetException\n'+
395
+ '\tat sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)\n'+
396
+ '\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n'+
397
+ '\tat java.lang.reflect.Method.invoke(Method.java:498)\n'+
398
+ '\tat fingerprinter.ErrorFingerprintTests._createReflectedException(ErrorFingerprintTests.java:160)\n'+
399
+ '\tat fingerprinter.ErrorFingerprintTests._testExceptionsFromReflectionInflation(ErrorFingerprintTests.java:148)\n'+
400
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:28)\n'+
401
+ 'Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0\n'+
402
+ '\tat java.util.ArrayList.rangeCheck(ArrayList.java:657)\n'+
403
+ '\tat java.util.ArrayList.get(ArrayList.java:433)\n'+
404
+ '\t... 6 more\n'
405
+ )
406
+ assert_equal(t1[1], t2[1])
407
+ end
408
+
409
+ def test_nested_non_nested(fingerprinter)
410
+ nested = fingerprinter.fingerprint_java(
411
+ 'java.lang.RuntimeException: java.net.MalformedURLException: no protocol: asdfasdf\n'+
412
+ '\tat fingerprinter.ErrorFingerprintTests._testNestedException(ErrorFingerprintTests.java:82)\n'+
413
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:24)\n'+
414
+ 'Caused by: java.net.MalformedURLException: no protocol: asdfasdf\n'+
415
+ '\tat java.net.URL.<init>(URL.java:593)\n'+
416
+ '\tat java.net.URL.<init>(URL.java:490)\n'+
417
+ '\tat java.net.URL.<init>(URL.java:439)\n'+
418
+ '\tat fingerprinter.ErrorFingerprintTests._testNestedException(ErrorFingerprintTests.java:77)\n'+
419
+ '\t... 1 more\n')
420
+
421
+ non_nested = fingerprinter.fingerprint_java(
422
+ 'java.lang.RuntimeException\n'+
423
+ '\tat fingerprinter.ErrorFingerprintTests._testNestedException(ErrorFingerprintTests.java:84)\n'+
424
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:24)\n')
425
+
426
+ nested_diff_line = fingerprinter.fingerprint_java(
427
+ 'java.lang.RuntimeException: java.net.MalformedURLException: no protocol: asdfasdf\n'+
428
+ '\tat fingerprinter.ErrorFingerprintTests._testNestedException(ErrorFingerprintTests.java:83)\n'+
429
+ '\tat fingerprinter.ErrorFingerprintTests.main(ErrorFingerprintTests.java:24)\n'+
430
+ 'Caused by: java.net.MalformedURLException: no protocol: asdfasdf\n'+
431
+ '\tat java.net.URL.<init>(URL.java:593)\n'+
432
+ '\tat java.net.URL.<init>(URL.java:490)\n'+
433
+ '\tat java.net.URL.<init>(URL.java:439)\n'+
434
+ '\tat fingerprinter.ErrorFingerprintTests._testNestedException(ErrorFingerprintTests.java:77)\n'+
435
+ '\t... 1 more\n')
436
+
437
+ assert_equal(nested[1] == non_nested[1],false)
438
+ assert_equal(nested[1], nested_diff_line[1])
439
+ end
440
+
441
+
442
+ def test_multi_line_message(fingerprinter)
443
+ err_name, fingerprint, essence, stack = fingerprinter.fingerprint_java(
444
+ 'java.lang.AssertionError: Expect timeout (30000 ms) for matcher: anyOf(regexp(\'(mysql> |> )$\'),regexp(\'Bye\n'+
445
+ 'root@0c6b30fe8662:~# \'))\n'+
446
+ '\tat net.sf.expectit.ExpectImpl.expectIn(ExpectImpl.java:69)\n'+
447
+ '\tat net.sf.expectit.ExpectImpl.expectIn(ExpectImpl.java:117)\n'+
448
+ '\tat net.sf.expectit.ExpectImpl.expect(ExpectImpl.java:122)\n'+
449
+ '\tat com.wavemaker.developer.cloud.commons.core.models.AbstractDbShellImpl.executeCommand(AbstractDbShellImpl.java:138)\n'+
450
+ '\tat com.wavemaker.developer.cloud.manager.impl.DBShellManagerImpl.executeDbCommand(DBShellManagerImpl.java:83)\n'+
451
+ '\tat com.wavemaker.developer.cloud.service.impl.DBShellServiceImpl.operate(DBShellServiceImpl.java:63)\n'+
452
+ '\tat com.wavemaker.developer.cloud.controller.DBShellController.operate(DBShellController.java:62)\n'+
453
+ '\tat sun.reflect.GeneratedMethodAccessor375.invoke(Unknown Source)\n'+
454
+ '\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n'+
455
+ '\tat java.lang.reflect.Method.invoke(Method.java:498)\n'+
456
+ '\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n'+
457
+ '\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)\n'+
458
+ '\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)\n'+
459
+ '\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:849)\n'+
460
+ '\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:760)\n'+
461
+ '\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)\n'+
462
+ '\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)\n'+
463
+ '\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)\n'+
464
+ '\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)\n'+
465
+ '\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)\n'+
466
+ '\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\n'+
467
+ '\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\n'+
468
+ '\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\n'+
469
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\n'+
470
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
471
+ '\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\n'+
472
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
473
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
474
+ '\tat com.wavemaker.commons.core.web.filters.EtagFilter.doFilterInternal(EtagFilter.java:42)\n'+
475
+ '\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\n'+
476
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
477
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
478
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)\n'+
479
+ '\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)\n'+
480
+ '\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)\n'+
481
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
482
+ '\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n'+
483
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
484
+ '\tat org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)\n'+
485
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
486
+ '\tat org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)\n'+
487
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
488
+ '\tat org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:150)\n'+
489
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
490
+ '\tat org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)\n'+
491
+ '\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\n'+
492
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
493
+ '\tat org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)\n'+
494
+ '\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\n'+
495
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
496
+ '\tat org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)\n'+
497
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
498
+ '\tat org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)\n'+
499
+ '\tat org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)\n'+
500
+ '\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)\n'+
501
+ '\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)\n'+
502
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
503
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
504
+ '\tat com.wavemaker.commons.core.web.filters.LoggingFilter.doFilter(LoggingFilter.java:67)\n'+
505
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
506
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
507
+ '\tat com.wavemaker.login.client.authservice.filters.ContextUtilFilter.doFilter(ContextUtilFilter.java:91)\n'+
508
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
509
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
510
+ '\tat com.wavemaker.login.client.authservice.filters.AuthServiceFilter.doFilter(AuthServiceFilter.java:102)\n'+
511
+ '\tat com.wavemaker.login.client.authservice.filters.TenantHeaderAuthFilter.doFilter(TenantHeaderAuthFilter.java:40)\n'+
512
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
513
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
514
+ '\tat ch.qos.logback.classic.selector.servlet.LoggerContextFilter.doFilter(LoggerContextFilter.java:69)\n'+
515
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
516
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
517
+ '\tat com.wavemaker.commons.core.web.filters.RequestTaggingFilter.doFilter(RequestTaggingFilter.java:64)\n'+
518
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
519
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
520
+ '\tat com.wavemaker.commons.core.web.filters.XSSFilter.doFilter(XSSFilter.java:35)\n'+
521
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
522
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
523
+ '\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\n'+
524
+ '\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\n'+
525
+ '\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\n'+
526
+ '\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)\n'+
527
+ '\tat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)\n'+
528
+ '\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)\n'+
529
+ '\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\n'+
530
+ '\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\n'+
531
+ '\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)\n'+
532
+ '\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\n'+
533
+ '\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)\n'+
534
+ '\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)\n'+
535
+ '\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n'+
536
+ '\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n'+
537
+ '\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n'+
538
+ '\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n'+
539
+ '\tat java.lang.Thread.run(Thread.java:748)\n'
540
+ )
541
+
542
+ assert_equal('java.lang.AssertionError', err_name)
543
+ assert_equal('b8b9990c966df3ec30c45f7d9263cf227375122d', fingerprint)
544
+ end
545
+
546
+
547
+ def test_heuristic_stacktrace_search(fingerprinter)
548
+ err_name, fingerprint, essence, _ = fingerprinter.fingerprint_java(
549
+ '-- Expect timeout (30000 ms) for matcher: anyOf(regexp(\'(mysql> |> )$\'),regexp(\'Bye\n'+
550
+ 'root@9b85248b9cc0:~# \'))\n'+
551
+ 'java.lang.AssertionError: Expect timeout (30000 ms) for matcher: anyOf(regexp(\'(mysql> |> )$\'),regexp(\'Bye\n'+
552
+ 'root@9b85248b9cc0:~# \'))\n'+
553
+ '\tat net.sf.expectit.ExpectImpl.expectIn(ExpectImpl.java:69)\n'+
554
+ '\tat net.sf.expectit.ExpectImpl.expectIn(ExpectImpl.java:117)\n'+
555
+ '\tat net.sf.expectit.ExpectImpl.expect(ExpectImpl.java:122)\n'+
556
+ '\tat com.wavemaker.developer.cloud.commons.core.models.AbstractDbShellImpl.executeCommand(AbstractDbShellImpl.java:138)\n'+
557
+ '\tat com.wavemaker.developer.cloud.manager.impl.DBShellManagerImpl.executeDbCommand(DBShellManagerImpl.java:83)\n'+
558
+ '\tat com.wavemaker.developer.cloud.service.impl.DBShellServiceImpl.operate(DBShellServiceImpl.java:63)\n'+
559
+ '\tat com.wavemaker.developer.cloud.controller.DBShellController.operate(DBShellController.java:62)\n'+
560
+ '\tat sun.reflect.GeneratedMethodAccessor375.invoke(Unknown Source)\n'+
561
+ '\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n'+
562
+ '\tat java.lang.reflect.Method.invoke(Method.java:498)\n'+
563
+ '\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n'+
564
+ '\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)\n'+
565
+ '\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)\n'+
566
+ '\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:849)\n'+
567
+ '\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:760)\n'+
568
+ '\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)\n'+
569
+ '\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)\n'+
570
+ '\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)\n'+
571
+ '\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)\n'+
572
+ '\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)\n'+
573
+ '\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\n'+
574
+ '\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\n'+
575
+ '\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\n'+
576
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\n'+
577
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
578
+ '\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\n'+
579
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
580
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
581
+ '\tat com.wavemaker.commons.core.web.filters.EtagFilter.doFilterInternal(EtagFilter.java:42)\n'+
582
+ '\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\n'+
583
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
584
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
585
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)\n'+
586
+ '\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)\n'+
587
+ '\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)\n'+
588
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
589
+ '\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n'+
590
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
591
+ '\tat org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)\n'+
592
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
593
+ '\tat org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)\n'+
594
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
595
+ '\tat org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:150)\n'+
596
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
597
+ '\tat org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)\n'+
598
+ '\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\n'+
599
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
600
+ '\tat org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)\n'+
601
+ '\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\n'+
602
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
603
+ '\tat org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)\n'+
604
+ '\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\n'+
605
+ '\tat org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)\n'+
606
+ '\tat org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)\n'+
607
+ '\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)\n'+
608
+ '\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)\n'+
609
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
610
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
611
+ '\tat com.wavemaker.commons.core.web.filters.LoggingFilter.doFilter(LoggingFilter.java:67)\n'+
612
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
613
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
614
+ '\tat com.wavemaker.login.client.authservice.filters.ContextUtilFilter.doFilter(ContextUtilFilter.java:91)\n'+
615
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
616
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
617
+ '\tat com.wavemaker.login.client.authservice.filters.AuthServiceFilter.doFilter(AuthServiceFilter.java:102)\n'+
618
+ '\tat com.wavemaker.login.client.authservice.filters.TenantHeaderAuthFilter.doFilter(TenantHeaderAuthFilter.java:40)\n'+
619
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
620
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
621
+ '\tat ch.qos.logback.classic.selector.servlet.LoggerContextFilter.doFilter(LoggerContextFilter.java:69)\n'+
622
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
623
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
624
+ '\tat com.wavemaker.commons.core.web.filters.RequestTaggingFilter.doFilter(RequestTaggingFilter.java:64)\n'+
625
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
626
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
627
+ '\tat com.wavemaker.commons.core.web.filters.XSSFilter.doFilter(XSSFilter.java:35)\n'+
628
+ '\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n'+
629
+ '\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n'+
630
+ '\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\n'+
631
+ '\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\n'+
632
+ '\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\n'+
633
+ '\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)\n'+
634
+ '\tat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)\n'+
635
+ '\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)\n'+
636
+ '\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\n'+
637
+ '\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\n'+
638
+ '\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)\n'+
639
+ '\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\n'+
640
+ '\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)\n'+
641
+ '\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)\n'+
642
+ '\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n'+
643
+ '\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n'+
644
+ '\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n'+
645
+ '\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n'+
646
+ '\tat java.lang.Thread.run(Thread.java:748)\n'
647
+ )
648
+
649
+ assert_equal('java.lang.AssertionError', err_name)
650
+ assert_equal('b8b9990c966df3ec30c45f7d9263cf227375122d', fingerprint)
651
+ end
652
+ end