grntest 1.4.1 → 1.4.6
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 +4 -4
- data/doc/text/news.md +35 -0
- data/lib/grntest/execution-context.rb +15 -0
- data/lib/grntest/executors/base-executor.rb +75 -32
- data/lib/grntest/executors/http-executor.rb +1 -1
- data/lib/grntest/executors/standard-io-executor.rb +1 -1
- data/lib/grntest/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88fbad2fdde680dc3110737087f9818240bd130ea4c61c14478d89577dd99420
|
4
|
+
data.tar.gz: e98f331062e055f4fd914ef1916dc4859614e1ef0c9f3a16c978d00d73d05a23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e51b3927eb61e1232ade4c179a140eddd68d41d5231f4bee0e7b356cce389d8b72c110f5217418d9e214fa071486bd3ffe55e61e2e9def19b90b425e193e2ca
|
7
|
+
data.tar.gz: bd7a5ad8f297572b51f797f359ae2c42d9a01a013d6c48c6d3e168d648bf32af405ec0f8af36f1e0fef84a86756ccb2b918988a35696ed3af505e50dd23350bc
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,40 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.4.6: 2020-12-08
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* Added `require-feature` directive.
|
8
|
+
|
9
|
+
## 1.4.5: 2020-11-11
|
10
|
+
|
11
|
+
### Improvements
|
12
|
+
|
13
|
+
* Added `sleep-after-command` directive.
|
14
|
+
|
15
|
+
## 1.4.4: 2020-07-18
|
16
|
+
|
17
|
+
### Improvements
|
18
|
+
|
19
|
+
* Added support for detecting backtrace log for MinGW build.
|
20
|
+
|
21
|
+
## 1.4.3: 2020-05-31
|
22
|
+
|
23
|
+
### Improvements
|
24
|
+
|
25
|
+
* Removed log normalization.
|
26
|
+
|
27
|
+
## 1.4.2: 2020-05-30
|
28
|
+
|
29
|
+
### Improvements
|
30
|
+
|
31
|
+
* Removed log level normalization.
|
32
|
+
|
33
|
+
* Added `require-platform` directive.
|
34
|
+
|
35
|
+
* Added support for normalizing IO open/close log message with
|
36
|
+
additional message.
|
37
|
+
|
3
38
|
## 1.4.1: 2020-05-30
|
4
39
|
|
5
40
|
### Improvements
|
@@ -37,6 +37,7 @@ module Grntest
|
|
37
37
|
attr_writer :suppress_backtrace
|
38
38
|
attr_writer :collect_query_log
|
39
39
|
attr_writer :debug
|
40
|
+
attr_accessor :platform
|
40
41
|
def initialize
|
41
42
|
@logging = true
|
42
43
|
@base_directory = Pathname(".")
|
@@ -66,6 +67,7 @@ module Grntest
|
|
66
67
|
@suppress_backtrace = true
|
67
68
|
@collect_query_log = false
|
68
69
|
@debug = false
|
70
|
+
@platform = guess_platform
|
69
71
|
end
|
70
72
|
|
71
73
|
def logging?
|
@@ -173,5 +175,18 @@ module Grntest
|
|
173
175
|
"so"
|
174
176
|
end
|
175
177
|
end
|
178
|
+
|
179
|
+
def guess_platform
|
180
|
+
case RUBY_PLATFORM
|
181
|
+
when /mingw|mswin/
|
182
|
+
"windows"
|
183
|
+
when /darwin/
|
184
|
+
"macos"
|
185
|
+
when /linux/
|
186
|
+
"linux"
|
187
|
+
else
|
188
|
+
"unknown"
|
189
|
+
end
|
190
|
+
end
|
176
191
|
end
|
177
192
|
end
|
@@ -44,6 +44,9 @@ module Grntest
|
|
44
44
|
@context = context
|
45
45
|
@custom_important_log_levels = []
|
46
46
|
@ignore_log_patterns = {}
|
47
|
+
@sleep_after_command = nil
|
48
|
+
@status_response = nil
|
49
|
+
@features = nil
|
47
50
|
end
|
48
51
|
|
49
52
|
def execute(script_path)
|
@@ -321,28 +324,28 @@ module Grntest
|
|
321
324
|
parser << "#{expand_variables(groonga_command)}\n"
|
322
325
|
end
|
323
326
|
|
324
|
-
def execute_directive_require_input_type(
|
327
|
+
def execute_directive_require_input_type(line, content, options)
|
325
328
|
input_type, = options
|
326
329
|
unless @context.input_type == input_type
|
327
330
|
omit("require input type: #{input_type}")
|
328
331
|
end
|
329
332
|
end
|
330
333
|
|
331
|
-
def execute_directive_require_testee(
|
334
|
+
def execute_directive_require_testee(line, content, options)
|
332
335
|
testee, = options
|
333
336
|
unless @context.testee == testee
|
334
337
|
omit("require testee: #{testee}")
|
335
338
|
end
|
336
339
|
end
|
337
340
|
|
338
|
-
def execute_directive_require_interface(
|
341
|
+
def execute_directive_require_interface(line, content, options)
|
339
342
|
interface, = options
|
340
343
|
unless @context.interface == interface
|
341
344
|
omit("require interface: #{interface}")
|
342
345
|
end
|
343
346
|
end
|
344
347
|
|
345
|
-
def execute_directive_require_apache_arrow(
|
348
|
+
def execute_directive_require_apache_arrow(line, content, options)
|
346
349
|
unless defined?(::Arrow)
|
347
350
|
omit("require Apache Arrow")
|
348
351
|
end
|
@@ -364,16 +367,65 @@ module Grntest
|
|
364
367
|
end
|
365
368
|
end
|
366
369
|
|
367
|
-
def execute_directive_add_ignore_log_pattern(
|
370
|
+
def execute_directive_add_ignore_log_pattern(line, content, options)
|
368
371
|
pattern = content.split(" ", 2)[1]
|
369
372
|
@ignore_log_patterns[pattern] = compile_pattern(pattern)
|
370
373
|
end
|
371
374
|
|
372
|
-
def execute_directive_remove_ignore_log_pattern(
|
375
|
+
def execute_directive_remove_ignore_log_pattern(line, content, options)
|
373
376
|
pattern = content.split(" ", 2)[1]
|
374
377
|
@ignore_log_patterns.delete(pattern)
|
375
378
|
end
|
376
379
|
|
380
|
+
def execute_directive_require_platform(line, content, options)
|
381
|
+
platform, = options
|
382
|
+
if platform.start_with?("!")
|
383
|
+
if @context.platform == platform[1..-1]
|
384
|
+
omit("require platform: #{platform} (#{@context.platform})")
|
385
|
+
end
|
386
|
+
else
|
387
|
+
if @context.platform != platform
|
388
|
+
omit("require platform: #{platform} (#{@context.platform})")
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
def execute_directive_sleep_after_command(line, content, options)
|
394
|
+
if options[0]
|
395
|
+
time = options[0].to_f
|
396
|
+
else
|
397
|
+
time = nil
|
398
|
+
end
|
399
|
+
@sleep_after_command = time
|
400
|
+
end
|
401
|
+
|
402
|
+
def features
|
403
|
+
return @features if @features
|
404
|
+
@features = []
|
405
|
+
JSON.parse(@status_response)[1]["features"].each do |name, available|
|
406
|
+
@features << name if available
|
407
|
+
end
|
408
|
+
@features.sort!
|
409
|
+
@features
|
410
|
+
end
|
411
|
+
|
412
|
+
def formatted_features
|
413
|
+
features.join(", ")
|
414
|
+
end
|
415
|
+
|
416
|
+
def execute_directive_require_feature(line, content, options)
|
417
|
+
feature, = options
|
418
|
+
if feature.start_with?("!")
|
419
|
+
if features.include?(feature[1..-1])
|
420
|
+
omit("require feature: #{feature} (#{formatted_features})")
|
421
|
+
end
|
422
|
+
else
|
423
|
+
unless features.include?(feature)
|
424
|
+
omit("require feature: #{feature} (#{formatted_features})")
|
425
|
+
end
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
377
429
|
def execute_directive(parser, line, content)
|
378
430
|
command, *options = Shellwords.split(content)
|
379
431
|
case command
|
@@ -410,17 +462,23 @@ module Grntest
|
|
410
462
|
when "eval"
|
411
463
|
execute_directive_eval(parser, line, content, options)
|
412
464
|
when "require-input-type"
|
413
|
-
execute_directive_require_input_type(
|
465
|
+
execute_directive_require_input_type(line, content, options)
|
414
466
|
when "require-testee"
|
415
|
-
execute_directive_require_testee(
|
467
|
+
execute_directive_require_testee(line, content, options)
|
416
468
|
when "require-interface"
|
417
|
-
execute_directive_require_interface(
|
469
|
+
execute_directive_require_interface(line, content, options)
|
418
470
|
when "require-apache-arrow"
|
419
|
-
execute_directive_require_apache_arrow(
|
471
|
+
execute_directive_require_apache_arrow(line, content, options)
|
420
472
|
when "add-ignore-log-pattern"
|
421
|
-
execute_directive_add_ignore_log_pattern(
|
473
|
+
execute_directive_add_ignore_log_pattern(line, content, options)
|
422
474
|
when "remove-ignore-log-pattern"
|
423
|
-
execute_directive_remove_ignore_log_pattern(
|
475
|
+
execute_directive_remove_ignore_log_pattern(line, content, options)
|
476
|
+
when "require-platform"
|
477
|
+
execute_directive_require_platform(line, content, options)
|
478
|
+
when "sleep-after-command"
|
479
|
+
execute_directive_sleep_after_command(line, content, options)
|
480
|
+
when "require-feature"
|
481
|
+
execute_directive_require_feature(line, content, options)
|
424
482
|
else
|
425
483
|
log_input(line)
|
426
484
|
log_error("#|e| unknown directive: <#{command}>")
|
@@ -486,6 +544,7 @@ module Grntest
|
|
486
544
|
else
|
487
545
|
type = @output_type
|
488
546
|
log_output(response)
|
547
|
+
sleep(@sleep_after_command) if @sleep_after_command
|
489
548
|
log_error(extract_important_messages(read_all_log))
|
490
549
|
log_query_log_content(read_all_query_log)
|
491
550
|
|
@@ -535,32 +594,14 @@ module Grntest
|
|
535
594
|
end
|
536
595
|
next if thread_log_message?(entry.message)
|
537
596
|
next if ignore_log_message?(entry.message)
|
538
|
-
log_level
|
597
|
+
log_level = entry.log_level
|
539
598
|
formatted_log_level = format_log_level(log_level)
|
599
|
+
message = entry.message
|
540
600
|
important_messages << "\#|#{formatted_log_level}| #{message}"
|
541
601
|
end
|
542
602
|
important_messages.join("\n")
|
543
603
|
end
|
544
604
|
|
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
|
-
|
564
605
|
def read_all_readable_content(output, options={})
|
565
606
|
content = ""
|
566
607
|
first_timeout = options[:first_timeout] || @context.read_timeout
|
@@ -624,6 +665,8 @@ module Grntest
|
|
624
665
|
true
|
625
666
|
when /\A\(unknown\):\d+:\d+: /
|
626
667
|
true
|
668
|
+
when /\A[\w.\\-]+:\d+:\d+: /
|
669
|
+
true
|
627
670
|
when /\A(?:groonga|groonga-httpd)
|
628
671
|
\((?:\+0x\h+|\w+\+0x\h+)?\)
|
629
672
|
\s
|
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.
|
4
|
+
version: 1.4.6
|
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-12-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: diff-lcs
|
@@ -270,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
270
|
- !ruby/object:Gem::Version
|
271
271
|
version: '0'
|
272
272
|
requirements: []
|
273
|
-
rubygems_version: 3.2.0.
|
273
|
+
rubygems_version: 3.2.0.rc.2
|
274
274
|
signing_key:
|
275
275
|
specification_version: 4
|
276
276
|
summary: Grntest is a testing framework for Groonga. You can write a test for Groonga
|