fluent-plugin-droonga 0.7.0 → 0.8.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -4
- data/benchmark/watch/benchmark-notify.rb +2 -2
- data/benchmark/watch/benchmark-scan.rb +3 -0
- data/benchmark/watch/fluentd.conf +0 -1
- data/fluent-plugin-droonga.gemspec +2 -3
- data/lib/droonga/catalog.rb +10 -124
- data/lib/droonga/catalog/base.rb +140 -0
- data/lib/droonga/catalog/version1.rb +23 -0
- data/lib/droonga/catalog_loader.rb +33 -0
- data/lib/droonga/collector.rb +2 -71
- data/lib/droonga/collector_plugin.rb +2 -34
- data/lib/droonga/dispatcher.rb +141 -196
- data/lib/droonga/distribution_planner.rb +76 -0
- data/lib/droonga/distributor.rb +5 -7
- data/lib/droonga/distributor_plugin.rb +23 -15
- data/lib/droonga/engine.rb +2 -2
- data/lib/droonga/event_loop.rb +46 -0
- data/lib/droonga/farm.rb +9 -5
- data/lib/droonga/fluent_message_sender.rb +84 -0
- data/lib/droonga/forwarder.rb +43 -53
- data/lib/droonga/handler.rb +20 -68
- data/lib/droonga/handler_message.rb +61 -0
- data/lib/droonga/handler_messenger.rb +92 -0
- data/lib/droonga/handler_plugin.rb +10 -12
- data/lib/droonga/input_adapter.rb +52 -0
- data/lib/droonga/{adapter.rb → input_adapter_plugin.rb} +7 -13
- data/lib/droonga/input_message.rb +11 -11
- data/lib/droonga/logger.rb +4 -3
- data/lib/droonga/message_pack_packer.rb +62 -0
- data/lib/droonga/message_processing_error.rb +54 -0
- data/lib/droonga/message_pusher.rb +60 -0
- data/lib/droonga/message_receiver.rb +61 -0
- data/lib/droonga/output_adapter.rb +53 -0
- data/lib/droonga/{adapter_plugin.rb → output_adapter_plugin.rb} +3 -21
- data/lib/droonga/output_message.rb +37 -0
- data/lib/droonga/partition.rb +27 -5
- data/lib/droonga/pluggable.rb +9 -4
- data/lib/droonga/plugin.rb +12 -3
- data/lib/droonga/plugin/collector/basic.rb +91 -18
- data/lib/droonga/plugin/distributor/crud.rb +9 -9
- data/lib/droonga/plugin/distributor/distributed_search_planner.rb +401 -0
- data/lib/droonga/plugin/distributor/groonga.rb +5 -5
- data/lib/droonga/plugin/distributor/search.rb +4 -246
- data/lib/droonga/plugin/distributor/watch.rb +11 -6
- data/lib/droonga/plugin/handler/add.rb +69 -7
- data/lib/droonga/plugin/handler/groonga.rb +6 -6
- data/lib/droonga/plugin/handler/search.rb +5 -3
- data/lib/droonga/plugin/handler/watch.rb +19 -13
- data/lib/droonga/plugin/{adapter → input_adapter}/groonga.rb +5 -11
- data/lib/droonga/plugin/{adapter → input_adapter}/groonga/select.rb +2 -36
- data/lib/droonga/plugin/output_adapter/groonga.rb +30 -0
- data/lib/droonga/plugin/output_adapter/groonga/select.rb +54 -0
- data/lib/droonga/plugin_loader.rb +2 -2
- data/lib/droonga/processor.rb +21 -23
- data/lib/droonga/replier.rb +40 -0
- data/lib/droonga/searcher.rb +298 -174
- data/lib/droonga/server.rb +0 -67
- data/lib/droonga/session.rb +85 -0
- data/lib/droonga/test.rb +21 -0
- data/lib/droonga/test/stub_distributor.rb +31 -0
- data/lib/droonga/test/stub_handler.rb +37 -0
- data/lib/droonga/test/stub_handler_message.rb +35 -0
- data/lib/droonga/test/stub_handler_messenger.rb +34 -0
- data/lib/droonga/time_formatter.rb +37 -0
- data/lib/droonga/watcher.rb +1 -0
- data/lib/droonga/worker.rb +16 -19
- data/lib/fluent/plugin/out_droonga.rb +9 -9
- data/lib/groonga_command_converter.rb +5 -5
- data/sample/cluster/catalog.json +1 -1
- data/test/command/config/default/catalog.json +19 -1
- data/test/command/fixture/event.jsons +41 -0
- data/test/command/fixture/user-table.jsons +9 -0
- data/test/command/run-test.rb +2 -2
- data/test/command/suite/add/error/invalid-integer.expected +20 -0
- data/test/command/suite/add/error/invalid-integer.test +12 -0
- data/test/command/suite/add/error/invalid-time.expected +20 -0
- data/test/command/suite/add/error/invalid-time.test +12 -0
- data/test/command/suite/add/error/missing-key.expected +13 -0
- data/test/command/suite/add/error/missing-key.test +16 -0
- data/test/command/suite/add/error/missing-table.expected +13 -0
- data/test/command/suite/add/error/missing-table.test +16 -0
- data/test/command/suite/add/error/unknown-column.expected +20 -0
- data/test/command/suite/add/error/unknown-column.test +12 -0
- data/test/command/suite/add/error/unknown-table.expected +13 -0
- data/test/command/suite/add/error/unknown-table.test +17 -0
- data/test/command/suite/add/minimum.expected +1 -3
- data/test/command/suite/add/with-values.expected +1 -3
- data/test/command/suite/add/without-key.expected +1 -3
- data/test/command/suite/message/error/missing-dataset.expected +13 -0
- data/test/command/suite/message/error/missing-dataset.test +5 -0
- data/test/command/suite/message/error/unknown-command.expected +13 -0
- data/test/command/suite/message/error/unknown-command.test +6 -0
- data/test/command/suite/message/error/unknown-dataset.expected +13 -0
- data/test/command/suite/message/error/unknown-dataset.test +6 -0
- data/test/command/suite/search/{array-attribute-label.expected → attributes/array.expected} +0 -0
- data/test/command/suite/search/{array-attribute-label.test → attributes/array.test} +0 -0
- data/test/command/suite/search/{hash-attribute-label.expected → attributes/hash.expected} +0 -0
- data/test/command/suite/search/{hash-attribute-label.test → attributes/hash.test} +0 -0
- data/test/command/suite/search/{condition-nested.expected → condition/nested.expected} +0 -0
- data/test/command/suite/search/{condition-nested.test → condition/nested.test} +0 -0
- data/test/command/suite/search/{condition-query.expected → condition/query.expected} +0 -0
- data/test/command/suite/search/{condition-query.test → condition/query.test} +0 -0
- data/test/command/suite/search/{condition-script.expected → condition/script.expected} +0 -0
- data/test/command/suite/search/{condition-script.test → condition/script.test} +0 -0
- data/test/command/suite/search/error/cyclic-source.expected +18 -0
- data/test/command/suite/search/error/cyclic-source.test +12 -0
- data/test/command/suite/search/error/deeply-cyclic-source.expected +21 -0
- data/test/command/suite/search/error/deeply-cyclic-source.test +15 -0
- data/test/command/suite/search/error/missing-source-parameter.expected +17 -0
- data/test/command/suite/search/error/missing-source-parameter.test +11 -0
- data/test/command/suite/search/error/unknown-source.expected +18 -0
- data/test/command/suite/search/error/unknown-source.test +12 -0
- data/test/command/suite/search/{minimum.expected → group/count.expected} +2 -1
- data/test/command/suite/search/{minimum.test → group/count.test} +5 -3
- data/test/command/suite/search/group/limit.expected +19 -0
- data/test/command/suite/search/group/limit.test +20 -0
- data/test/command/suite/search/group/string.expected +36 -0
- data/test/command/suite/search/group/string.test +44 -0
- data/test/command/suite/search/{chained-queries.expected → multiple/chained.expected} +0 -0
- data/test/command/suite/search/{chained-queries.test → multiple/chained.test} +0 -0
- data/test/command/suite/search/{multiple-queries.expected → multiple/parallel.expected} +0 -0
- data/test/command/suite/search/{multiple-queries.test → multiple/parallel.test} +0 -0
- data/test/command/suite/search/{output-range.expected → range/only-output.expected} +0 -0
- data/test/command/suite/search/{output-range.test → range/only-output.test} +0 -0
- data/test/command/suite/search/{sort-range.expected → range/only-sort.expected} +0 -0
- data/test/command/suite/search/{sort-range.test → range/only-sort.test} +0 -0
- data/test/command/suite/search/{sort-and-output-range.expected → range/sort-and-output.expected} +0 -0
- data/test/command/suite/search/{sort-and-output-range.test → range/sort-and-output.test} +0 -0
- data/test/command/suite/search/range/too-large-output-offset.expected +16 -0
- data/test/command/suite/search/range/too-large-output-offset.test +25 -0
- data/test/command/suite/search/range/too-large-sort-offset.expected +16 -0
- data/test/command/suite/search/range/too-large-sort-offset.test +28 -0
- data/test/command/suite/search/response/records/value/time.expected +24 -0
- data/test/command/suite/search/response/records/value/time.test +24 -0
- data/test/command/suite/search/sort/default-offset-limit.expected +43 -0
- data/test/command/suite/search/sort/default-offset-limit.test +26 -0
- data/test/command/suite/search/{sort-with-invisible-column.expected → sort/invisible-column.expected} +0 -0
- data/test/command/suite/search/{sort-with-invisible-column.test → sort/invisible-column.test} +0 -0
- data/test/command/suite/watch/subscribe.expected +12 -0
- data/test/command/suite/watch/subscribe.test +9 -0
- data/test/command/suite/watch/unsubscribe.expected +12 -0
- data/test/command/suite/watch/unsubscribe.test +9 -0
- data/test/unit/{test_catalog.rb → catalog/test_version1.rb} +12 -4
- data/test/unit/fixtures/{catalog.json → catalog/version1.json} +0 -0
- data/test/unit/helper.rb +2 -0
- data/test/unit/plugin/collector/test_basic.rb +289 -33
- data/test/unit/plugin/distributor/test_search.rb +176 -861
- data/test/unit/plugin/distributor/test_search_planner.rb +1102 -0
- data/test/unit/plugin/handler/groonga/test_column_create.rb +17 -13
- data/test/unit/plugin/handler/groonga/test_table_create.rb +10 -10
- data/test/unit/plugin/handler/test_add.rb +74 -11
- data/test/unit/plugin/handler/test_groonga.rb +15 -1
- data/test/unit/plugin/handler/test_search.rb +33 -17
- data/test/unit/plugin/handler/test_watch.rb +43 -27
- data/test/unit/run-test.rb +2 -0
- data/test/unit/test_message_pack_packer.rb +51 -0
- data/test/unit/test_time_formatter.rb +29 -0
- metadata +208 -110
- data/lib/droonga/job_queue.rb +0 -87
- data/lib/droonga/job_queue_schema.rb +0 -65
- data/test/unit/test_adapter.rb +0 -51
- data/test/unit/test_job_queue_schema.rb +0 -45
@@ -15,9 +15,10 @@
|
|
15
15
|
|
16
16
|
class ColumnCreateTest < GroongaHandlerTest
|
17
17
|
def test_success
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
process(:table_create, {"name" => "Books"})
|
19
|
+
process(:column_create,
|
20
|
+
{"table" => "Books", "name" => "title", "type" => "ShortText"})
|
21
|
+
response = @messenger.values.last
|
21
22
|
assert_equal(
|
22
23
|
[[Droonga::GroongaHandler::Status::SUCCESS, NORMALIZED_START_TIME, NORMALIZED_ELAPSED_TIME], true],
|
23
24
|
[normalize_header(response.first), response.last]
|
@@ -25,8 +26,9 @@ class ColumnCreateTest < GroongaHandlerTest
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def test_name
|
28
|
-
|
29
|
-
|
29
|
+
process(:table_create, {"name" => "Books"})
|
30
|
+
process(:column_create,
|
31
|
+
{"table" => "Books", "name" => "title", "type" => "ShortText"})
|
30
32
|
assert_equal(<<-SCHEMA, dump)
|
31
33
|
table_create Books TABLE_HASH_KEY --key_type ShortText
|
32
34
|
column_create Books title COLUMN_SCALAR ShortText
|
@@ -34,8 +36,9 @@ column_create Books title COLUMN_SCALAR ShortText
|
|
34
36
|
end
|
35
37
|
|
36
38
|
def test_type
|
37
|
-
|
38
|
-
|
39
|
+
process(:table_create, {"name" => "Books"})
|
40
|
+
process(:column_create,
|
41
|
+
{"table" => "Books", "name" => "main_text", "type" => "LongText"})
|
39
42
|
assert_equal(<<-SCHEMA, dump)
|
40
43
|
table_create Books TABLE_HASH_KEY --key_type ShortText
|
41
44
|
column_create Books main_text COLUMN_SCALAR LongText
|
@@ -59,8 +62,8 @@ column_create Books main_text COLUMN_SCALAR LongText
|
|
59
62
|
"type" => "ShortText",
|
60
63
|
"flags" => data[:flags],
|
61
64
|
}
|
62
|
-
|
63
|
-
|
65
|
+
process(:table_create, {"name" => "Books"})
|
66
|
+
process(:column_create, request)
|
64
67
|
assert_equal(<<-EXPECTED, dump)
|
65
68
|
table_create Books TABLE_HASH_KEY --key_type ShortText
|
66
69
|
column_create Books title #{data[:flags]} ShortText
|
@@ -71,8 +74,9 @@ column_create Books title #{data[:flags]} ShortText
|
|
71
74
|
class IndexTest < self
|
72
75
|
def setup
|
73
76
|
super
|
74
|
-
|
75
|
-
|
77
|
+
process(:table_create, {"name" => "Books"})
|
78
|
+
process(:column_create,
|
79
|
+
{"table" => "Books", "name" => "title", "type" => "ShortText"})
|
76
80
|
end
|
77
81
|
|
78
82
|
def test_index_column_type
|
@@ -86,7 +90,7 @@ column_create Books title #{data[:flags]} ShortText
|
|
86
90
|
"source" => "title",
|
87
91
|
"flags" => data[:flags],
|
88
92
|
}
|
89
|
-
|
93
|
+
process(:column_create, request)
|
90
94
|
assert_equal(<<-EXPECTED, dump)
|
91
95
|
table_create Books TABLE_HASH_KEY --key_type ShortText
|
92
96
|
column_create Books title COLUMN_SCALAR ShortText
|
@@ -118,7 +122,7 @@ column_create Books entry_title #{data[:flags]} Books title
|
|
118
122
|
"source" => "title",
|
119
123
|
"flags" => flags,
|
120
124
|
}
|
121
|
-
|
125
|
+
process(:column_create, request)
|
122
126
|
assert_equal(<<-EXPECTED, dump)
|
123
127
|
table_create Books TABLE_HASH_KEY --key_type ShortText
|
124
128
|
column_create Books title COLUMN_SCALAR ShortText
|
@@ -15,8 +15,8 @@
|
|
15
15
|
|
16
16
|
class TableCreateTest < GroongaHandlerTest
|
17
17
|
def test_success
|
18
|
-
|
19
|
-
response = @
|
18
|
+
process(:table_create, {"name" => "Books"})
|
19
|
+
response = @messenger.values.last
|
20
20
|
assert_equal(
|
21
21
|
[[Droonga::GroongaHandler::Status::SUCCESS, NORMALIZED_START_TIME, NORMALIZED_ELAPSED_TIME], true],
|
22
22
|
[normalize_header(response.first), response.last]
|
@@ -24,8 +24,8 @@ class TableCreateTest < GroongaHandlerTest
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_failure
|
27
|
-
|
28
|
-
response = @
|
27
|
+
process(:table_create, {})
|
28
|
+
response = @messenger.values.last
|
29
29
|
assert_equal(
|
30
30
|
[[Droonga::GroongaHandler::Status::INVALID_ARGUMENT, NORMALIZED_START_TIME, NORMALIZED_ELAPSED_TIME], false],
|
31
31
|
[normalize_header(response.first), response.last]
|
@@ -33,7 +33,7 @@ class TableCreateTest < GroongaHandlerTest
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_name
|
36
|
-
|
36
|
+
process(:table_create, {"name" => "Books"})
|
37
37
|
assert_equal(<<-SCHEMA, dump)
|
38
38
|
table_create Books TABLE_HASH_KEY --key_type ShortText
|
39
39
|
SCHEMA
|
@@ -83,7 +83,7 @@ table_create Books TABLE_NO_KEY
|
|
83
83
|
"name" => "Books",
|
84
84
|
"flags" => data[:flags],
|
85
85
|
}
|
86
|
-
|
86
|
+
process(:table_create, request)
|
87
87
|
assert_equal(data[:schema], dump)
|
88
88
|
end
|
89
89
|
end
|
@@ -94,7 +94,7 @@ table_create Books TABLE_NO_KEY
|
|
94
94
|
"name" => "Books",
|
95
95
|
"key_type" => "Int32",
|
96
96
|
}
|
97
|
-
|
97
|
+
process(:table_create, request)
|
98
98
|
assert_equal(<<-SCHEMA, dump)
|
99
99
|
table_create Books TABLE_HASH_KEY --key_type Int32
|
100
100
|
SCHEMA
|
@@ -107,7 +107,7 @@ table_create Books TABLE_HASH_KEY --key_type Int32
|
|
107
107
|
"name" => "Books",
|
108
108
|
"value_type" => "Int32",
|
109
109
|
}
|
110
|
-
|
110
|
+
process(:table_create, request)
|
111
111
|
assert_equal(<<-SCHEMA, dump)
|
112
112
|
table_create Books TABLE_HASH_KEY --key_type ShortText --value_type Int32
|
113
113
|
SCHEMA
|
@@ -120,7 +120,7 @@ table_create Books TABLE_HASH_KEY --key_type ShortText --value_type Int32
|
|
120
120
|
"name" => "Books",
|
121
121
|
"default_tokenizer" => "TokenBigram",
|
122
122
|
}
|
123
|
-
|
123
|
+
process(:table_create, request)
|
124
124
|
assert_equal(<<-SCHEMA, dump)
|
125
125
|
table_create Books TABLE_HASH_KEY --key_type ShortText --default_tokenizer TokenBigram
|
126
126
|
SCHEMA
|
@@ -133,7 +133,7 @@ table_create Books TABLE_HASH_KEY --key_type ShortText --default_tokenizer Token
|
|
133
133
|
"name" => "Books",
|
134
134
|
"normalizer" => "NormalizerAuto",
|
135
135
|
}
|
136
|
-
|
136
|
+
process(:table_create, request)
|
137
137
|
assert_equal(<<-SCHEMA, dump)
|
138
138
|
table_create Books TABLE_HASH_KEY|KEY_NORMALIZE --key_type ShortText
|
139
139
|
SCHEMA
|
@@ -16,6 +16,8 @@
|
|
16
16
|
require "droonga/plugin/handler/add"
|
17
17
|
|
18
18
|
class AddHandlerTest < Test::Unit::TestCase
|
19
|
+
SUCCESS_RESPONSE_BODY = true
|
20
|
+
|
19
21
|
def setup
|
20
22
|
setup_database
|
21
23
|
setup_schema
|
@@ -34,12 +36,18 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
34
36
|
def setup_handler
|
35
37
|
@worker = StubWorker.new
|
36
38
|
@handler = Droonga::AddHandler.new(@worker)
|
39
|
+
@messenger = Droonga::Test::StubHandlerMessenger.new
|
37
40
|
end
|
38
41
|
|
39
42
|
def teardown_handler
|
40
43
|
@handler = nil
|
41
44
|
end
|
42
45
|
|
46
|
+
def process(request)
|
47
|
+
message = Droonga::Test::StubHandlerMessage.new(request)
|
48
|
+
@handler.add(message, @messenger)
|
49
|
+
end
|
50
|
+
|
43
51
|
public
|
44
52
|
class HasKeyTest < self
|
45
53
|
def setup_schema
|
@@ -48,6 +56,8 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
48
56
|
:type => :hash,
|
49
57
|
:key_type => :short_text) do |table|
|
50
58
|
table.short_text("country")
|
59
|
+
table.int32("age")
|
60
|
+
table.time("birthday")
|
51
61
|
end
|
52
62
|
end
|
53
63
|
end
|
@@ -58,8 +68,8 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
58
68
|
"key" => "mori",
|
59
69
|
"values" => {},
|
60
70
|
}
|
61
|
-
|
62
|
-
@
|
71
|
+
process(request)
|
72
|
+
assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
|
63
73
|
table = @worker.context["Users"]
|
64
74
|
assert_equal(["mori"], table.collect(&:key))
|
65
75
|
end
|
@@ -67,14 +77,57 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
67
77
|
def test_values
|
68
78
|
request = {
|
69
79
|
"table" => "Users",
|
70
|
-
"key" => "
|
80
|
+
"key" => "mori",
|
71
81
|
"values" => {"country" => "japan"},
|
72
82
|
}
|
73
|
-
|
74
|
-
@
|
83
|
+
process(request)
|
84
|
+
assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
|
75
85
|
table = @worker.context["Users"]
|
76
86
|
assert_equal(["japan"], table.collect(&:country))
|
77
87
|
end
|
88
|
+
|
89
|
+
def test_missing_key_parameter
|
90
|
+
request = {
|
91
|
+
"table" => "Users",
|
92
|
+
"values" => {"country" => "japan"},
|
93
|
+
}
|
94
|
+
assert_raise(Droonga::AddHandler::MissingPrimaryKeyParameter) do
|
95
|
+
process(request)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_invalid_integer_value
|
100
|
+
request = {
|
101
|
+
"table" => "Users",
|
102
|
+
"key" => "mori",
|
103
|
+
"values" => {"age" => "secret"},
|
104
|
+
}
|
105
|
+
assert_raise(Droonga::AddHandler::InvalidValue) do
|
106
|
+
process(request)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_invalid_time_value
|
111
|
+
request = {
|
112
|
+
"table" => "Users",
|
113
|
+
"key" => "mori",
|
114
|
+
"values" => {"birthday" => "today"},
|
115
|
+
}
|
116
|
+
assert_raise(Droonga::AddHandler::InvalidValue) do
|
117
|
+
process(request)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_unknown_column
|
122
|
+
request = {
|
123
|
+
"table" => "Users",
|
124
|
+
"key" => "mori",
|
125
|
+
"values" => {"unknown" => "unknown"},
|
126
|
+
}
|
127
|
+
assert_raise(Droonga::AddHandler::UnknownColumn) do
|
128
|
+
process(request)
|
129
|
+
end
|
130
|
+
end
|
78
131
|
end
|
79
132
|
|
80
133
|
class NoKeyTest < self
|
@@ -92,8 +145,8 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
92
145
|
"table" => "Books",
|
93
146
|
"values" => {},
|
94
147
|
}
|
95
|
-
|
96
|
-
@
|
148
|
+
process(request)
|
149
|
+
assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
|
97
150
|
table = @worker.context["Books"]
|
98
151
|
assert_equal([nil], table.collect(&:title))
|
99
152
|
end
|
@@ -103,21 +156,31 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
103
156
|
"table" => "Books",
|
104
157
|
"values" => {"title" => "CSS"},
|
105
158
|
}
|
106
|
-
|
107
|
-
@
|
159
|
+
process(request)
|
160
|
+
assert_equal([SUCCESS_RESPONSE_BODY], @messenger.values)
|
108
161
|
table = @worker.context["Books"]
|
109
162
|
assert_equal(["CSS"], table.collect(&:title))
|
110
163
|
end
|
111
164
|
end
|
112
165
|
|
113
166
|
class FailureTest < self
|
167
|
+
def test_missing_table_parameter
|
168
|
+
request = {
|
169
|
+
"values" => {},
|
170
|
+
}
|
171
|
+
assert_raise(Droonga::AddHandler::MissingTableParameter) do
|
172
|
+
process(request)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
114
176
|
def test_nonexistent_table
|
115
177
|
request = {
|
116
178
|
"table" => "Nonexistent",
|
117
179
|
"values" => {},
|
118
180
|
}
|
119
|
-
|
120
|
-
|
181
|
+
assert_raise(Droonga::AddHandler::UnknownTable) do
|
182
|
+
process(request)
|
183
|
+
end
|
121
184
|
end
|
122
185
|
end
|
123
186
|
end
|
@@ -20,7 +20,7 @@ class GroongaHandlerTest < Test::Unit::TestCase
|
|
20
20
|
|
21
21
|
def setup
|
22
22
|
setup_database
|
23
|
-
setup_plugin
|
23
|
+
setup_plugin
|
24
24
|
end
|
25
25
|
|
26
26
|
def teardown
|
@@ -29,11 +29,25 @@ class GroongaHandlerTest < Test::Unit::TestCase
|
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
|
+
def setup_plugin
|
33
|
+
@handler = Droonga::Test::StubHandler.new
|
34
|
+
@plugin = Droonga::GroongaHandler.new(@handler)
|
35
|
+
@messenger = Droonga::Test::StubHandlerMessenger.new
|
36
|
+
end
|
37
|
+
|
38
|
+
def teardown_plugin
|
39
|
+
end
|
40
|
+
|
32
41
|
def dump
|
33
42
|
database_dumper = Groonga::DatabaseDumper.new(:database => @database)
|
34
43
|
database_dumper.dump
|
35
44
|
end
|
36
45
|
|
46
|
+
def process(command, request)
|
47
|
+
message = Droonga::Test::StubHandlerMessage.new(request)
|
48
|
+
@plugin.send(command, message, @messenger)
|
49
|
+
end
|
50
|
+
|
37
51
|
NORMALIZED_START_TIME = Time.parse("2013-07-11T16:04:28+0900").to_i
|
38
52
|
NORMALIZED_ELAPSED_TIME = 1
|
39
53
|
def normalize_header(header)
|
@@ -16,10 +16,10 @@
|
|
16
16
|
require "droonga/plugin/handler/search"
|
17
17
|
|
18
18
|
class SearchHandlerTest < Test::Unit::TestCase
|
19
|
-
include PluginHelper
|
20
|
-
|
21
19
|
def setup
|
22
20
|
setup_database
|
21
|
+
setup_data
|
22
|
+
setup_plugin
|
23
23
|
end
|
24
24
|
|
25
25
|
def teardown
|
@@ -27,16 +27,27 @@ class SearchHandlerTest < Test::Unit::TestCase
|
|
27
27
|
teardown_database
|
28
28
|
end
|
29
29
|
|
30
|
+
def setup_plugin
|
31
|
+
@handler = Droonga::Test::StubHandler.new
|
32
|
+
@plugin = Droonga::SearchHandler.new(@handler)
|
33
|
+
@messenger = Droonga::Test::StubHandlerMessenger.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def teardown_plugin
|
37
|
+
@handler = nil
|
38
|
+
@plugin = nil
|
39
|
+
end
|
40
|
+
|
30
41
|
private
|
31
|
-
def search(request)
|
32
|
-
|
33
|
-
|
42
|
+
def search(request, headers={})
|
43
|
+
message = Droonga::Test::StubHandlerMessage.new(request, headers)
|
44
|
+
@plugin.search(message, @messenger)
|
45
|
+
results_to_result_set(@messenger.values.first)
|
34
46
|
end
|
35
47
|
|
36
48
|
def results_to_result_set(results)
|
37
49
|
result_set = {}
|
38
|
-
results.each do |
|
39
|
-
result, name = result_and_name
|
50
|
+
results.each do |name, result|
|
40
51
|
result_set[name] = normalize_result(result)
|
41
52
|
end
|
42
53
|
result_set
|
@@ -61,10 +72,8 @@ class SearchHandlerTest < Test::Unit::TestCase
|
|
61
72
|
end
|
62
73
|
|
63
74
|
class GeneralTest < self
|
64
|
-
def
|
65
|
-
super
|
75
|
+
def setup_data
|
66
76
|
restore(fixture_data("document.grn"))
|
67
|
-
setup_plugin(Droonga::SearchHandler)
|
68
77
|
end
|
69
78
|
|
70
79
|
class NoParameterTest < self
|
@@ -133,7 +142,7 @@ class SearchHandlerTest < Test::Unit::TestCase
|
|
133
142
|
|
134
143
|
class SourceTest < self
|
135
144
|
def test_non_existent
|
136
|
-
assert_raise(Droonga::Searcher::
|
145
|
+
assert_raise(Droonga::Searcher::UnknownSource) do
|
137
146
|
search({
|
138
147
|
"queries" => {
|
139
148
|
"non-existent-result" => {
|
@@ -157,6 +166,17 @@ class SearchHandlerTest < Test::Unit::TestCase
|
|
157
166
|
},
|
158
167
|
})
|
159
168
|
end
|
169
|
+
|
170
|
+
def test_no_source
|
171
|
+
assert_raise(Droonga::Searcher::MissingSourceParameter) do
|
172
|
+
search({
|
173
|
+
"queries" => {
|
174
|
+
"no-source-result" => {
|
175
|
+
},
|
176
|
+
},
|
177
|
+
})
|
178
|
+
end
|
179
|
+
end
|
160
180
|
end
|
161
181
|
|
162
182
|
class OutputTest < self
|
@@ -509,10 +529,8 @@ class SearchHandlerTest < Test::Unit::TestCase
|
|
509
529
|
|
510
530
|
class ReferenceTest < self
|
511
531
|
class Hash
|
512
|
-
def
|
513
|
-
super
|
532
|
+
def setup_data
|
514
533
|
restore(fixture_data("reference/hash.grn"))
|
515
|
-
setup_plugin(Droonga::SearchHandler)
|
516
534
|
end
|
517
535
|
|
518
536
|
def test_reference_to_hash
|
@@ -554,10 +572,8 @@ class SearchHandlerTest < Test::Unit::TestCase
|
|
554
572
|
end
|
555
573
|
|
556
574
|
class Array
|
557
|
-
def
|
558
|
-
super
|
575
|
+
def setup_data
|
559
576
|
restore(fixture_data("reference/array.grn"))
|
560
|
-
setup_plugin(Droonga::SearchHandler)
|
561
577
|
end
|
562
578
|
|
563
579
|
def test_reference_to_array
|
@@ -23,22 +23,28 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
23
23
|
def setup
|
24
24
|
setup_database
|
25
25
|
setup_schema
|
26
|
-
|
26
|
+
setup_plugin
|
27
27
|
end
|
28
28
|
|
29
29
|
def teardown
|
30
|
-
|
30
|
+
teardown_plugin
|
31
31
|
teardown_database
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
35
|
-
def
|
36
|
-
@
|
37
|
-
@
|
35
|
+
def setup_plugin
|
36
|
+
@handler = Droonga::Test::StubHandler.new
|
37
|
+
@plugin = Droonga::WatchHandler.new(@handler)
|
38
|
+
@messenger = Droonga::Test::StubHandlerMessenger.new
|
38
39
|
end
|
39
40
|
|
40
|
-
def
|
41
|
-
@
|
41
|
+
def teardown_plugin
|
42
|
+
@plugin = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def process(command, request, headers={})
|
46
|
+
message = Droonga::Test::StubHandlerMessage.new(request, headers)
|
47
|
+
@plugin.send(command, message, @messenger)
|
42
48
|
end
|
43
49
|
|
44
50
|
public
|
@@ -49,8 +55,8 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
49
55
|
"condition" => "たいやき",
|
50
56
|
"subscriber" => "localhost"
|
51
57
|
}
|
52
|
-
|
53
|
-
@
|
58
|
+
process(:subscribe, request)
|
59
|
+
assert_equal([[true]], @messenger.values)
|
54
60
|
|
55
61
|
assert_equal(
|
56
62
|
["localhost:23003/output"],
|
@@ -63,9 +69,8 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
63
69
|
"condition" => "たいやき",
|
64
70
|
"subscriber" => "localhost"
|
65
71
|
}
|
66
|
-
|
67
|
-
|
68
|
-
@handler.subscribe(request)
|
72
|
+
process(:subscribe, request, "from" => "localhost:23004/output")
|
73
|
+
assert_equal([[true]], @messenger.values)
|
69
74
|
|
70
75
|
assert_equal(
|
71
76
|
["localhost:23004/output"],
|
@@ -79,9 +84,8 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
79
84
|
"subscriber" => "localhost",
|
80
85
|
"route" => "localhost:23003/output"
|
81
86
|
}
|
82
|
-
|
83
|
-
|
84
|
-
@handler.subscribe(request)
|
87
|
+
process(:subscribe, request, "from" => "localhost:23004/output")
|
88
|
+
assert_equal([[true]], @messenger.values)
|
85
89
|
|
86
90
|
assert_equal(
|
87
91
|
["localhost:23003/output"],
|
@@ -91,7 +95,7 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
91
95
|
|
92
96
|
private
|
93
97
|
def actual_routes_for_query(query)
|
94
|
-
@
|
98
|
+
@handler.context["Subscriber"].select {|record|
|
95
99
|
record[:subscriptions] =~ query.to_json
|
96
100
|
}.map {|subscriber|
|
97
101
|
subscriber.route.key
|
@@ -111,8 +115,8 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
111
115
|
"condition" => "たいやき",
|
112
116
|
"subscriber" => "localhost"
|
113
117
|
}
|
114
|
-
|
115
|
-
@
|
118
|
+
process(:unsubscribe, request)
|
119
|
+
assert_equal([[true]], @messenger.values)
|
116
120
|
end
|
117
121
|
|
118
122
|
private
|
@@ -122,8 +126,9 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
122
126
|
"condition" => "たいやき",
|
123
127
|
"subscriber" => "localhost"
|
124
128
|
}
|
125
|
-
|
126
|
-
@
|
129
|
+
process(:subscribe, request)
|
130
|
+
assert_equal([[true]], @messenger.values)
|
131
|
+
@messenger.values.clear
|
127
132
|
end
|
128
133
|
end
|
129
134
|
|
@@ -139,9 +144,20 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
139
144
|
"text" => "たいやきおいしいです"
|
140
145
|
}
|
141
146
|
}
|
142
|
-
|
143
|
-
assert_equal(
|
144
|
-
|
147
|
+
process(:feed, request)
|
148
|
+
assert_equal([
|
149
|
+
[
|
150
|
+
{
|
151
|
+
"body" => request,
|
152
|
+
"to" => ["localhost"],
|
153
|
+
},
|
154
|
+
{
|
155
|
+
"to" => "localhost:23003/output",
|
156
|
+
"type" => "watch.notification",
|
157
|
+
},
|
158
|
+
],
|
159
|
+
],
|
160
|
+
@messenger.messages)
|
145
161
|
end
|
146
162
|
|
147
163
|
def test_feed_not_match
|
@@ -150,8 +166,8 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
150
166
|
"text" => "たこやきおいしいです"
|
151
167
|
}
|
152
168
|
}
|
153
|
-
|
154
|
-
|
169
|
+
process(:feed, request)
|
170
|
+
assert_equal([], @messenger.messages)
|
155
171
|
end
|
156
172
|
|
157
173
|
private
|
@@ -161,8 +177,8 @@ class WatchHandlerTest < Test::Unit::TestCase
|
|
161
177
|
"condition" => "たいやき",
|
162
178
|
"subscriber" => "localhost"
|
163
179
|
}
|
164
|
-
|
165
|
-
@
|
180
|
+
process(:subscribe, request)
|
181
|
+
assert_equal([[true]], @messenger.values)
|
166
182
|
end
|
167
183
|
end
|
168
184
|
end
|