grntest 1.4.4 → 1.4.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9733d4f25a25296b60589e7c0328872954955799278fa0194a82c279c92c5f84
4
- data.tar.gz: 653013c00c4f38eb2c9d41edf5963fd4ccafe6a491672e5afd6d4b4b7b8dad15
3
+ metadata.gz: e027a36e3f3e1206e89cf0cc617a5e892074bd207ee46f29ebccf9b68bf25bc0
4
+ data.tar.gz: 4393ff236546341e6abba56083164ed4bdd51564a3acc0b3087ac2bf1cc6fec1
5
5
  SHA512:
6
- metadata.gz: f395c3c2eb4949842e4eefcf933ca13a71662d3b7f192e33441a91c8b69bc7a9edad21602743cb069f7247c4675ec0fc3baa738a70211bbe8963fb594f853d95
7
- data.tar.gz: 6075f8e1009aff8baf34824cb125468b45809ea8465077e27d7d80b10864a5ebe8790abda81336a2da220840583c97f53e417e9f7139da718bd2706140860ded
6
+ metadata.gz: 14748646fa504319011a9cd649c732ae644ef2b7ec73a402f9740dda5a0f125e38dba7b227a4873766cc31777daf5d9407e9ab7ea5dd328f20eb858474c9a028
7
+ data.tar.gz: f34f315596201dec45cc177bfd0edba7f40f3dede8c6d8a046a28cf85fabf47ef1703340bc6008c60c751eda5712e38ea3bb0e52447118556536a93804a6a817
data/doc/text/news.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # News
2
2
 
3
+ ## 1.4.9: 2021-07-12
4
+
5
+ ### Improvements
6
+
7
+ * Added `synonyms-generate` directive.
8
+
9
+ ## 1.4.8: 2020-12-09
10
+
11
+ ### Fixes
12
+
13
+ * `require-apache-arrow`: Fixed inverted Apache Arrow version check condition.
14
+
15
+ ## 1.4.7: 2020-12-08
16
+
17
+ ### Improvements
18
+
19
+ * `require-apache-arrow`: Added support for version check of Apache
20
+ Arrow in Groonga.
21
+
22
+ ## 1.4.6: 2020-12-08
23
+
24
+ ### Improvements
25
+
26
+ * Added `require-feature` directive.
27
+
28
+ ## 1.4.5: 2020-11-11
29
+
30
+ ### Improvements
31
+
32
+ * Added `sleep-after-command` directive.
33
+
3
34
  ## 1.4.4: 2020-07-18
4
35
 
5
36
  ### Improvements
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2020 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright (C) 2012-2021 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@ module Grntest
20
20
  attr_accessor :plugins_directory
21
21
  attr_accessor :plugin_extension
22
22
  attr_accessor :groonga_suggest_create_dataset
23
+ attr_accessor :groonga_synonym_generate
23
24
  attr_accessor :testee
24
25
  attr_accessor :interface
25
26
  attr_accessor :result
@@ -46,6 +47,7 @@ module Grntest
46
47
  @plugins_directory = nil
47
48
  @plugin_extension = guess_plugin_extension
48
49
  @groonga_suggest_create_dataset = "groonga-suggest-create-dataset"
50
+ @groonga_synonym_generate = "groonga-synonym-generate"
49
51
  @testee = "groonga"
50
52
  @interface = "stdio"
51
53
  @n_nested = 0
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2020 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright (C) 2012-2021 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -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
+ @raw_status_response = nil
49
+ @features = nil
47
50
  end
48
51
 
49
52
  def execute(script_path)
@@ -321,30 +324,48 @@ module Grntest
321
324
  parser << "#{expand_variables(groonga_command)}\n"
322
325
  end
323
326
 
324
- def execute_directive_require_input_type(parser, line, content, options)
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(parser, line, content, options)
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(parser, line, content, options)
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(parser, line, content, options)
348
+ def status_response
349
+ @status_response ||= JSON.parse(@raw_status_response)[1]
350
+ end
351
+
352
+ def apache_arrow_version
353
+ (status_response["apache_arrow"] || {})["version"]
354
+ end
355
+
356
+ def execute_directive_require_apache_arrow(line, content, options)
357
+ version, = options
358
+ _apache_arrow_version = apache_arrow_version
359
+ if _apache_arrow_version.nil?
360
+ omit("require Apache Arrow support in Groonga")
361
+ end
346
362
  unless defined?(::Arrow)
347
- omit("require Apache Arrow")
363
+ omit("require Red Arrow in grntest")
364
+ end
365
+ return if version.nil?
366
+ if Gem::Version.new(version) > Gem::Version.new(_apache_arrow_version)
367
+ omit("require Apache Arrow #{version} in Groonga: " +
368
+ _apache_arrow_version)
348
369
  end
349
370
  end
350
371
 
@@ -364,17 +385,17 @@ module Grntest
364
385
  end
365
386
  end
366
387
 
367
- def execute_directive_add_ignore_log_pattern(parser, line, content, options)
388
+ def execute_directive_add_ignore_log_pattern(line, content, options)
368
389
  pattern = content.split(" ", 2)[1]
369
390
  @ignore_log_patterns[pattern] = compile_pattern(pattern)
370
391
  end
371
392
 
372
- def execute_directive_remove_ignore_log_pattern(parser, line, content, options)
393
+ def execute_directive_remove_ignore_log_pattern(line, content, options)
373
394
  pattern = content.split(" ", 2)[1]
374
395
  @ignore_log_patterns.delete(pattern)
375
396
  end
376
397
 
377
- def execute_directive_require_platform(parser, line, content, options)
398
+ def execute_directive_require_platform(line, content, options)
378
399
  platform, = options
379
400
  if platform.start_with?("!")
380
401
  if @context.platform == platform[1..-1]
@@ -387,6 +408,67 @@ module Grntest
387
408
  end
388
409
  end
389
410
 
411
+ def execute_directive_sleep_after_command(line, content, options)
412
+ if options[0]
413
+ time = options[0].to_f
414
+ else
415
+ time = nil
416
+ end
417
+ @sleep_after_command = time
418
+ end
419
+
420
+ def features
421
+ return @features if @features
422
+ @features = []
423
+ status_response["features"].each do |name, available|
424
+ @features << name if available
425
+ end
426
+ @features.sort!
427
+ @features
428
+ end
429
+
430
+ def formatted_features
431
+ features.join(", ")
432
+ end
433
+
434
+ def execute_directive_require_feature(line, content, options)
435
+ feature, = options
436
+ if feature.start_with?("!")
437
+ if features.include?(feature[1..-1])
438
+ omit("require feature: #{feature} (#{formatted_features})")
439
+ end
440
+ else
441
+ unless features.include?(feature)
442
+ omit("require feature: #{feature} (#{formatted_features})")
443
+ end
444
+ end
445
+ end
446
+
447
+ def execute_directive_synonym_generate(parser, line, content, options)
448
+ if @context.groonga_synonym_generate.nil?
449
+ omit("groonga-synonym-generate isn't specified")
450
+ end
451
+
452
+ table, *args = options
453
+ command_line = [
454
+ @context.groonga_synonym_generate,
455
+ *args,
456
+ ]
457
+ packed_command_line = command_line.join(" ")
458
+ log_input("#{packed_command_line}\n")
459
+ begin
460
+ IO.popen(command_line, "r:ascii-8bit") do |io|
461
+ parser << "load --table #{table}\n"
462
+ io.each_line do |line|
463
+ parser << line
464
+ end
465
+ end
466
+ rescue SystemCallError
467
+ raise Error.new("failed to run groonga-synonym-generate: " +
468
+ "<#{packed_command_line}>: #{$!}")
469
+ end
470
+ end
471
+
390
472
  def execute_directive(parser, line, content)
391
473
  command, *options = Shellwords.split(content)
392
474
  case command
@@ -423,19 +505,25 @@ module Grntest
423
505
  when "eval"
424
506
  execute_directive_eval(parser, line, content, options)
425
507
  when "require-input-type"
426
- execute_directive_require_input_type(parser, line, content, options)
508
+ execute_directive_require_input_type(line, content, options)
427
509
  when "require-testee"
428
- execute_directive_require_testee(parser, line, content, options)
510
+ execute_directive_require_testee(line, content, options)
429
511
  when "require-interface"
430
- execute_directive_require_interface(parser, line, content, options)
512
+ execute_directive_require_interface(line, content, options)
431
513
  when "require-apache-arrow"
432
- execute_directive_require_apache_arrow(parser, line, content, options)
514
+ execute_directive_require_apache_arrow(line, content, options)
433
515
  when "add-ignore-log-pattern"
434
- execute_directive_add_ignore_log_pattern(parser, line, content, options)
516
+ execute_directive_add_ignore_log_pattern(line, content, options)
435
517
  when "remove-ignore-log-pattern"
436
- execute_directive_remove_ignore_log_pattern(parser, line, content, options)
518
+ execute_directive_remove_ignore_log_pattern(line, content, options)
437
519
  when "require-platform"
438
- execute_directive_require_platform(parser, line, content, options)
520
+ execute_directive_require_platform(line, content, options)
521
+ when "sleep-after-command"
522
+ execute_directive_sleep_after_command(line, content, options)
523
+ when "require-feature"
524
+ execute_directive_require_feature(line, content, options)
525
+ when "synonym-generate"
526
+ execute_directive_synonym_generate(parser, line, content, options)
439
527
  else
440
528
  log_input(line)
441
529
  log_error("#|e| unknown directive: <#{command}>")
@@ -501,6 +589,7 @@ module Grntest
501
589
  else
502
590
  type = @output_type
503
591
  log_output(response)
592
+ sleep(@sleep_after_command) if @sleep_after_command
504
593
  log_error(extract_important_messages(read_all_log))
505
594
  log_query_log_content(read_all_query_log)
506
595
 
@@ -61,7 +61,7 @@ module Grntest
61
61
  def ensure_groonga_ready
62
62
  n_retried = 0
63
63
  begin
64
- send_command(command("status"))
64
+ @raw_status_response = send_command(command("status"))
65
65
  rescue Error
66
66
  n_retried += 1
67
67
  sleep(0.1)
@@ -44,7 +44,7 @@ module Grntest
44
44
  def ensure_groonga_ready
45
45
  @input.print("status\n")
46
46
  @input.flush
47
- @output.gets
47
+ @raw_status_response = @output.gets
48
48
  end
49
49
 
50
50
  def create_sub_executor(context)
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2020 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright (C) 2012-2021 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -137,6 +137,8 @@ module Grntest
137
137
  context.plugins_directory = @tester.plugins_directory.expand_path
138
138
  context.groonga_suggest_create_dataset =
139
139
  @tester.groonga_suggest_create_dataset
140
+ context.groonga_synonym_generate =
141
+ @tester.groonga_synonym_generate
140
142
  context.testee = @tester.testee
141
143
  context.interface = @tester.interface
142
144
  context.use_http_post = @tester.use_http_post?
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2020 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright (C) 2012-2021 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -56,6 +56,12 @@ module Grntest
56
56
  tester.groonga_suggest_create_dataset = normalize_command(command)
57
57
  end
58
58
 
59
+ parser.on("--groonga-synonym-generate=COMMAND",
60
+ "Use COMMAND as groonga_synonym_generate command",
61
+ "(#{tester.groonga_synonym_generate})") do |command|
62
+ tester.groonga_synonym_generate = normalize_command(command)
63
+ end
64
+
59
65
  available_interfaces = ["stdio", "http"]
60
66
  available_interface_labels = available_interfaces.join(", ")
61
67
  parser.on("--interface=INTERFACE", available_interfaces,
@@ -303,7 +309,10 @@ module Grntest
303
309
  end
304
310
  end
305
311
 
306
- attr_accessor :groonga, :groonga_httpd, :groonga_suggest_create_dataset
312
+ attr_accessor :groonga
313
+ attr_accessor :groonga_httpd
314
+ attr_accessor :groonga_suggest_create_dataset
315
+ attr_accessor :groonga_synonym_generate
307
316
  attr_accessor :interface
308
317
  attr_writer :use_http_post
309
318
  attr_writer :use_http_chunked
@@ -334,6 +343,10 @@ module Grntest
334
343
  unless command_exist?(@groonga_suggest_create_dataset)
335
344
  @groonga_suggest_create_dataset = nil
336
345
  end
346
+ @groonga_synonym_generate = "groonga-synonym-generate"
347
+ unless command_exist?(@groonga_synonym_generate)
348
+ @groonga_synonym_generate = nil
349
+ end
337
350
  @interface = "stdio"
338
351
  @use_http_post = false
339
352
  @use_http_chunked = false
@@ -14,5 +14,5 @@
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
16
  module Grntest
17
- VERSION = "1.4.4"
17
+ VERSION = "1.4.9"
18
18
  end
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
4
+ version: 1.4.9
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-07-17 00:00:00.000000000 Z
12
+ date: 2021-07-12 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.pre1
273
+ rubygems_version: 3.3.0.dev
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