apptuit-fluent-plugin 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +25 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +64 -0
- data/LICENSE +202 -0
- data/README.md +82 -0
- data/Rakefile +13 -0
- data/apptuit-fluent-plugin.gemspec +26 -0
- data/lib/fluent/plugin/filter_Apptuit.rb +87 -0
- data/lib/fluent/plugin/fingerprinter.rb +181 -0
- data/test/helper.rb +16 -0
- data/test/plugin/java_fingerprint_tests.rb +652 -0
- data/test/plugin/node_fingerprint_tests.rb +71 -0
- data/test/plugin/python_fingerprint_tests.rb +208 -0
- data/test/plugin/test_filter_Apptuit.rb +320 -0
- metadata +152 -0
@@ -0,0 +1,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
|