fluent-plugin-droonga 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|