apptuit-fluent-plugin 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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