grntest 1.3.6 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/text/news.md +38 -0
- data/lib/grntest/executors/base-executor.rb +70 -3
- data/lib/grntest/reporters.rb +4 -3
- data/lib/grntest/reporters/progress-reporter.rb +37 -0
- data/lib/grntest/test-runner.rb +29 -3
- data/lib/grntest/tester.rb +8 -2
- data/lib/grntest/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e90468027680b461a1633c49db9f3feb7babd1a0c2e81a4aad381ade35b4fb3
|
4
|
+
data.tar.gz: 31b1cc050ea4b70ed08082a0b5443586676aa5d77c0512287736ee1837b4c371
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8067b106d13ebd121cd96d43eb82b807adb81fe89ea26df1ea4eeb8dfdd6be096e14fdbeeb6ca00528d5704d0d53d6123e28d45973fb5bb283990c59101e090
|
7
|
+
data.tar.gz: b8eb794be911a7dc8b7eb74172b4cb109cafe74a945cfc3ca3e626d90a54a36ca61058c91883238b579d4c0a92578a58d46b2aff4a7dbb1c4086059a0109245e
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,43 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.4.1: 2020-05-30
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* Added support for normalizing IO open/close log message.
|
8
|
+
|
9
|
+
## 1.4.0: 2020-05-16
|
10
|
+
|
11
|
+
### Improvements
|
12
|
+
|
13
|
+
* Added support for normalizing mruby's syntax error message.
|
14
|
+
|
15
|
+
## 1.3.9: 2020-05-09
|
16
|
+
|
17
|
+
### Improvements
|
18
|
+
|
19
|
+
* Added `progress` reporter.
|
20
|
+
|
21
|
+
* Suppressed Apache Arrow related reports from Valgrind.
|
22
|
+
|
23
|
+
* Improved backtrace detection.
|
24
|
+
|
25
|
+
## 1.3.8: 2020-04-23
|
26
|
+
|
27
|
+
### Improvements
|
28
|
+
|
29
|
+
* Improved static port detection.
|
30
|
+
|
31
|
+
* Improved backtrace detection.
|
32
|
+
|
33
|
+
## 1.3.7: 2020-03-26
|
34
|
+
|
35
|
+
### Improvements
|
36
|
+
|
37
|
+
* Added `add-ignore-log-pattern` directive.
|
38
|
+
|
39
|
+
* Added `remove-ignore-log-pattern` directive.
|
40
|
+
|
3
41
|
## 1.3.6: 2020-03-26
|
4
42
|
|
5
43
|
### Improvements
|
@@ -43,6 +43,7 @@ module Grntest
|
|
43
43
|
@long_read_timeout = default_long_read_timeout
|
44
44
|
@context = context
|
45
45
|
@custom_important_log_levels = []
|
46
|
+
@ignore_log_patterns = {}
|
46
47
|
end
|
47
48
|
|
48
49
|
def execute(script_path)
|
@@ -347,6 +348,32 @@ module Grntest
|
|
347
348
|
end
|
348
349
|
end
|
349
350
|
|
351
|
+
def compile_pattern(pattern)
|
352
|
+
case pattern
|
353
|
+
when /\A\/(.*)\/([ixm]*)?\z/
|
354
|
+
content = $1
|
355
|
+
options = $2
|
356
|
+
regexp_flags = 0
|
357
|
+
regexp_flags |= Regexp::IGNORECASE if options.include?("i")
|
358
|
+
regexp_flags |= Regexp::EXTENDED if options.include?("x")
|
359
|
+
regexp_flags |= Regexp::MULTILINE if options.include?("m")
|
360
|
+
Regexp.new(content, regexp_flags)
|
361
|
+
else
|
362
|
+
log_error("# error: invalid pattern: #{pattern}")
|
363
|
+
@context.error
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def execute_directive_add_ignore_log_pattern(parser, line, content, options)
|
368
|
+
pattern = content.split(" ", 2)[1]
|
369
|
+
@ignore_log_patterns[pattern] = compile_pattern(pattern)
|
370
|
+
end
|
371
|
+
|
372
|
+
def execute_directive_remove_ignore_log_pattern(parser, line, content, options)
|
373
|
+
pattern = content.split(" ", 2)[1]
|
374
|
+
@ignore_log_patterns.delete(pattern)
|
375
|
+
end
|
376
|
+
|
350
377
|
def execute_directive(parser, line, content)
|
351
378
|
command, *options = Shellwords.split(content)
|
352
379
|
case command
|
@@ -390,6 +417,10 @@ module Grntest
|
|
390
417
|
execute_directive_require_interface(parser, line, content, options)
|
391
418
|
when "require-apache-arrow"
|
392
419
|
execute_directive_require_apache_arrow(parser, line, content, options)
|
420
|
+
when "add-ignore-log-pattern"
|
421
|
+
execute_directive_add_ignore_log_pattern(parser, line, content, options)
|
422
|
+
when "remove-ignore-log-pattern"
|
423
|
+
execute_directive_remove_ignore_log_pattern(parser, line, content, options)
|
393
424
|
else
|
394
425
|
log_input(line)
|
395
426
|
log_error("#|e| unknown directive: <#{command}>")
|
@@ -503,12 +534,33 @@ module Grntest
|
|
503
534
|
next if !in_crash and backtrace_log_message?(entry.message)
|
504
535
|
end
|
505
536
|
next if thread_log_message?(entry.message)
|
506
|
-
|
507
|
-
|
537
|
+
next if ignore_log_message?(entry.message)
|
538
|
+
log_level, message = normalize_log(entry)
|
539
|
+
formatted_log_level = format_log_level(log_level)
|
540
|
+
important_messages << "\#|#{formatted_log_level}| #{message}"
|
508
541
|
end
|
509
542
|
important_messages.join("\n")
|
510
543
|
end
|
511
544
|
|
545
|
+
def normalize_log(entry)
|
546
|
+
case entry.message
|
547
|
+
when /\A(\[io\]\[(?:open|close)\]) <(.*?)>\z/
|
548
|
+
tag = $1
|
549
|
+
path = $2
|
550
|
+
normalized_path = File.basename(path)
|
551
|
+
normalized_message = "#{tag} <#{normalized_path}>"
|
552
|
+
case entry.log_level
|
553
|
+
when :info, :debug
|
554
|
+
normalized_log_level = :debug
|
555
|
+
else
|
556
|
+
normalized_log_level = entry.log_level
|
557
|
+
end
|
558
|
+
[normalized_log_level, normalized_message]
|
559
|
+
else
|
560
|
+
[entry.log_level, entry.message]
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
512
564
|
def read_all_readable_content(output, options={})
|
513
565
|
content = ""
|
514
566
|
first_timeout = options[:first_timeout] || @context.read_timeout
|
@@ -570,7 +622,16 @@ module Grntest
|
|
570
622
|
true
|
571
623
|
when /\A[a-zA-Z]:[\/\\]/
|
572
624
|
true
|
573
|
-
when /\
|
625
|
+
when /\A\(unknown\):\d+:\d+: /
|
626
|
+
true
|
627
|
+
when /\A(?:groonga|groonga-httpd)
|
628
|
+
\((?:\+0x\h+|\w+\+0x\h+)?\)
|
629
|
+
\s
|
630
|
+
\[0x\h+\]\z/x
|
631
|
+
# groonga() [0x564caf2bfc12]
|
632
|
+
# groonga(+0xbd1aa) [0x564caf2bfc12]
|
633
|
+
# groonga-httpd(+0xbd1aa) [0x564caf2bfc12]
|
634
|
+
# groonga-httpd(ngx_http_core_run_phases+0x25) [0x564caf2bfc12]
|
574
635
|
true
|
575
636
|
when /\A\d+\s+(?:lib\S+\.dylib|\S+\.so|groonga|nginx|\?\?\?)\s+
|
576
637
|
0x[\da-f]+\s
|
@@ -592,6 +653,12 @@ module Grntest
|
|
592
653
|
end
|
593
654
|
end
|
594
655
|
|
656
|
+
def ignore_log_message?(message)
|
657
|
+
@ignore_log_patterns.any? do |_pattern, regexp|
|
658
|
+
regexp === message
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
595
662
|
def error_response?(response, type)
|
596
663
|
status = nil
|
597
664
|
begin
|
data/lib/grntest/reporters.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Copyright (C) 2012-2015 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2012-2020 Sutou Kouhei <kou@clear-code.com>
|
4
2
|
#
|
5
3
|
# This program is free software: you can redistribute it and/or modify
|
6
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -19,6 +17,7 @@ require "grntest/reporters/mark-reporter"
|
|
19
17
|
require "grntest/reporters/buffered-mark-reporter"
|
20
18
|
require "grntest/reporters/stream-reporter"
|
21
19
|
require "grntest/reporters/inplace-reporter"
|
20
|
+
require "grntest/reporters/progress-reporter"
|
22
21
|
|
23
22
|
module Grntest
|
24
23
|
module Reporters
|
@@ -33,6 +32,8 @@ module Grntest
|
|
33
32
|
StreamReporter.new(tester)
|
34
33
|
when :inplace
|
35
34
|
InplaceReporter.new(tester)
|
35
|
+
when :progress
|
36
|
+
ProgressReporter.new(tester)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (C) 2020 Sutou Kouhei <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This program is free software: you can redistribute it and/or modify
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
5
|
+
# the Free Software Foundation, either version 3 of the License, or
|
6
|
+
# (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License
|
14
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
|
16
|
+
require "grntest/reporters/inplace-reporter"
|
17
|
+
|
18
|
+
module Grntest
|
19
|
+
module Reporters
|
20
|
+
class ProgressReporter < InplaceReporter
|
21
|
+
private
|
22
|
+
def draw_statistics_header_line
|
23
|
+
puts(statistics_header)
|
24
|
+
end
|
25
|
+
|
26
|
+
def draw_status_line(worker)
|
27
|
+
end
|
28
|
+
|
29
|
+
def draw_test_line(worker)
|
30
|
+
end
|
31
|
+
|
32
|
+
def n_worker_lines
|
33
|
+
0
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/grntest/test-runner.rb
CHANGED
@@ -297,6 +297,30 @@ call (int)chdir("#{context.temporary_directory_path}")
|
|
297
297
|
match-leak-kinds: reachable
|
298
298
|
...
|
299
299
|
fun:_dl_catch_error
|
300
|
+
}
|
301
|
+
{
|
302
|
+
_dl_init
|
303
|
+
Memcheck:Leak
|
304
|
+
match-leak-kinds: reachable
|
305
|
+
...
|
306
|
+
fun:_dl_init
|
307
|
+
...
|
308
|
+
}
|
309
|
+
{
|
310
|
+
_Z41__static_initialization_and_destruction_0ii
|
311
|
+
Memcheck:Leak
|
312
|
+
match-leak-kinds: reachable
|
313
|
+
...
|
314
|
+
fun:_Z41__static_initialization_and_destruction_0ii
|
315
|
+
...
|
316
|
+
}
|
317
|
+
{
|
318
|
+
je_arrow_private_je_background_thread_create
|
319
|
+
Memcheck:Leak
|
320
|
+
match-leak-kinds: possible
|
321
|
+
...
|
322
|
+
fun:je_arrow_private_je_background_thread_create
|
323
|
+
...
|
300
324
|
}
|
301
325
|
SUPPRESSIONS
|
302
326
|
end
|
@@ -344,10 +368,10 @@ call (int)chdir("#{context.temporary_directory_path}")
|
|
344
368
|
static_port = 50041 + @worker.id
|
345
369
|
10.times do
|
346
370
|
begin
|
347
|
-
|
371
|
+
TCPServer.open(host, static_port) do |server|
|
372
|
+
return static_port
|
373
|
+
end
|
348
374
|
rescue SystemCallError
|
349
|
-
return static_port
|
350
|
-
else
|
351
375
|
sleep(0.1)
|
352
376
|
end
|
353
377
|
end
|
@@ -787,6 +811,8 @@ http {
|
|
787
811
|
pre = $1
|
788
812
|
_path = $2
|
789
813
|
"#{pre}<PATH>"
|
814
|
+
when /\A(line \d+:\d+: syntax error), unexpected .*\z/
|
815
|
+
$1
|
790
816
|
else
|
791
817
|
content
|
792
818
|
end
|
data/lib/grntest/tester.rb
CHANGED
@@ -137,7 +137,13 @@ module Grntest
|
|
137
137
|
diff_option_is_specified = true
|
138
138
|
end
|
139
139
|
|
140
|
-
available_reporters = [
|
140
|
+
available_reporters = [
|
141
|
+
:mark,
|
142
|
+
:"buffered-mark",
|
143
|
+
:stream,
|
144
|
+
:inplace,
|
145
|
+
:progress,
|
146
|
+
]
|
141
147
|
available_reporter_labels = available_reporters.join(", ")
|
142
148
|
parser.on("--reporter=REPORTER", available_reporters,
|
143
149
|
"Report test result by REPORTER",
|
@@ -371,7 +377,7 @@ module Grntest
|
|
371
377
|
if @n_workers == 1
|
372
378
|
:mark
|
373
379
|
else
|
374
|
-
:
|
380
|
+
:progress
|
375
381
|
end
|
376
382
|
else
|
377
383
|
@reporter
|
data/lib/grntest/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grntest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: diff-lcs
|
@@ -238,6 +238,7 @@ files:
|
|
238
238
|
- lib/grntest/reporters/buffered-mark-reporter.rb
|
239
239
|
- lib/grntest/reporters/inplace-reporter.rb
|
240
240
|
- lib/grntest/reporters/mark-reporter.rb
|
241
|
+
- lib/grntest/reporters/progress-reporter.rb
|
241
242
|
- lib/grntest/reporters/stream-reporter.rb
|
242
243
|
- lib/grntest/response-parser.rb
|
243
244
|
- lib/grntest/template-evaluator.rb
|