fluent-plugin-droonga 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +7 -0
  4. data/benchmark/watch/benchmark-notify.rb +6 -6
  5. data/benchmark/watch/benchmark-notify.sh +3 -2
  6. data/bin/grn2jsons +0 -3
  7. data/doc/text/news.md +13 -0
  8. data/fluent-plugin-droonga.gemspec +1 -1
  9. data/lib/droonga/catalog/base.rb +8 -3
  10. data/lib/droonga/catalog.rb +1 -16
  11. data/lib/droonga/catalog_observer.rb +57 -0
  12. data/lib/droonga/collector.rb +1 -1
  13. data/lib/droonga/dispatcher.rb +3 -1
  14. data/lib/droonga/distributor_plugin.rb +47 -19
  15. data/lib/droonga/handler_messenger.rb +26 -2
  16. data/lib/droonga/message_processing_error.rb +6 -8
  17. data/lib/droonga/output_message.rb +17 -1
  18. data/lib/droonga/plugin/collector/basic.rb +44 -81
  19. data/lib/droonga/plugin/collector/groonga.rb +83 -0
  20. data/lib/droonga/plugin/collector/search.rb +104 -0
  21. data/lib/droonga/plugin/distributor/crud.rb +41 -0
  22. data/lib/droonga/plugin/distributor/distributed_search_planner.rb +4 -4
  23. data/lib/droonga/plugin/distributor/groonga.rb +38 -0
  24. data/lib/droonga/plugin/handler/add.rb +4 -1
  25. data/lib/droonga/plugin/handler/groonga/column_create.rb +7 -0
  26. data/lib/droonga/plugin/handler/groonga/table_remove.rb +42 -0
  27. data/lib/droonga/plugin/handler/groonga.rb +17 -2
  28. data/lib/droonga/plugin/handler/watch.rb +4 -4
  29. data/lib/droonga/plugin/input_adapter/crud.rb +27 -0
  30. data/lib/droonga/plugin/input_adapter/groonga.rb +16 -1
  31. data/lib/droonga/plugin/output_adapter/crud.rb +51 -0
  32. data/lib/droonga/plugin/output_adapter/groonga.rb +8 -1
  33. data/lib/droonga/plugin.rb +1 -1
  34. data/lib/droonga/replier.rb +7 -1
  35. data/lib/droonga/searcher.rb +168 -74
  36. data/lib/droonga/session.rb +1 -1
  37. data/lib/groonga_command_converter.rb +7 -1
  38. data/test/command/config/default/catalog.json +1 -1
  39. data/test/command/suite/add/error/invalid-integer.expected +31 -1
  40. data/test/command/suite/add/error/invalid-time.expected +31 -1
  41. data/test/command/suite/add/error/missing-key.expected +17 -1
  42. data/test/command/suite/add/error/missing-table.expected +17 -1
  43. data/test/command/suite/add/error/unknown-column.expected +31 -1
  44. data/test/command/suite/add/error/unknown-table.expected +17 -1
  45. data/test/command/suite/add/minimum.expected +1 -1
  46. data/test/command/suite/add/with-values.expected +1 -1
  47. data/test/command/suite/add/without-key.expected +1 -1
  48. data/test/command/suite/groonga/column_create/scalar.expected +2 -2
  49. data/test/command/suite/groonga/column_create/unknown-table.expected +18 -0
  50. data/test/command/suite/groonga/column_create/unknown-table.test +7 -0
  51. data/test/command/suite/groonga/column_create/vector.expected +2 -2
  52. data/test/command/suite/groonga/select/minimum.expected +1 -1
  53. data/test/command/suite/groonga/table_create/array.expected +1 -1
  54. data/test/command/suite/groonga/table_create/hash.expected +1 -1
  55. data/test/command/suite/groonga/table_remove/success.expected +17 -0
  56. data/test/command/suite/groonga/table_remove/success.test +8 -0
  57. data/test/command/suite/groonga/table_remove/unknown-table.expected +18 -0
  58. data/test/command/suite/groonga/table_remove/unknown-table.test +7 -0
  59. data/test/command/suite/message/error/missing-dataset.expected +1 -1
  60. data/test/command/suite/message/error/unknown-command.expected +1 -1
  61. data/test/command/suite/message/error/unknown-dataset.expected +1 -1
  62. data/test/command/suite/search/attributes/array.expected +1 -1
  63. data/test/command/suite/search/attributes/hash.expected +1 -1
  64. data/test/command/suite/search/complex.expected +1 -1
  65. data/test/command/suite/search/condition/nested.expected +1 -1
  66. data/test/command/suite/search/condition/query.expected +1 -1
  67. data/test/command/suite/search/condition/script.expected +1 -1
  68. data/test/command/suite/search/error/cyclic-source.expected +1 -1
  69. data/test/command/suite/search/error/deeply-cyclic-source.expected +1 -1
  70. data/test/command/suite/search/error/missing-source-parameter.expected +1 -1
  71. data/test/command/suite/search/error/unknown-source.expected +1 -1
  72. data/test/command/suite/search/group/count.expected +1 -1
  73. data/test/command/suite/search/group/limit.expected +1 -1
  74. data/test/command/suite/search/group/string.expected +1 -1
  75. data/test/command/suite/search/multiple/chained.expected +1 -1
  76. data/test/command/suite/search/multiple/parallel.expected +1 -1
  77. data/test/command/suite/search/range/only-output.expected +1 -1
  78. data/test/command/suite/search/range/only-sort.expected +1 -1
  79. data/test/command/suite/search/range/sort-and-output.expected +1 -1
  80. data/test/command/suite/search/range/too-large-output-offset.expected +1 -1
  81. data/test/command/suite/search/range/too-large-sort-offset.expected +1 -1
  82. data/test/command/suite/search/response/records/value/time.expected +1 -1
  83. data/test/command/suite/search/simple.expected +1 -1
  84. data/test/command/suite/search/sort/default-offset-limit.expected +1 -1
  85. data/test/command/suite/search/sort/invisible-column.expected +1 -1
  86. data/test/command/suite/watch/subscribe.expected +1 -1
  87. data/test/command/suite/watch/unsubscribe.expected +1 -1
  88. data/test/performance/run-test.rb +56 -0
  89. data/{benchmark → test/performance}/watch/catalog.json +0 -0
  90. data/test/performance/watch/feed.json +9 -0
  91. data/{benchmark → test/performance}/watch/fluentd.conf +0 -0
  92. data/test/performance/watch/subscribe.json +3 -0
  93. data/test/unit/catalog/test_version1.rb +34 -0
  94. data/test/unit/plugin/collector/test_basic.rb +300 -479
  95. data/test/unit/plugin/collector/test_search.rb +814 -0
  96. data/test/unit/plugin/distributor/test_search.rb +4 -4
  97. data/test/unit/plugin/distributor/test_search_planner.rb +260 -260
  98. data/test/unit/plugin/handler/groonga/test_column_create.rb +15 -1
  99. data/test/unit/plugin/handler/groonga/test_table_create.rb +6 -2
  100. data/test/unit/plugin/handler/groonga/test_table_remove.rb +58 -0
  101. data/test/unit/plugin/handler/test_add.rb +3 -1
  102. data/test/unit/plugin/handler/test_groonga.rb +24 -0
  103. data/test/unit/plugin/handler/test_search.rb +294 -0
  104. data/test/unit/plugin/handler/test_watch.rb +1 -1
  105. data/test/unit/plugin/{adapter → input_adapter}/groonga/test_select.rb +5 -37
  106. data/test/unit/plugin/output_adapter/groonga/test_select.rb +55 -0
  107. metadata +38 -6
@@ -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
@@ -68,250 +68,6 @@ class BasicCollectorTest < Test::Unit::TestCase
68
68
  "output" => "search_result",
69
69
  },
70
70
  },
71
- :offset_and_limit => {
72
- :expected => {
73
- "count" => 3,
74
- "records" => [
75
- create_record(1),
76
- ],
77
- },
78
- :source => {
79
- "count" => 3,
80
- "records" => [
81
- create_record(0),
82
- create_record(1),
83
- create_record(2),
84
- ],
85
- },
86
- :mapping => {
87
- "output" => "search_result",
88
- "elements" => {
89
- "records" => {
90
- "type" => "sort",
91
- "offset" => 1,
92
- "limit" => 1,
93
- },
94
- },
95
- },
96
- },
97
- :offset_and_unlimited_limit => {
98
- :expected => {
99
- "count" => 3,
100
- "records" => [
101
- create_record(1),
102
- create_record(2),
103
- ],
104
- },
105
- :source => {
106
- "count" => 3,
107
- "records" => [
108
- create_record(0),
109
- create_record(1),
110
- create_record(2),
111
- ],
112
- },
113
- :mapping => {
114
- "output" => "search_result",
115
- "elements" => {
116
- "records" => {
117
- "type" => "sort",
118
- "offset" => 1,
119
- "limit" => -1,
120
- },
121
- },
122
- },
123
- },
124
- :too_large_offset => {
125
- :expected => {
126
- "count" => 2,
127
- "records" => [
128
- ],
129
- },
130
- :source => {
131
- "count" => 2,
132
- "records" => [
133
- create_record(1, 1.1, 1.2),
134
- create_record(2, 2.1, 2.2),
135
- ],
136
- },
137
- :mapping => {
138
- "output" => "search_result",
139
- "elements" => {
140
- "records" => {
141
- "type" => "sort",
142
- "format" => "simple",
143
- "attributes" => [],
144
- "offset" => 10000,
145
- "limit" => -1,
146
- },
147
- },
148
- },
149
- },
150
- :attributes => {
151
- :expected => {
152
- "count" => 2,
153
- "records" => [
154
- create_record(1, 1.1, 1.2, 1.3, 1.4),
155
- create_record(2, 2.1, 2.2, 2.3, 2.4),
156
- ],
157
- },
158
- :source => {
159
- "count" => 2,
160
- "records" => [
161
- create_record(1, 1.1, 1.2, 1.3, 1.4),
162
- create_record(2, 2.1, 2.2, 2.3, 2.4),
163
- ],
164
- },
165
- :mapping => {
166
- "output" => "search_result",
167
- "elements" => {
168
- "records" => {
169
- "type" => "sort",
170
- "attributes" => ["_key", "chapter", "section", "subsection", "paragraph"],
171
- "limit" => -1,
172
- },
173
- },
174
- },
175
- },
176
- :attributes_with_sort_attributes => {
177
- :expected => {
178
- "count" => 2,
179
- "records" => [
180
- create_record(1, 1.1, 1.2),
181
- create_record(2, 2.1, 2.2),
182
- ],
183
- },
184
- :source => {
185
- "count" => 2,
186
- "records" => [
187
- create_record(1, 1.1, 1.2, 1.3, 1.4),
188
- create_record(2, 2.1, 2.2, 2.3, 2.4),
189
- ],
190
- },
191
- :mapping => {
192
- "output" => "search_result",
193
- "elements" => {
194
- "records" => {
195
- "type" => "sort",
196
- "attributes" => ["_key", "chapter", "section"],
197
- "limit" => -1,
198
- },
199
- },
200
- },
201
- },
202
- :format_simple => {
203
- :expected => {
204
- "count" => 2,
205
- "records" => [
206
- create_record(1, 1.1, 1.2),
207
- create_record(2, 2.1, 2.2),
208
- ],
209
- },
210
- :source => {
211
- "count" => 2,
212
- "records" => [
213
- create_record(1, 1.1, 1.2),
214
- create_record(2, 2.1, 2.2),
215
- ],
216
- },
217
- :mapping => {
218
- "output" => "search_result",
219
- "elements" => {
220
- "records" => {
221
- "type" => "sort",
222
- "format" => "simple",
223
- "attributes" => ["_key", "chapter", "section"],
224
- "limit" => -1,
225
- },
226
- },
227
- },
228
- },
229
- :format_complex => {
230
- :expected => {
231
- "count" => 2,
232
- "records" => [
233
- { "_key" => 1, "chapter" => 1.1, "section" => 1.2 },
234
- { "_key" => 2, "chapter" => 2.1, "section" => 2.2 },
235
- ],
236
- },
237
- :source => {
238
- "count" => 2,
239
- "records" => [
240
- create_record(1, 1.1, 1.2),
241
- create_record(2, 2.1, 2.2),
242
- ],
243
- },
244
- :mapping => {
245
- "output" => "search_result",
246
- "elements" => {
247
- "records" => {
248
- "type" => "sort",
249
- "format" => "complex",
250
- "attributes" => ["_key", "chapter", "section"],
251
- "limit" => -1,
252
- },
253
- },
254
- },
255
- },
256
- :count_with_records => {
257
- :expected => {
258
- "count" => 2,
259
- "records" => [
260
- [],
261
- [],
262
- ],
263
- },
264
- :source => {
265
- "count" => 5,
266
- "records" => [
267
- [],
268
- [],
269
- ],
270
- },
271
- :mapping => {
272
- "output" => "search_result",
273
- "elements" => {
274
- "count" => {
275
- "type" => "count",
276
- "target" => "records",
277
- },
278
- "records" => {
279
- "type" => "sort",
280
- "format" => "simple",
281
- "attributes" => [],
282
- "limit" => -1,
283
- },
284
- },
285
- },
286
- },
287
- :count_only => {
288
- :expected => {
289
- "count" => 2,
290
- },
291
- :source => {
292
- "count" => 5,
293
- "records" => [
294
- [],
295
- [],
296
- ],
297
- },
298
- :mapping => {
299
- "output" => "search_result",
300
- "elements" => {
301
- "count" => {
302
- "type" => "count",
303
- "target" => "records",
304
- },
305
- "records" => {
306
- "type" => "sort",
307
- "format" => "simple",
308
- "attributes" => [],
309
- "limit" => -1,
310
- "no_output" => true,
311
- },
312
- },
313
- },
314
- },
315
71
  )
316
72
  def test_gather(data)
317
73
  request = {
@@ -335,42 +91,31 @@ class BasicCollectorTest < Test::Unit::TestCase
335
91
  end
336
92
 
337
93
  class ReduceTest < self
338
- def test_sum
94
+ data(
95
+ :int => {
96
+ :expected => 1.5,
97
+ :value => 1,
98
+ :source => 2,
99
+ },
100
+ :float => {
101
+ :expected => 1.5,
102
+ :value => 1.0,
103
+ :source => 2.0,
104
+ },
105
+ )
106
+ def test_average(data)
339
107
  input_name = "input_#{Time.now.to_i}"
340
108
  output_name = "output_#{Time.now.to_i}"
341
109
  request = {
342
110
  "task" => {
343
111
  "values" => {
344
- output_name => {
345
- "numeric_value" => 1,
346
- "numeric_key_records" => [
347
- create_record(1),
348
- create_record(2),
349
- create_record(3),
350
- ],
351
- "string_key_records" => [
352
- create_record("a"),
353
- create_record("b"),
354
- create_record("c"),
355
- ],
356
- },
112
+ output_name => data[:value],
357
113
  },
358
114
  "component" => {
359
115
  "body" => {
360
116
  input_name => {
361
117
  output_name => {
362
- "numeric_value" => {
363
- "type" => "sum",
364
- "limit" => -1,
365
- },
366
- "numeric_key_records" => {
367
- "type" => "sum",
368
- "limit" => -1,
369
- },
370
- "string_key_records" => {
371
- "type" => "sum",
372
- "limit" => -1,
373
- },
118
+ "type" => "average",
374
119
  },
375
120
  },
376
121
  },
@@ -378,84 +123,53 @@ class BasicCollectorTest < Test::Unit::TestCase
378
123
  },
379
124
  },
380
125
  "id" => nil,
381
- "value" => {
382
- "numeric_value" => 2,
383
- "numeric_key_records" => [
384
- create_record(4),
385
- create_record(5),
386
- create_record(6),
387
- ],
388
- "string_key_records" => [
389
- create_record("d"),
390
- create_record("e"),
391
- create_record("f"),
392
- ],
393
- },
126
+ "value" => data[:source],
394
127
  "name" => input_name,
395
128
  "descendants" => nil,
396
129
  }
397
130
  @plugin.process("collector_reduce", request)
398
131
  assert_equal([
399
132
  output_name,
400
- {
401
- "numeric_value" => 3,
402
- "numeric_key_records" => [
403
- create_record(1),
404
- create_record(2),
405
- create_record(3),
406
- create_record(4),
407
- create_record(5),
408
- create_record(6),
409
- ],
410
- "string_key_records" => [
411
- create_record("a"),
412
- create_record("b"),
413
- create_record("c"),
414
- create_record("d"),
415
- create_record("e"),
416
- create_record("f"),
417
- ],
418
- },
133
+ data[:expected],
419
134
  ],
420
135
  @outputs.last)
421
136
  end
422
137
 
423
- def test_sum_with_limit
138
+ data(
139
+ :true_and_false => {
140
+ :expected => false,
141
+ :value => true,
142
+ :source => false,
143
+ },
144
+ :false_and_true => {
145
+ :expected => false,
146
+ :value => false,
147
+ :source => true,
148
+ },
149
+ :both_true => {
150
+ :expected => true,
151
+ :value => true,
152
+ :source => true,
153
+ },
154
+ :both_false => {
155
+ :expected => false,
156
+ :value => false,
157
+ :source => false,
158
+ },
159
+ )
160
+ def test_and(data)
424
161
  input_name = "input_#{Time.now.to_i}"
425
162
  output_name = "output_#{Time.now.to_i}"
426
163
  request = {
427
164
  "task" => {
428
165
  "values" => {
429
- output_name => {
430
- "numeric_value" => 1,
431
- "numeric_key_records" => [
432
- create_record(1),
433
- create_record(2),
434
- create_record(3),
435
- ],
436
- "string_key_records" => [
437
- create_record("a"),
438
- create_record("b"),
439
- create_record("c"),
440
- ],
441
- },
166
+ output_name => data[:value],
442
167
  },
443
168
  "component" => {
444
169
  "body" => {
445
170
  input_name => {
446
171
  output_name => {
447
- "numeric_value" => {
448
- "type" => "sum",
449
- "limit" => 2,
450
- },
451
- "numeric_key_records" => {
452
- "type" => "sum",
453
- "limit" => 2,
454
- },
455
- "string_key_records" => {
456
- "type" => "sum",
457
- "limit" => -1,
458
- },
172
+ "type" => "and",
459
173
  },
460
174
  },
461
175
  },
@@ -463,81 +177,79 @@ class BasicCollectorTest < Test::Unit::TestCase
463
177
  },
464
178
  },
465
179
  "id" => nil,
466
- "value" => {
467
- "numeric_value" => 2,
468
- "numeric_key_records" => [
469
- create_record(4),
470
- create_record(5),
471
- create_record(6),
472
- ],
473
- "string_key_records" => [
474
- create_record("d"),
475
- create_record("e"),
476
- create_record("f"),
477
- ],
478
- },
180
+ "value" => data[:source],
479
181
  "name" => input_name,
480
182
  "descendants" => nil,
481
183
  }
482
184
  @plugin.process("collector_reduce", request)
483
185
  assert_equal([
484
186
  output_name,
485
- {
486
- "numeric_value" => 3,
487
- "numeric_key_records" => [
488
- create_record(1),
489
- create_record(2),
490
- ],
491
- "string_key_records" => [
492
- create_record("a"),
493
- create_record("b"),
494
- create_record("c"),
495
- create_record("d"),
496
- create_record("e"),
497
- create_record("f"),
498
- ],
499
- },
187
+ data[:expected],
500
188
  ],
501
189
  @outputs.last)
502
190
  end
503
191
 
504
- def test_sort
192
+ data(
193
+ :numeric_values => {
194
+ :expected => 3,
195
+ :value => 1,
196
+ :source => 2,
197
+ },
198
+ :numeric_key_records => {
199
+ :expected => [
200
+ create_record(1),
201
+ create_record(2),
202
+ create_record(3),
203
+ create_record(4),
204
+ create_record(5),
205
+ create_record(6),
206
+ ],
207
+ :value => [
208
+ create_record(1),
209
+ create_record(2),
210
+ create_record(3),
211
+ ],
212
+ :source => [
213
+ create_record(4),
214
+ create_record(5),
215
+ create_record(6),
216
+ ],
217
+ },
218
+ :string_key_records => {
219
+ :expected => [
220
+ create_record("a"),
221
+ create_record("b"),
222
+ create_record("c"),
223
+ create_record("d"),
224
+ create_record("e"),
225
+ create_record("f"),
226
+ ],
227
+ :value => [
228
+ create_record("a"),
229
+ create_record("b"),
230
+ create_record("c"),
231
+ ],
232
+ :source => [
233
+ create_record("d"),
234
+ create_record("e"),
235
+ create_record("f"),
236
+ ],
237
+ },
238
+ )
239
+ def test_sum(data)
505
240
  input_name = "input_#{Time.now.to_i}"
506
241
  output_name = "output_#{Time.now.to_i}"
507
242
  request = {
508
243
  "task" => {
509
244
  "values" => {
510
- output_name => {
511
- "numeric_key_records" => [
512
- create_record(1),
513
- create_record(3),
514
- create_record(5),
515
- ],
516
- "string_key_records" => [
517
- create_record("a"),
518
- create_record("c"),
519
- create_record("e"),
520
- ],
521
- },
245
+ output_name => data[:value],
522
246
  },
523
247
  "component" => {
524
248
  "body" => {
525
249
  input_name => {
526
250
  output_name => {
527
- "numeric_key_records" => {
528
- "type" => "sort",
529
- "operators" => [
530
- { "column" => 0, "operator" => "<" },
531
- ],
532
- "limit" => -1,
533
- },
534
- "string_key_records" => {
535
- "type" => "sort",
536
- "operators" => [
537
- { "column" => 0, "operator" => "<" },
538
- ],
539
- "limit" => -1,
540
- },
251
+ "type" => "sum",
252
+ "limit" => -1,
541
253
  },
542
254
  },
543
255
  },
@@ -545,83 +257,152 @@ class BasicCollectorTest < Test::Unit::TestCase
545
257
  },
546
258
  },
547
259
  "id" => nil,
548
- "value" => {
549
- "numeric_key_records" => [
550
- create_record(2),
551
- create_record(4),
552
- create_record(6),
553
- ],
554
- "string_key_records" => [
555
- create_record("b"),
556
- create_record("d"),
557
- create_record("f"),
558
- ],
559
- },
260
+ "value" => data[:source],
560
261
  "name" => input_name,
561
262
  "descendants" => nil,
562
263
  }
563
264
  @plugin.process("collector_reduce", request)
564
265
  assert_equal([
565
266
  output_name,
566
- {
567
- "numeric_key_records" => [
568
- create_record(1),
569
- create_record(2),
570
- create_record(3),
571
- create_record(4),
572
- create_record(5),
573
- create_record(6),
574
- ],
575
- "string_key_records" => [
576
- create_record("a"),
577
- create_record("b"),
578
- create_record("c"),
579
- create_record("d"),
580
- create_record("e"),
581
- create_record("f"),
582
- ],
583
- },
267
+ data[:expected],
584
268
  ],
585
269
  @outputs.last)
586
270
  end
587
271
 
588
- def test_sort_with_limit
272
+ data(
273
+ :numeric_values => {
274
+ :expected => 3,
275
+ :value => 1,
276
+ :source => 2,
277
+ :limit => 2,
278
+ },
279
+ :numeric_key_records => {
280
+ :expected => [
281
+ create_record(1),
282
+ create_record(2),
283
+ ],
284
+ :value => [
285
+ create_record(1),
286
+ create_record(2),
287
+ create_record(3),
288
+ ],
289
+ :source => [
290
+ create_record(4),
291
+ create_record(5),
292
+ create_record(6),
293
+ ],
294
+ :limit => 2,
295
+ },
296
+ :string_key_records => {
297
+ :expected => [
298
+ create_record("a"),
299
+ create_record("b"),
300
+ ],
301
+ :value => [
302
+ create_record("a"),
303
+ create_record("b"),
304
+ create_record("c"),
305
+ ],
306
+ :source => [
307
+ create_record("d"),
308
+ create_record("e"),
309
+ create_record("f"),
310
+ ],
311
+ :limit => 2,
312
+ },
313
+ )
314
+ def test_sum_with_limit(data)
589
315
  input_name = "input_#{Time.now.to_i}"
590
316
  output_name = "output_#{Time.now.to_i}"
591
317
  request = {
592
318
  "task" => {
593
319
  "values" => {
594
- output_name => {
595
- "numeric_key_records" => [
596
- create_record(1),
597
- create_record(3),
598
- create_record(5),
599
- ],
600
- "string_key_records" => [
601
- create_record("a"),
602
- create_record("c"),
603
- create_record("e"),
604
- ],
320
+ output_name => data[:value],
321
+ },
322
+ "component" => {
323
+ "body" => {
324
+ input_name => {
325
+ output_name => {
326
+ "type" => "sum",
327
+ "limit" => data[:limit],
328
+ },
329
+ },
605
330
  },
331
+ "outputs" => nil,
332
+ },
333
+ },
334
+ "id" => nil,
335
+ "value" => data[:source],
336
+ "name" => input_name,
337
+ "descendants" => nil,
338
+ }
339
+ @plugin.process("collector_reduce", request)
340
+ assert_equal([
341
+ output_name,
342
+ data[:expected],
343
+ ],
344
+ @outputs.last)
345
+ end
346
+
347
+ data(
348
+ :numeric_key_records => {
349
+ :expected => [
350
+ create_record(1),
351
+ create_record(2),
352
+ create_record(3),
353
+ create_record(4),
354
+ create_record(5),
355
+ create_record(6),
356
+ ],
357
+ :value => [
358
+ create_record(1),
359
+ create_record(3),
360
+ create_record(5),
361
+ ],
362
+ :source => [
363
+ create_record(2),
364
+ create_record(4),
365
+ create_record(6),
366
+ ],
367
+ },
368
+ :string_key_records => {
369
+ :expected => [
370
+ create_record("a"),
371
+ create_record("b"),
372
+ create_record("c"),
373
+ create_record("d"),
374
+ create_record("e"),
375
+ create_record("f"),
376
+ ],
377
+ :value => [
378
+ create_record("a"),
379
+ create_record("c"),
380
+ create_record("e"),
381
+ ],
382
+ :source => [
383
+ create_record("b"),
384
+ create_record("d"),
385
+ create_record("f"),
386
+ ],
387
+ },
388
+ )
389
+ def test_sort(data)
390
+ input_name = "input_#{Time.now.to_i}"
391
+ output_name = "output_#{Time.now.to_i}"
392
+ request = {
393
+ "task" => {
394
+ "values" => {
395
+ output_name => data[:value],
606
396
  },
607
397
  "component" => {
608
398
  "body" => {
609
399
  input_name => {
610
400
  output_name => {
611
- "numeric_key_records" => {
612
- "type" => "sort",
613
- "operators" => [
614
- { "column" => 0, "operator" => "<" },
615
- ],
616
- "limit" => 2,
617
- },
618
- "string_key_records" => {
619
- "type" => "sort",
620
- "operators" => [
621
- { "column" => 0, "operator" => "<" },
622
- ],
623
- "limit" => -1,
624
- },
401
+ "type" => "sort",
402
+ "operators" => [
403
+ { "column" => 0, "operator" => "<" },
404
+ ],
405
+ "limit" => -1,
625
406
  },
626
407
  },
627
408
  },
@@ -629,38 +410,86 @@ class BasicCollectorTest < Test::Unit::TestCase
629
410
  },
630
411
  },
631
412
  "id" => nil,
632
- "value" => {
633
- "numeric_key_records" => [
634
- create_record(2),
635
- create_record(4),
636
- create_record(6),
637
- ],
638
- "string_key_records" => [
639
- create_record("b"),
640
- create_record("d"),
641
- create_record("f"),
642
- ],
413
+ "value" => data[:source],
414
+ "name" => input_name,
415
+ "descendants" => nil,
416
+ }
417
+ @plugin.process("collector_reduce", request)
418
+ assert_equal([
419
+ output_name,
420
+ data[:expected],
421
+ ],
422
+ @outputs.last)
423
+ end
424
+
425
+ data(
426
+ :numeric_key_records => {
427
+ :expected => [
428
+ create_record(1),
429
+ create_record(2),
430
+ ],
431
+ :value => [
432
+ create_record(1),
433
+ create_record(3),
434
+ create_record(5),
435
+ ],
436
+ :source => [
437
+ create_record(2),
438
+ create_record(4),
439
+ create_record(6),
440
+ ],
441
+ :limit => 2,
442
+ },
443
+ :string_key_records => {
444
+ :expected => [
445
+ create_record("a"),
446
+ create_record("b"),
447
+ ],
448
+ :value => [
449
+ create_record("a"),
450
+ create_record("c"),
451
+ create_record("e"),
452
+ ],
453
+ :source => [
454
+ create_record("b"),
455
+ create_record("d"),
456
+ create_record("f"),
457
+ ],
458
+ :limit => 2,
459
+ },
460
+ )
461
+ def test_sort_with_limit(data)
462
+ input_name = "input_#{Time.now.to_i}"
463
+ output_name = "output_#{Time.now.to_i}"
464
+ request = {
465
+ "task" => {
466
+ "values" => {
467
+ output_name => data[:value],
468
+ },
469
+ "component" => {
470
+ "body" => {
471
+ input_name => {
472
+ output_name => {
473
+ "type" => "sort",
474
+ "operators" => [
475
+ { "column" => 0, "operator" => "<" },
476
+ ],
477
+ "limit" => 2,
478
+ },
479
+ },
480
+ },
481
+ "outputs" => nil,
482
+ },
643
483
  },
484
+ "id" => nil,
485
+ "value" => data[:source],
644
486
  "name" => input_name,
645
487
  "descendants" => nil,
646
488
  }
647
489
  @plugin.process("collector_reduce", request)
648
490
  assert_equal([
649
491
  output_name,
650
- {
651
- "numeric_key_records" => [
652
- create_record(1),
653
- create_record(2),
654
- ],
655
- "string_key_records" => [
656
- create_record("a"),
657
- create_record("b"),
658
- create_record("c"),
659
- create_record("d"),
660
- create_record("e"),
661
- create_record("f"),
662
- ],
663
- },
492
+ data[:expected],
664
493
  ],
665
494
  @outputs.last)
666
495
  end
@@ -673,8 +502,7 @@ class BasicCollectorTest < Test::Unit::TestCase
673
502
  request = {
674
503
  "task" => {
675
504
  "values" => {
676
- output_name => {
677
- "records" => [
505
+ output_name => [
678
506
  [
679
507
  "group1",
680
508
  10,
@@ -702,21 +530,18 @@ class BasicCollectorTest < Test::Unit::TestCase
702
530
  create_record("C"),
703
531
  ],
704
532
  ],
705
- ],
706
- },
533
+ ],
707
534
  },
708
535
  "component" => {
709
536
  "body" => {
710
537
  input_name => {
711
538
  output_name => {
712
- "records" => {
713
539
  "type" => "sort",
714
540
  "operators" => [
715
541
  { "column" => 1, "operator" => "<" },
716
542
  ],
717
543
  "key_column" => 0,
718
544
  "limit" => -1,
719
- },
720
545
  },
721
546
  },
722
547
  },
@@ -724,8 +549,7 @@ class BasicCollectorTest < Test::Unit::TestCase
724
549
  },
725
550
  },
726
551
  "id" => nil,
727
- "value" => {
728
- "records" => [
552
+ "value" => [
729
553
  [
730
554
  "group1",
731
555
  30,
@@ -753,16 +577,14 @@ class BasicCollectorTest < Test::Unit::TestCase
753
577
  create_record("F"),
754
578
  ],
755
579
  ],
756
- ],
757
- },
580
+ ],
758
581
  "name" => input_name,
759
582
  "descendants" => nil,
760
583
  }
761
584
  @plugin.process("collector_reduce", request)
762
585
  assert_equal([
763
586
  output_name,
764
- {
765
- "records" => [
587
+ [
766
588
  [
767
589
  "group3",
768
590
  30,
@@ -805,8 +627,7 @@ class BasicCollectorTest < Test::Unit::TestCase
805
627
  create_record("e"),
806
628
  ],
807
629
  ],
808
- ],
809
- },
630
+ ],
810
631
  ],
811
632
  @outputs.last)
812
633
  end