fluent-plugin-droonga 0.9.9 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -29,8 +29,10 @@ class SearchHandlerTest < Test::Unit::TestCase
29
29
 
30
30
  def setup_plugin
31
31
  @handler = Droonga::Test::StubHandler.new
32
- @plugin = Droonga::Plugins::Search::Handler.new("droonga", @handler.context)
33
32
  @messenger = Droonga::Test::StubHandlerMessenger.new
33
+ @plugin = Droonga::Plugins::Search::Handler.new("droonga",
34
+ @handler.context,
35
+ @messenger)
34
36
  end
35
37
 
36
38
  def teardown_plugin
@@ -41,8 +43,7 @@ class SearchHandlerTest < Test::Unit::TestCase
41
43
  private
42
44
  def search(request, headers={})
43
45
  message = Droonga::Test::StubHandlerMessage.new(request, headers)
44
- @plugin.handle(message, @messenger)
45
- results_to_result_set(@messenger.values.first)
46
+ results_to_result_set(@plugin.handle(message))
46
47
  end
47
48
 
48
49
  def results_to_result_set(results)
@@ -51,7 +52,7 @@ class SearchHandlerTest < Test::Unit::TestCase
51
52
  result_set[name] = normalize_result(result)
52
53
  end
53
54
  result_set
54
- end
55
+ end
55
56
 
56
57
  def normalize_result(result)
57
58
  result["startTime"] = start_time if result["startTime"]
@@ -13,13 +13,13 @@
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/search"
16
+ require "droonga/plugins/search"
17
17
 
18
18
  class SearchPlannerTest < Test::Unit::TestCase
19
19
  def setup
20
20
  setup_database
21
21
  @planner = Droonga::Test::StubPlanner.new
22
- @plugin = Droonga::SearchPlanner.new(@planner)
22
+ @plugin = Droonga::Plugins::Search::Planner.new
23
23
  end
24
24
 
25
25
  def teardown
@@ -56,7 +56,7 @@ class SearchPlannerTest < Test::Unit::TestCase
56
56
  },
57
57
  }
58
58
 
59
- @planner.distribute(@plugin.process("search", envelope))
59
+ @planner.distribute(@plugin.plan(envelope))
60
60
 
61
61
  message = []
62
62
 
@@ -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/basic"
16
+ require "droonga/plugins/basic"
17
17
 
18
18
  class BasicCollectorTest < Test::Unit::TestCase
19
19
  def setup
20
20
  setup_database
21
- @plugin = Droonga::BasicCollector.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 BasicCollectorTest < 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::Basic::GatherCollector.new
40
+ run_collector(collector, message)
41
+ end
42
+
43
+ def reduce(message)
44
+ collector = Droonga::Plugins::Basic::ReduceCollector.new
45
+ run_collector(collector, message)
46
+ end
47
+
37
48
  class << self
38
49
  def create_record(*columns)
39
50
  columns
@@ -43,12 +54,12 @@ class BasicCollectorTest < Test::Unit::TestCase
43
54
  class IOTest < self
44
55
  data(
45
56
  :simple_mapping => {
46
- :expected => ["output_name", "result"],
57
+ :expected => { "output_name" => "result" },
47
58
  :source => "result",
48
59
  :mapping => "output_name",
49
60
  },
50
61
  :complex_mapping => {
51
- :expected => ["output_name", "result"],
62
+ :expected => { "output_name" => "result" },
52
63
  :source => "result",
53
64
  :mapping => {
54
65
  "output" => "output_name",
@@ -58,7 +69,7 @@ class BasicCollectorTest < Test::Unit::TestCase
58
69
  def test_gather(data)
59
70
  request = {
60
71
  "task" => {
61
- "values" => nil,
72
+ "values" => {},
62
73
  "step" => {
63
74
  "body" => nil,
64
75
  "outputs" => nil,
@@ -69,8 +80,7 @@ class BasicCollectorTest < Test::Unit::TestCase
69
80
  "name" => data[:mapping],
70
81
  "descendants" => nil,
71
82
  }
72
- @plugin.process("collector_gather", request)
73
- assert_equal(data[:expected], @outputs.last)
83
+ assert_equal(data[:expected], gather(request))
74
84
  end
75
85
 
76
86
  def test_reduce
@@ -98,16 +108,18 @@ class BasicCollectorTest < Test::Unit::TestCase
98
108
  "name" => input_name,
99
109
  "descendants" => nil,
100
110
  }
101
- @plugin.process("collector_reduce", request)
102
- assert_equal([
103
- output_name,
104
- [0, 1, 2, 3, 4, 5],
105
- ],
106
- @outputs.last)
111
+ assert_equal({ output_name => [0, 1, 2, 3, 4, 5] },
112
+ reduce(request))
107
113
  end
108
114
  end
109
115
 
110
- class ReduceTest < self
116
+ # TODO: Split file
117
+ class ReducerTest < self
118
+ def reduce_value(deal, left_value, right_value)
119
+ reducer = Droonga::Reducer.new(deal)
120
+ reducer.reduce(left_value, right_value)
121
+ end
122
+
111
123
  data(
112
124
  :int => {
113
125
  :expected => 1.5,
@@ -121,9 +133,9 @@ class BasicCollectorTest < Test::Unit::TestCase
121
133
  },
122
134
  )
123
135
  def test_average(data)
124
- reduced = @plugin.reduce({ "type" => "average" },
125
- data[:left],
126
- data[:right])
136
+ reduced = reduce_value({ "type" => "average" },
137
+ data[:left],
138
+ data[:right])
127
139
  assert_equal(data[:expected], reduced)
128
140
  end
129
141
 
@@ -150,9 +162,9 @@ class BasicCollectorTest < Test::Unit::TestCase
150
162
  },
151
163
  )
152
164
  def test_and(data)
153
- reduced = @plugin.reduce({ "type" => "and" },
154
- data[:left],
155
- data[:right])
165
+ reduced = reduce_value({ "type" => "and" },
166
+ data[:left],
167
+ data[:right])
156
168
  assert_equal(data[:expected], reduced)
157
169
  end
158
170
 
@@ -179,9 +191,9 @@ class BasicCollectorTest < Test::Unit::TestCase
179
191
  },
180
192
  )
181
193
  def test_or(data)
182
- reduced = @plugin.reduce({ "type" => "or" },
183
- data[:left],
184
- data[:right])
194
+ reduced = reduce_value({ "type" => "or" },
195
+ data[:left],
196
+ data[:right])
185
197
  assert_equal(data[:expected], reduced)
186
198
  end
187
199
 
@@ -273,10 +285,10 @@ class BasicCollectorTest < Test::Unit::TestCase
273
285
  },
274
286
  )
275
287
  def test_sum(data)
276
- reduced = @plugin.reduce({ "type" => "sum",
277
- "limit" => data[:limit] || -1 },
278
- data[:left],
279
- data[:right])
288
+ reduced = reduce_value({ "type" => "sum",
289
+ "limit" => data[:limit] || -1 },
290
+ data[:left],
291
+ data[:right])
280
292
  assert_equal(data[:expected], reduced)
281
293
  end
282
294
 
@@ -357,20 +369,26 @@ class BasicCollectorTest < Test::Unit::TestCase
357
369
  },
358
370
  )
359
371
  def test_sort(data)
360
- reduced = @plugin.reduce({
361
- "type" => "sort",
362
- "operators" => [
363
- { "column" => 0, "operator" => "<" },
364
- ],
365
- "limit" => data[:limit] || -1,
366
- },
367
- data[:left],
368
- data[:right])
372
+ reduced = reduce_value({
373
+ "type" => "sort",
374
+ "operators" => [
375
+ { "column" => 0, "operator" => "<" },
376
+ ],
377
+ "limit" => data[:limit] || -1,
378
+ },
379
+ data[:left],
380
+ data[:right])
369
381
  assert_equal(data[:expected], reduced)
370
382
  end
371
383
  end
372
384
 
385
+ # TODO: Split file
373
386
  class MergeTest < self
387
+ def reduce_value(deal, left_value, right_value)
388
+ reducer = Droonga::Reducer.new(deal)
389
+ reducer.reduce(left_value, right_value)
390
+ end
391
+
374
392
  def test_grouped
375
393
  expected = [
376
394
  [
@@ -476,16 +494,16 @@ class BasicCollectorTest < Test::Unit::TestCase
476
494
  ],
477
495
  ]
478
496
 
479
- reduced = @plugin.reduce({
480
- "type" => "sort",
481
- "operators" => [
482
- { "column" => 1, "operator" => "<" },
483
- ],
484
- "key_column" => 0,
485
- "limit" => -1,
486
- },
487
- left,
488
- right)
497
+ reduced = reduce_value({
498
+ "type" => "sort",
499
+ "operators" => [
500
+ { "column" => 1, "operator" => "<" },
501
+ ],
502
+ "key_column" => 0,
503
+ "limit" => -1,
504
+ },
505
+ left,
506
+ right)
489
507
  assert_equal(expected, reduced)
490
508
  end
491
509
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -45,7 +45,7 @@ class GroongaHandlerTest < Test::Unit::TestCase
45
45
  def process(command, request)
46
46
  message = Droonga::Test::StubHandlerMessage.new(request)
47
47
  handler = create_handler
48
- handler.handle(message, @messenger)
48
+ handler.handle(message)
49
49
  end
50
50
 
51
51
  NORMALIZED_START_TIME = Time.parse("2013-07-11T16:04:28+0900").to_i
@@ -66,17 +66,4 @@ class GroongaHandlerTest < Test::Unit::TestCase
66
66
  NORMALIZED_START_TIME,
67
67
  NORMALIZED_ELAPSED_TIME,
68
68
  ]
69
-
70
- def assert_valid_output(output)
71
- expected = {
72
- "result" => [],
73
- }
74
- normalized_output = Marshal.load(Marshal.dump(output))
75
- normalized_output.each do |key, value|
76
- if value.is_a?(Array)
77
- normalized_output[key] = []
78
- end
79
- end
80
- assert_equal(expected, normalized_output)
81
- end
82
69
  end
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 Droonga Project
3
+ # Copyright (C) 2013-2014 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -20,7 +20,7 @@ require "droonga/plugins/watch"
20
20
  class WatchHandlerTest < Test::Unit::TestCase
21
21
  include WatchHelper
22
22
 
23
- SUCCESS_RESULT = { "success" => true }
23
+ SUCCESS_RESULT = true
24
24
 
25
25
  def setup
26
26
  setup_database
@@ -45,13 +45,15 @@ class WatchHandlerTest < Test::Unit::TestCase
45
45
 
46
46
  def process(command, request, headers={})
47
47
  message = Droonga::Test::StubHandlerMessage.new(request, headers)
48
- create_plugin.handle(message, @messenger)
48
+ create_plugin.handle(message)
49
49
  end
50
50
 
51
51
  public
52
52
  class SubscribeTest < self
53
53
  def create_plugin
54
- Droonga::Plugins::Watch::SubscribeHandler.new("droonga", @handler.context)
54
+ Droonga::Plugins::Watch::SubscribeHandler.new("droonga",
55
+ @handler.context,
56
+ @messenger)
55
57
  end
56
58
 
57
59
  def test_subscribe
@@ -60,8 +62,8 @@ class WatchHandlerTest < Test::Unit::TestCase
60
62
  "condition" => "たいやき",
61
63
  "subscriber" => "localhost"
62
64
  }
63
- process(:subscribe, request)
64
- assert_equal([SUCCESS_RESULT], @messenger.values)
65
+ response = process(:subscribe, request)
66
+ assert_equal(SUCCESS_RESULT, response)
65
67
 
66
68
  assert_equal(
67
69
  ["localhost:23003/output"],
@@ -74,8 +76,8 @@ class WatchHandlerTest < Test::Unit::TestCase
74
76
  "condition" => "たいやき",
75
77
  "subscriber" => "localhost"
76
78
  }
77
- process(:subscribe, request, "from" => "localhost:23004/output")
78
- assert_equal([SUCCESS_RESULT], @messenger.values)
79
+ response = process(:subscribe, request, "from" => "localhost:23004/output")
80
+ assert_equal(SUCCESS_RESULT, response)
79
81
 
80
82
  assert_equal(
81
83
  ["localhost:23004/output"],
@@ -89,8 +91,8 @@ class WatchHandlerTest < Test::Unit::TestCase
89
91
  "subscriber" => "localhost",
90
92
  "route" => "localhost:23003/output"
91
93
  }
92
- process(:subscribe, request, "from" => "localhost:23004/output")
93
- assert_equal([SUCCESS_RESULT], @messenger.values)
94
+ response = process(:subscribe, request, "from" => "localhost:23004/output")
95
+ assert_equal(SUCCESS_RESULT, response)
94
96
 
95
97
  assert_equal(
96
98
  ["localhost:23003/output"],
@@ -116,7 +118,8 @@ class WatchHandlerTest < Test::Unit::TestCase
116
118
 
117
119
  def create_plugin
118
120
  Droonga::Plugins::Watch::UnsubscribeHandler.new("droonga",
119
- @handler.context)
121
+ @handler.context,
122
+ @messenger)
120
123
  end
121
124
 
122
125
  def test_unsubscribe
@@ -125,8 +128,8 @@ class WatchHandlerTest < Test::Unit::TestCase
125
128
  "condition" => "たいやき",
126
129
  "subscriber" => "localhost"
127
130
  }
128
- process(:unsubscribe, request)
129
- assert_equal([SUCCESS_RESULT], @messenger.values)
131
+ response = process(:unsubscribe, request)
132
+ assert_equal(SUCCESS_RESULT, response)
130
133
  end
131
134
 
132
135
  private
@@ -136,9 +139,8 @@ class WatchHandlerTest < Test::Unit::TestCase
136
139
  "condition" => "たいやき",
137
140
  "subscriber" => "localhost"
138
141
  }
139
- process(:subscribe, request)
140
- assert_equal([SUCCESS_RESULT], @messenger.values)
141
- @messenger.values.clear
142
+ response = process(:subscribe, request)
143
+ assert_equal(SUCCESS_RESULT, response)
142
144
  end
143
145
  end
144
146
 
@@ -150,7 +152,8 @@ class WatchHandlerTest < Test::Unit::TestCase
150
152
 
151
153
  def create_plugin
152
154
  Droonga::Plugins::Watch::FeedHandler.new("droonga",
153
- @handler.context)
155
+ @handler.context,
156
+ @messenger)
154
157
  end
155
158
 
156
159
  def test_feed_match
@@ -181,8 +184,7 @@ class WatchHandlerTest < Test::Unit::TestCase
181
184
  "text" => "たこやきおいしいです"
182
185
  }
183
186
  }
184
- process(:feed, request)
185
- assert_equal([], @messenger.messages)
187
+ assert_nil(process(:feed, request))
186
188
  end
187
189
 
188
190
  private
@@ -195,9 +197,10 @@ class WatchHandlerTest < Test::Unit::TestCase
195
197
  message = Droonga::Test::StubHandlerMessage.new(request, {})
196
198
  subscribe_handler =
197
199
  Droonga::Plugins::Watch::SubscribeHandler.new("droonga",
198
- @handler.context)
199
- subscribe_handler.handle(message, @messenger)
200
- assert_equal([SUCCESS_RESULT], @messenger.values)
200
+ @handler.context,
201
+ @messenger)
202
+ response = subscribe_handler.handle(message)
203
+ assert_equal(SUCCESS_RESULT, response)
201
204
  end
202
205
  end
203
206
  end
@@ -90,26 +90,26 @@ class MessageMatcherTest < Test::Unit::TestCase
90
90
 
91
91
  class IncludeTest < self
92
92
  def test_exist
93
- assert_true(match?(["originalTypes", :include?, "select"],
93
+ assert_true(match?(["originalTypes", :include, "select"],
94
94
  {
95
95
  "originalTypes" => ["search", "select"],
96
96
  }))
97
97
  end
98
98
 
99
99
  def test_not_exist
100
- assert_false(match?(["originalTypes", :include?, "select"],
100
+ assert_false(match?(["originalTypes", :include, "select"],
101
101
  {
102
102
  "originalTypes" => ["load"],
103
103
  }))
104
104
  end
105
105
 
106
106
  def test_no_key
107
- assert_false(match?(["originalTypes", :include?, "select"],
107
+ assert_false(match?(["originalTypes", :include, "select"],
108
108
  {}))
109
109
  end
110
110
 
111
111
  def test_not_enumerable
112
- assert_false(match?(["originalTypes", :include?, "select"],
112
+ assert_false(match?(["originalTypes", :include, "select"],
113
113
  {
114
114
  "originalTypes" => 29,
115
115
  }))
@@ -118,7 +118,7 @@ class MessageMatcherTest < Test::Unit::TestCase
118
118
 
119
119
  class ExistTest < self
120
120
  def test_exist
121
- assert_true(match?(["body.result", :exist?],
121
+ assert_true(match?(["body.result", :exist],
122
122
  {
123
123
  "body" => {
124
124
  "result" => nil,
@@ -127,11 +127,34 @@ class MessageMatcherTest < Test::Unit::TestCase
127
127
  end
128
128
 
129
129
  def test_not_exist
130
- assert_false(match?(["body.result", :exist?],
130
+ assert_false(match?(["body.result", :exist],
131
131
  {
132
132
  "body" => nil,
133
133
  }))
134
134
  end
135
135
  end
136
+
137
+ class StartWithTest < self
138
+ def test_start_with
139
+ assert_true(match?(["type", :start_with, "watch."],
140
+ {
141
+ "type" => "watch.subscribe",
142
+ }))
143
+ end
144
+
145
+ def test_not_start_with
146
+ assert_false(match?(["type", :start_with, "watch."],
147
+ {
148
+ "type" => "table_create",
149
+ }))
150
+ end
151
+
152
+ def test_nil_value
153
+ assert_false(match?(["type", :start_with, "watch."],
154
+ {
155
+ "type" => nil,
156
+ }))
157
+ end
158
+ end
136
159
  end
137
160
  end