apptuit-fluent-plugin 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +25 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +64 -0
- data/LICENSE +202 -0
- data/README.md +82 -0
- data/Rakefile +13 -0
- data/apptuit-fluent-plugin.gemspec +26 -0
- data/lib/fluent/plugin/filter_Apptuit.rb +87 -0
- data/lib/fluent/plugin/fingerprinter.rb +181 -0
- data/test/helper.rb +16 -0
- data/test/plugin/java_fingerprint_tests.rb +652 -0
- data/test/plugin/node_fingerprint_tests.rb +71 -0
- data/test/plugin/python_fingerprint_tests.rb +208 -0
- data/test/plugin/test_filter_Apptuit.rb +320 -0
- metadata +152 -0
@@ -0,0 +1,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
|