fluent-plugin-droonga 0.9.9 → 1.0.0

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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.dir-locals.el +3 -0
  3. data/.travis.yml +6 -2
  4. data/README.md +6 -7
  5. data/Rakefile +23 -6
  6. data/fluent-plugin-droonga.gemspec +2 -2
  7. data/lib/droonga/adapter.rb +12 -3
  8. data/lib/droonga/adapter_runner.rb +28 -23
  9. data/lib/droonga/catalog/base.rb +7 -111
  10. data/lib/droonga/catalog/dataset.rb +13 -25
  11. data/lib/droonga/catalog/errors.rb +94 -0
  12. data/lib/droonga/catalog/schema.rb +277 -0
  13. data/lib/droonga/catalog/version1.rb +404 -0
  14. data/lib/droonga/catalog/version2.rb +160 -0
  15. data/lib/droonga/catalog_loader.rb +27 -4
  16. data/lib/droonga/catalog_observer.rb +44 -6
  17. data/lib/droonga/collector.rb +12 -10
  18. data/lib/droonga/{handler_plugin.rb → collector_message.rb} +47 -20
  19. data/lib/droonga/collector_runner.rb +64 -0
  20. data/lib/droonga/collectors.rb +18 -0
  21. data/lib/droonga/{catalog.rb → collectors/add.rb} +9 -7
  22. data/lib/droonga/{command_repository.rb → collectors/and.rb} +7 -14
  23. data/lib/droonga/collectors/sum.rb +26 -0
  24. data/lib/droonga/dispatcher.rb +74 -41
  25. data/lib/droonga/distributed_command_planner.rb +2 -2
  26. data/lib/droonga/engine.rb +13 -5
  27. data/lib/droonga/{message_processing_error.rb → error.rb} +33 -12
  28. data/lib/droonga/{plugin/planner/search.rb → error_messages.rb} +12 -10
  29. data/lib/droonga/farm.rb +15 -14
  30. data/lib/droonga/fluent_message_sender.rb +15 -11
  31. data/lib/droonga/forwarder.rb +22 -18
  32. data/lib/droonga/handler.rb +8 -2
  33. data/lib/droonga/handler_runner.rb +47 -26
  34. data/lib/droonga/input_message.rb +6 -6
  35. data/lib/droonga/{command.rb → loggable.rb} +7 -14
  36. data/lib/droonga/logger.rb +56 -15
  37. data/lib/droonga/message_matcher.rb +12 -7
  38. data/lib/droonga/message_pusher.rb +8 -4
  39. data/lib/droonga/message_receiver.rb +11 -9
  40. data/lib/droonga/output_message.rb +2 -0
  41. data/lib/droonga/planner.rb +21 -10
  42. data/lib/droonga/plugin.rb +15 -0
  43. data/lib/droonga/plugin/metadata/{adapter_message.rb → adapter_input_message.rb} +6 -14
  44. data/lib/droonga/plugin/metadata/adapter_output_message.rb +39 -0
  45. data/lib/droonga/plugin/metadata/collector_message.rb +39 -0
  46. data/lib/droonga/plugin/metadata/input_message.rb +15 -0
  47. data/lib/droonga/plugin_loader.rb +33 -25
  48. data/lib/droonga/plugin_registry.rb +9 -1
  49. data/lib/droonga/plugins/basic.rb +54 -0
  50. data/lib/droonga/plugins/crud.rb +36 -15
  51. data/lib/droonga/plugins/error.rb +5 -4
  52. data/lib/droonga/plugins/groonga.rb +9 -6
  53. data/lib/droonga/plugins/groonga/column_create.rb +10 -5
  54. data/lib/droonga/plugins/groonga/generic_command.rb +2 -8
  55. data/lib/droonga/plugins/groonga/generic_response.rb +2 -2
  56. data/lib/droonga/plugins/groonga/select.rb +2 -2
  57. data/lib/droonga/plugins/groonga/table_create.rb +9 -4
  58. data/lib/droonga/plugins/groonga/table_remove.rb +10 -5
  59. data/lib/droonga/plugins/search.rb +106 -5
  60. data/lib/droonga/plugins/search/distributed_search_planner.rb +398 -0
  61. data/lib/droonga/plugins/watch.rb +41 -20
  62. data/lib/droonga/processor.rb +12 -9
  63. data/lib/droonga/{plugin/collector/basic.rb → reducer.rb} +36 -50
  64. data/lib/droonga/replier.rb +7 -4
  65. data/lib/droonga/searcher.rb +40 -37
  66. data/lib/droonga/server.rb +8 -6
  67. data/lib/droonga/session.rb +17 -7
  68. data/lib/droonga/single_step.rb +53 -0
  69. data/lib/droonga/{plugin/planner/watch.rb → single_step_definition.rb} +27 -26
  70. data/lib/droonga/{partition.rb → slice.rb} +23 -12
  71. data/lib/droonga/status_code.rb +25 -0
  72. data/lib/droonga/step_runner.rb +63 -0
  73. data/lib/droonga/watch_schema.rb +7 -3
  74. data/lib/droonga/watcher.rb +4 -4
  75. data/lib/droonga/worker.rb +6 -6
  76. data/lib/fluent/plugin/out_droonga.rb +27 -2
  77. data/sample/cluster/catalog.json +33 -32
  78. data/test/command/config/default/catalog.json +72 -45
  79. data/test/command/config/version1/catalog.json +68 -0
  80. data/test/command/config/version1/fluentd.conf +11 -0
  81. data/test/command/suite/message/error/missing-dataset.expected +1 -1
  82. data/test/command/suite/message/error/unknown-dataset.expected +1 -1
  83. data/test/command/suite/message/error/unknown-type.expected +13 -0
  84. data/test/command/suite/message/error/{unknown-command.test → unknown-type.test} +1 -1
  85. data/test/command/suite/search/error/missing-source-parameter.expected +1 -1
  86. data/test/command/suite/search/error/unknown-source.expected +15 -3
  87. data/test/command/suite/watch/subscribe.expected +1 -3
  88. data/test/command/suite/watch/unsubscribe.expected +1 -3
  89. data/test/performance/watch/catalog.json +1 -0
  90. data/test/unit/catalog/test_dataset.rb +16 -358
  91. data/test/unit/catalog/test_schema.rb +285 -0
  92. data/test/unit/catalog/test_version1.rb +222 -28
  93. data/test/unit/catalog/test_version2.rb +155 -0
  94. data/test/unit/fixtures/catalog/version2.json +62 -0
  95. data/test/unit/helper/distributed_search_planner_helper.rb +2 -2
  96. data/test/unit/plugins/crud/test_add.rb +13 -13
  97. data/test/unit/plugins/groonga/test_column_create.rb +14 -11
  98. data/test/unit/plugins/groonga/test_table_create.rb +4 -9
  99. data/test/unit/plugins/groonga/test_table_remove.rb +4 -9
  100. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_basic.rb +0 -0
  101. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_group_by.rb +0 -0
  102. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_output.rb +0 -0
  103. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_sort_by.rb +0 -0
  104. data/test/unit/{plugin/collector/test_search.rb → plugins/search/test_collector.rb} +40 -39
  105. data/test/unit/plugins/{test_search.rb → search/test_handler.rb} +6 -5
  106. data/test/unit/{plugin/planner/test_search.rb → plugins/search/test_planner.rb} +3 -3
  107. data/test/unit/{plugin/collector → plugins}/test_basic.rb +68 -50
  108. data/test/unit/plugins/test_groonga.rb +2 -15
  109. data/test/unit/plugins/test_watch.rb +25 -22
  110. data/test/unit/test_message_matcher.rb +29 -6
  111. data/test/unit/test_output.rb +4 -0
  112. metadata +58 -50
  113. data/lib/droonga/collector_plugin.rb +0 -50
  114. data/lib/droonga/legacy_pluggable.rb +0 -66
  115. data/lib/droonga/legacy_plugin.rb +0 -57
  116. data/lib/droonga/legacy_plugin_repository.rb +0 -54
  117. data/lib/droonga/planner_plugin.rb +0 -54
  118. data/lib/droonga/plugin/collector/search.rb +0 -98
  119. data/lib/droonga/plugin/planner/crud.rb +0 -49
  120. data/lib/droonga/plugin/planner/distributed_search_planner.rb +0 -393
  121. data/lib/droonga/plugin/planner/groonga.rb +0 -54
  122. data/lib/droonga/plugin_registerable.rb +0 -75
  123. data/test/command/suite/message/error/unknown-command.expected +0 -13
  124. data/test/unit/test_command_repository.rb +0 -39
  125. data/test/unit/test_legacy_plugin.rb +0 -50
  126. data/test/unit/test_legacy_plugin_repository.rb +0 -89
@@ -0,0 +1,155 @@
1
+ # Copyright (C) 2013-2014 Droonga Project
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 2.1 as published by the Free Software Foundation.
6
+ #
7
+ # This library is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public
13
+ # License along with this library; if not, write to the Free Software
14
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+
16
+ require "droonga/catalog/version2"
17
+
18
+ class CatalogTestVersion2 < Test::Unit::TestCase
19
+ class << self
20
+ def minimum_data
21
+ {
22
+ "effectiveDate" => "2014-02-28T00:00:00Z",
23
+ "datasets" => {
24
+ },
25
+ }
26
+ end
27
+ end
28
+
29
+ private
30
+ def minimum_data
31
+ self.class.minimum_data
32
+ end
33
+
34
+ def create_catalog(data, path)
35
+ Droonga::Catalog::Version2.new(data, path)
36
+ end
37
+
38
+ class SliceTest < self
39
+ def setup
40
+ data = JSON.parse(File.read(catalog_path))
41
+ @catalog = create_catalog(data, catalog_path)
42
+ end
43
+
44
+ def test_slices
45
+ slices = @catalog.slices("localhost:23003/test")
46
+ assert_equal({
47
+ "localhost:23003/test.000" => {
48
+ :database => "#{base_path}/000/db",
49
+ :dataset => "Test",
50
+ :plugins => ["plugin1", "plugin2", "plugin3"],
51
+ :n_workers => 4,
52
+ },
53
+ "localhost:23003/test.001" => {
54
+ :database => "#{base_path}/001/db",
55
+ :dataset => "Test",
56
+ :plugins => ["plugin1", "plugin2", "plugin3"],
57
+ :n_workers => 4,
58
+ },
59
+ "localhost:23003/test.002" => {
60
+ :database => "#{base_path}/002/db",
61
+ :dataset => "Test",
62
+ :plugins => ["plugin1", "plugin2", "plugin3"],
63
+ :n_workers => 4,
64
+ },
65
+ },
66
+ slices)
67
+ end
68
+
69
+ def fixture_path(base_path)
70
+ File.expand_path("../../fixtures/#{base_path}", __FILE__)
71
+ end
72
+
73
+ def catalog_path
74
+ @catalog_path ||= fixture_path("catalog/version2.json")
75
+ end
76
+
77
+ def base_path
78
+ File.dirname(catalog_path)
79
+ end
80
+
81
+ class PluginsTest < self
82
+ def setup
83
+ custom_data = {
84
+ "datasets" => {
85
+ "Droonga" => {
86
+ "nWorkers" => 1,
87
+ "replicas" => [
88
+ {
89
+ "slices" => [
90
+ {
91
+ "volume" => {
92
+ "address" => "#{farm_name}.000",
93
+ },
94
+ },
95
+ ],
96
+ },
97
+ ],
98
+ },
99
+ },
100
+
101
+ }
102
+ @data = minimum_data.merge(custom_data)
103
+ end
104
+
105
+ def farm_name
106
+ "localhost:23041/droonga"
107
+ end
108
+
109
+ def plugins(data)
110
+ catalog = create_catalog(data, catalog_path)
111
+ catalog.slices(farm_name).collect do |volum_address, options|
112
+ options[:plugins]
113
+ end
114
+ end
115
+
116
+ def test_plugins
117
+ @data["datasets"]["Droonga"]["plugins"] = ["search", "groonga", "add"]
118
+ assert_equal([["search", "groonga", "add"]],
119
+ plugins(@data))
120
+
121
+ end
122
+ end
123
+ end
124
+
125
+ class DataSetTest < self
126
+ class ReplicaTest < self
127
+ class TotalWeightTest < self
128
+ def test_three_slices
129
+ replica = {
130
+ "slices" => [
131
+ {
132
+ "weight" => 10,
133
+ },
134
+ {
135
+ "weight" => 20,
136
+ },
137
+ {
138
+ "weight" => 30,
139
+ },
140
+ ],
141
+ }
142
+ assert_equal(10 + 20 + 30,
143
+ total_weight(replica))
144
+ end
145
+
146
+ private
147
+ def total_weight(replica)
148
+ catalog = create_catalog(minimum_data,
149
+ "base-path")
150
+ catalog.send(:compute_total_weight, replica)
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,62 @@
1
+ {
2
+ "version": 2,
3
+ "effectiveDate": "2014-02-28T00:00:00Z",
4
+ "datasets": {
5
+ "Test": {
6
+ "nWorkers": 4,
7
+ "plugins": [
8
+ "plugin1",
9
+ "plugin2",
10
+ "plugin3"
11
+ ],
12
+ "replicas": [
13
+ {
14
+ "dimension": "_key",
15
+ "slicer": "hash",
16
+ "slices": [
17
+ {
18
+ "label": "slice00",
19
+ "volume": {
20
+ "address": "localhost:23003/test.000"
21
+ }
22
+ },
23
+ {
24
+ "label": "slice01",
25
+ "volume": {
26
+ "address": "localhost:23003/test.001"
27
+ }
28
+ },
29
+ {
30
+ "label": "slice02",
31
+ "volume": {
32
+ "address": "localhost:23003/test.002"
33
+ }
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "slices": [
39
+ {
40
+ "label": "slice10",
41
+ "volume": {
42
+ "address": "localhost:23004/test.010"
43
+ }
44
+ },
45
+ {
46
+ "label": "slice11",
47
+ "volume": {
48
+ "address": "localhost:23004/test.011"
49
+ }
50
+ },
51
+ {
52
+ "label": "slice12",
53
+ "volume": {
54
+ "address": "localhost:23004/test.012"
55
+ }
56
+ }
57
+ ]
58
+ }
59
+ ]
60
+ }
61
+ }
62
+ }
@@ -13,11 +13,11 @@
13
13
  # License along with this library; if not, write to the Free Software
14
14
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
15
 
16
- require "droonga/plugin/planner/distributed_search_planner"
16
+ require "droonga/plugins/search/distributed_search_planner"
17
17
 
18
18
  module DistributedSearchPlannerHelper
19
19
  def plan(search_request)
20
- planner = Droonga::DistributedSearchPlanner.new(search_request)
20
+ planner = Droonga::Plugins::Search::DistributedSearchPlanner.new(search_request)
21
21
  planner.plan
22
22
  end
23
23
 
@@ -16,9 +16,7 @@
16
16
  require "droonga/plugins/crud"
17
17
 
18
18
  class CRUDAddHandlerTest < Test::Unit::TestCase
19
- SUCCESS_RESPONSE_BODY = {
20
- "success" => true,
21
- }
19
+ SUCCESS_RESPONSE_BODY = true
22
20
 
23
21
  def setup
24
22
  setup_database
@@ -37,8 +35,10 @@ class CRUDAddHandlerTest < Test::Unit::TestCase
37
35
 
38
36
  def setup_handler
39
37
  @worker = StubWorker.new
40
- @handler = Droonga::Plugins::CRUD::Handler.new("name", @worker.context)
41
38
  @messenger = Droonga::Test::StubHandlerMessenger.new
39
+ @handler = Droonga::Plugins::CRUD::Handler.new("name",
40
+ @worker.context,
41
+ @messenger)
42
42
  end
43
43
 
44
44
  def teardown_handler
@@ -47,7 +47,7 @@ class CRUDAddHandlerTest < Test::Unit::TestCase
47
47
 
48
48
  def process(request)
49
49
  message = Droonga::Test::StubHandlerMessage.new(request)
50
- @handler.handle(message, @messenger)
50
+ @handler.handle(message)
51
51
  end
52
52
 
53
53
  public
@@ -70,8 +70,8 @@ class CRUDAddHandlerTest < Test::Unit::TestCase
70
70
  "key" => "mori",
71
71
  "values" => {},
72
72
  }
73
- process(request)
74
- assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
73
+ response = process(request)
74
+ assert_equal(SUCCESS_RESPONSE_BODY, response)
75
75
  table = @worker.context["Users"]
76
76
  assert_equal(["mori"], table.collect(&:key))
77
77
  end
@@ -82,8 +82,8 @@ class CRUDAddHandlerTest < Test::Unit::TestCase
82
82
  "key" => "mori",
83
83
  "values" => {"country" => "japan"},
84
84
  }
85
- process(request)
86
- assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
85
+ response = process(request)
86
+ assert_equal(SUCCESS_RESPONSE_BODY, response)
87
87
  table = @worker.context["Users"]
88
88
  assert_equal(["japan"], table.collect(&:country))
89
89
  end
@@ -147,8 +147,8 @@ class CRUDAddHandlerTest < Test::Unit::TestCase
147
147
  "table" => "Books",
148
148
  "values" => {},
149
149
  }
150
- process(request)
151
- assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
150
+ response = process(request)
151
+ assert_equal(SUCCESS_RESPONSE_BODY, response)
152
152
  table = @worker.context["Books"]
153
153
  assert_equal([nil], table.collect(&:title))
154
154
  end
@@ -158,8 +158,8 @@ class CRUDAddHandlerTest < Test::Unit::TestCase
158
158
  "table" => "Books",
159
159
  "values" => {"title" => "CSS"},
160
160
  }
161
- process(request)
162
- assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
161
+ response = process(request)
162
+ assert_equal(SUCCESS_RESPONSE_BODY, response)
163
163
  table = @worker.context["Books"]
164
164
  assert_equal(["CSS"], table.collect(&:title))
165
165
  end
@@ -16,18 +16,20 @@
16
16
  class ColumnCreateTest < GroongaHandlerTest
17
17
  def create_handler
18
18
  Droonga::Plugins::Groonga::ColumnCreate::Handler.new("droonga",
19
- @handler.context)
19
+ @handler.context,
20
+ @messages)
20
21
  end
21
22
 
22
23
  def test_success
23
24
  Groonga::Schema.define(:context => @context) do |schema|
24
25
  schema.create_table("Books", :type => :hash)
25
26
  end
26
- process(:column_create,
27
- {"table" => "Books", "name" => "title", "type" => "ShortText"})
28
- response = @messenger.values.last
29
- assert_valid_output(response)
30
- response = response["result"]
27
+ message = {
28
+ "table" => "Books",
29
+ "name" => "title",
30
+ "type" => "ShortText",
31
+ }
32
+ response = process(:column_create, message)
31
33
  assert_equal(
32
34
  [NORMALIZED_HEADER_SUCCESS, true],
33
35
  [normalize_header(response.first), response.last]
@@ -35,11 +37,12 @@ class ColumnCreateTest < GroongaHandlerTest
35
37
  end
36
38
 
37
39
  def test_unknown_table
38
- process(:column_create,
39
- {"table" => "Unknown", "name" => "title", "type" => "ShortText"})
40
- response = @messenger.values.last
41
- assert_valid_output(response)
42
- response = response["result"]
40
+ message = {
41
+ "table" => "Unknown",
42
+ "name" => "title",
43
+ "type" => "ShortText",
44
+ }
45
+ response = process(:column_create, message)
43
46
  assert_equal(
44
47
  [NORMALIZED_HEADER_INVALID_ARGUMENT, false],
45
48
  [normalize_header(response.first), response.last]
@@ -16,14 +16,12 @@
16
16
  class TableCreateTest < GroongaHandlerTest
17
17
  def create_handler
18
18
  Droonga::Plugins::Groonga::TableCreate::Handler.new("droonga",
19
- @handler.context)
19
+ @handler.context,
20
+ @messenger)
20
21
  end
21
22
 
22
23
  def test_success
23
- process(:table_create, {"name" => "Books"})
24
- response = @messenger.values.last
25
- assert_valid_output(response)
26
- response = response["result"]
24
+ response = process(:table_create, {"name" => "Books"})
27
25
  assert_equal(
28
26
  [NORMALIZED_HEADER_SUCCESS, true],
29
27
  [normalize_header(response.first), response.last]
@@ -31,10 +29,7 @@ class TableCreateTest < GroongaHandlerTest
31
29
  end
32
30
 
33
31
  def test_failure
34
- process(:table_create, {})
35
- response = @messenger.values.last
36
- assert_valid_output(response)
37
- response = response["result"]
32
+ response = process(:table_create, {})
38
33
  assert_equal(
39
34
  [NORMALIZED_HEADER_INVALID_ARGUMENT, false],
40
35
  [normalize_header(response.first), response.last]
@@ -16,7 +16,8 @@
16
16
  class TableRemoveTest < GroongaHandlerTest
17
17
  def create_handler
18
18
  Droonga::Plugins::Groonga::TableRemove::Handler.new("droonga",
19
- @handler.context)
19
+ @handler.context,
20
+ @messenger)
20
21
  end
21
22
 
22
23
  def setup
@@ -27,10 +28,7 @@ class TableRemoveTest < GroongaHandlerTest
27
28
  end
28
29
 
29
30
  def test_success
30
- process(:table_remove, {"name" => "Books"})
31
- response = @messenger.values.last
32
- assert_valid_output(response)
33
- response = response["result"]
31
+ response = process(:table_remove, {"name" => "Books"})
34
32
  assert_equal(
35
33
  [NORMALIZED_HEADER_SUCCESS, true],
36
34
  [normalize_header(response.first), response.last]
@@ -40,10 +38,7 @@ class TableRemoveTest < GroongaHandlerTest
40
38
  end
41
39
 
42
40
  def test_failure
43
- process(:table_remove, {})
44
- response = @messenger.values.last
45
- assert_valid_output(response)
46
- response = response["result"]
41
+ response = process(:table_remove, {})
47
42
  assert_equal(
48
43
  [NORMALIZED_HEADER_INVALID_ARGUMENT, false],
49
44
  [normalize_header(response.first), response.last]
@@ -13,16 +13,11 @@
13
13
  # License along with this library; if not, write to the Free Software
14
14
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
15
 
16
- require "droonga/plugin/collector/search"
16
+ require "droonga/plugins/search"
17
17
 
18
18
  class SearchCollectorTest < Test::Unit::TestCase
19
19
  def setup
20
20
  setup_database
21
- @plugin = Droonga::SearchCollector.new
22
- @outputs = []
23
- stub(@plugin).emit do |name, value|
24
- @outputs << [name, value]
25
- end
26
21
  end
27
22
 
28
23
  def teardown
@@ -34,6 +29,22 @@ class SearchCollectorTest < Test::Unit::TestCase
34
29
  columns
35
30
  end
36
31
 
32
+ def run_collector(collector, message)
33
+ collector_message = Droonga::CollectorMessage.new(message)
34
+ collector.collect(collector_message)
35
+ collector_message.values
36
+ end
37
+
38
+ def gather(message)
39
+ collector = Droonga::Plugins::Search::GatherCollector.new
40
+ run_collector(collector, message)
41
+ end
42
+
43
+ def reduce(message)
44
+ collector = Droonga::Plugins::Search::ReduceCollector.new
45
+ run_collector(collector, message)
46
+ end
47
+
37
48
  class << self
38
49
  def create_record(*columns)
39
50
  columns
@@ -307,7 +318,7 @@ class SearchCollectorTest < Test::Unit::TestCase
307
318
  def test_gather(data)
308
319
  request = {
309
320
  "task" => {
310
- "values" => nil,
321
+ "values" => {},
311
322
  "step" => {
312
323
  "body" => nil,
313
324
  "outputs" => nil,
@@ -318,10 +329,10 @@ class SearchCollectorTest < Test::Unit::TestCase
318
329
  "name" => data[:mapping],
319
330
  "descendants" => nil,
320
331
  }
321
- @plugin.process("collector_search_gather", request)
322
332
  output_name = data[:mapping]
323
333
  output_name = output_name["output"] if output_name.is_a?(Hash)
324
- assert_equal([output_name, data[:expected]], @outputs.last)
334
+ assert_equal({ output_name => data[:expected] },
335
+ gather(request))
325
336
  end
326
337
  end
327
338
 
@@ -385,10 +396,8 @@ class SearchCollectorTest < Test::Unit::TestCase
385
396
  "name" => input_name,
386
397
  "descendants" => nil,
387
398
  }
388
- @plugin.process("collector_search_reduce", request)
389
- assert_equal([
390
- output_name,
391
- {
399
+ assert_equal({
400
+ output_name => {
392
401
  "numeric_value" => 3,
393
402
  "numeric_key_records" => [
394
403
  create_record(1),
@@ -407,8 +416,8 @@ class SearchCollectorTest < Test::Unit::TestCase
407
416
  create_record("f"),
408
417
  ],
409
418
  },
410
- ],
411
- @outputs.last)
419
+ },
420
+ reduce(request))
412
421
  end
413
422
 
414
423
  def test_sum_with_limit
@@ -470,10 +479,8 @@ class SearchCollectorTest < Test::Unit::TestCase
470
479
  "name" => input_name,
471
480
  "descendants" => nil,
472
481
  }
473
- @plugin.process("collector_search_reduce", request)
474
- assert_equal([
475
- output_name,
476
- {
482
+ assert_equal({
483
+ output_name => {
477
484
  "numeric_value" => 3,
478
485
  "numeric_key_records" => [
479
486
  create_record(1),
@@ -488,8 +495,8 @@ class SearchCollectorTest < Test::Unit::TestCase
488
495
  create_record("f"),
489
496
  ],
490
497
  },
491
- ],
492
- @outputs.last)
498
+ },
499
+ reduce(request))
493
500
  end
494
501
 
495
502
  def test_sort
@@ -551,10 +558,8 @@ class SearchCollectorTest < Test::Unit::TestCase
551
558
  "name" => input_name,
552
559
  "descendants" => nil,
553
560
  }
554
- @plugin.process("collector_search_reduce", request)
555
- assert_equal([
556
- output_name,
557
- {
561
+ assert_equal({
562
+ output_name => {
558
563
  "numeric_key_records" => [
559
564
  create_record(1),
560
565
  create_record(2),
@@ -572,8 +577,8 @@ class SearchCollectorTest < Test::Unit::TestCase
572
577
  create_record("f"),
573
578
  ],
574
579
  },
575
- ],
576
- @outputs.last)
580
+ },
581
+ reduce(request))
577
582
  end
578
583
 
579
584
  def test_sort_with_limit
@@ -635,10 +640,8 @@ class SearchCollectorTest < Test::Unit::TestCase
635
640
  "name" => input_name,
636
641
  "descendants" => nil,
637
642
  }
638
- @plugin.process("collector_search_reduce", request)
639
- assert_equal([
640
- output_name,
641
- {
643
+ assert_equal({
644
+ output_name => {
642
645
  "numeric_key_records" => [
643
646
  create_record(1),
644
647
  create_record(2),
@@ -652,8 +655,8 @@ class SearchCollectorTest < Test::Unit::TestCase
652
655
  create_record("f"),
653
656
  ],
654
657
  },
655
- ],
656
- @outputs.last)
658
+ },
659
+ reduce(request))
657
660
  end
658
661
  end
659
662
 
@@ -749,10 +752,8 @@ class SearchCollectorTest < Test::Unit::TestCase
749
752
  "name" => input_name,
750
753
  "descendants" => nil,
751
754
  }
752
- @plugin.process("collector_search_reduce", request)
753
- assert_equal([
754
- output_name,
755
- {
755
+ assert_equal({
756
+ output_name => {
756
757
  "records" => [
757
758
  [
758
759
  "group3",
@@ -798,8 +799,8 @@ class SearchCollectorTest < Test::Unit::TestCase
798
799
  ],
799
800
  ],
800
801
  },
801
- ],
802
- @outputs.last)
802
+ },
803
+ reduce(request))
803
804
  end
804
805
  end
805
806
  end