fluentd 1.16.5 → 1.17.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -0
  3. data/README.md +2 -1
  4. data/Rakefile +1 -1
  5. data/SECURITY.md +2 -2
  6. data/fluent.conf +14 -14
  7. data/lib/fluent/command/binlog_reader.rb +1 -1
  8. data/lib/fluent/command/cap_ctl.rb +4 -4
  9. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  10. data/lib/fluent/compat/propagate_default.rb +4 -4
  11. data/lib/fluent/config/configure_proxy.rb +2 -2
  12. data/lib/fluent/config/types.rb +1 -1
  13. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  14. data/lib/fluent/configurable.rb +2 -2
  15. data/lib/fluent/counter/mutex_hash.rb +1 -1
  16. data/lib/fluent/fluent_log_event_router.rb +0 -2
  17. data/lib/fluent/log/console_adapter.rb +4 -2
  18. data/lib/fluent/plugin/buf_file.rb +1 -1
  19. data/lib/fluent/plugin/buffer/file_chunk.rb +1 -1
  20. data/lib/fluent/plugin/buffer/file_single_chunk.rb +2 -3
  21. data/lib/fluent/plugin/filter_parser.rb +26 -8
  22. data/lib/fluent/plugin/in_exec.rb +14 -2
  23. data/lib/fluent/plugin/in_http.rb +19 -54
  24. data/lib/fluent/plugin/in_sample.rb +13 -7
  25. data/lib/fluent/plugin/in_tail.rb +99 -25
  26. data/lib/fluent/plugin/out_copy.rb +1 -1
  27. data/lib/fluent/plugin/out_file.rb +8 -0
  28. data/lib/fluent/plugin/out_http.rb +137 -13
  29. data/lib/fluent/plugin/owned_by_mixin.rb +0 -1
  30. data/lib/fluent/plugin/parser_json.rb +26 -17
  31. data/lib/fluent/plugin/parser_msgpack.rb +24 -3
  32. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  33. data/lib/fluent/plugin_helper/metrics.rb +2 -2
  34. data/lib/fluent/registry.rb +6 -6
  35. data/lib/fluent/test/output_test.rb +1 -1
  36. data/lib/fluent/unique_id.rb +1 -1
  37. data/lib/fluent/version.rb +1 -1
  38. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  39. metadata +109 -459
  40. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  41. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  42. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  43. data/.github/ISSUE_TEMPLATE.md +0 -17
  44. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  45. data/.github/workflows/stale-actions.yml +0 -24
  46. data/.github/workflows/test.yml +0 -32
  47. data/.gitignore +0 -30
  48. data/Gemfile +0 -9
  49. data/fluentd.gemspec +0 -54
  50. data/test/command/test_binlog_reader.rb +0 -362
  51. data/test/command/test_ca_generate.rb +0 -70
  52. data/test/command/test_cap_ctl.rb +0 -100
  53. data/test/command/test_cat.rb +0 -128
  54. data/test/command/test_ctl.rb +0 -56
  55. data/test/command/test_fluentd.rb +0 -1291
  56. data/test/command/test_plugin_config_formatter.rb +0 -397
  57. data/test/command/test_plugin_generator.rb +0 -109
  58. data/test/compat/test_calls_super.rb +0 -166
  59. data/test/compat/test_parser.rb +0 -92
  60. data/test/config/assertions.rb +0 -42
  61. data/test/config/test_config_parser.rb +0 -551
  62. data/test/config/test_configurable.rb +0 -1784
  63. data/test/config/test_configure_proxy.rb +0 -604
  64. data/test/config/test_dsl.rb +0 -415
  65. data/test/config/test_element.rb +0 -518
  66. data/test/config/test_literal_parser.rb +0 -309
  67. data/test/config/test_plugin_configuration.rb +0 -56
  68. data/test/config/test_section.rb +0 -191
  69. data/test/config/test_system_config.rb +0 -195
  70. data/test/config/test_types.rb +0 -408
  71. data/test/counter/test_client.rb +0 -563
  72. data/test/counter/test_error.rb +0 -44
  73. data/test/counter/test_mutex_hash.rb +0 -179
  74. data/test/counter/test_server.rb +0 -589
  75. data/test/counter/test_store.rb +0 -258
  76. data/test/counter/test_validator.rb +0 -137
  77. data/test/helper.rb +0 -155
  78. data/test/helpers/fuzzy_assert.rb +0 -89
  79. data/test/helpers/process_extenstion.rb +0 -33
  80. data/test/log/test_console_adapter.rb +0 -110
  81. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  82. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  83. data/test/plugin/data/2010/01/20100102.log +0 -0
  84. data/test/plugin/data/log/bar +0 -0
  85. data/test/plugin/data/log/foo/bar.log +0 -0
  86. data/test/plugin/data/log/foo/bar2 +0 -0
  87. data/test/plugin/data/log/test.log +0 -0
  88. data/test/plugin/data/sd_file/config +0 -11
  89. data/test/plugin/data/sd_file/config.json +0 -17
  90. data/test/plugin/data/sd_file/config.yaml +0 -11
  91. data/test/plugin/data/sd_file/config.yml +0 -11
  92. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  93. data/test/plugin/in_tail/test_fifo.rb +0 -121
  94. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  95. data/test/plugin/in_tail/test_position_file.rb +0 -346
  96. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  97. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  98. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  99. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  100. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  101. data/test/plugin/test_bare_output.rb +0 -131
  102. data/test/plugin/test_base.rb +0 -247
  103. data/test/plugin/test_buf_file.rb +0 -1314
  104. data/test/plugin/test_buf_file_single.rb +0 -898
  105. data/test/plugin/test_buf_memory.rb +0 -42
  106. data/test/plugin/test_buffer.rb +0 -1493
  107. data/test/plugin/test_buffer_chunk.rb +0 -209
  108. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  109. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  110. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  111. data/test/plugin/test_compressable.rb +0 -87
  112. data/test/plugin/test_file_util.rb +0 -96
  113. data/test/plugin/test_filter.rb +0 -368
  114. data/test/plugin/test_filter_grep.rb +0 -697
  115. data/test/plugin/test_filter_parser.rb +0 -731
  116. data/test/plugin/test_filter_record_transformer.rb +0 -577
  117. data/test/plugin/test_filter_stdout.rb +0 -207
  118. data/test/plugin/test_formatter_csv.rb +0 -136
  119. data/test/plugin/test_formatter_hash.rb +0 -38
  120. data/test/plugin/test_formatter_json.rb +0 -61
  121. data/test/plugin/test_formatter_ltsv.rb +0 -70
  122. data/test/plugin/test_formatter_msgpack.rb +0 -28
  123. data/test/plugin/test_formatter_out_file.rb +0 -116
  124. data/test/plugin/test_formatter_single_value.rb +0 -44
  125. data/test/plugin/test_formatter_tsv.rb +0 -76
  126. data/test/plugin/test_in_debug_agent.rb +0 -49
  127. data/test/plugin/test_in_exec.rb +0 -261
  128. data/test/plugin/test_in_forward.rb +0 -1178
  129. data/test/plugin/test_in_gc_stat.rb +0 -62
  130. data/test/plugin/test_in_http.rb +0 -1102
  131. data/test/plugin/test_in_monitor_agent.rb +0 -922
  132. data/test/plugin/test_in_object_space.rb +0 -66
  133. data/test/plugin/test_in_sample.rb +0 -190
  134. data/test/plugin/test_in_syslog.rb +0 -505
  135. data/test/plugin/test_in_tail.rb +0 -3288
  136. data/test/plugin/test_in_tcp.rb +0 -328
  137. data/test/plugin/test_in_udp.rb +0 -296
  138. data/test/plugin/test_in_unix.rb +0 -181
  139. data/test/plugin/test_input.rb +0 -137
  140. data/test/plugin/test_metadata.rb +0 -89
  141. data/test/plugin/test_metrics.rb +0 -294
  142. data/test/plugin/test_metrics_local.rb +0 -96
  143. data/test/plugin/test_multi_output.rb +0 -204
  144. data/test/plugin/test_out_copy.rb +0 -308
  145. data/test/plugin/test_out_exec.rb +0 -312
  146. data/test/plugin/test_out_exec_filter.rb +0 -606
  147. data/test/plugin/test_out_file.rb +0 -1038
  148. data/test/plugin/test_out_forward.rb +0 -1349
  149. data/test/plugin/test_out_http.rb +0 -429
  150. data/test/plugin/test_out_null.rb +0 -105
  151. data/test/plugin/test_out_relabel.rb +0 -28
  152. data/test/plugin/test_out_roundrobin.rb +0 -146
  153. data/test/plugin/test_out_secondary_file.rb +0 -458
  154. data/test/plugin/test_out_stdout.rb +0 -205
  155. data/test/plugin/test_out_stream.rb +0 -103
  156. data/test/plugin/test_output.rb +0 -1334
  157. data/test/plugin/test_output_as_buffered.rb +0 -2024
  158. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  159. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  160. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  161. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  162. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  163. data/test/plugin/test_output_as_standard.rb +0 -374
  164. data/test/plugin/test_owned_by.rb +0 -35
  165. data/test/plugin/test_parser.rb +0 -399
  166. data/test/plugin/test_parser_apache.rb +0 -42
  167. data/test/plugin/test_parser_apache2.rb +0 -47
  168. data/test/plugin/test_parser_apache_error.rb +0 -45
  169. data/test/plugin/test_parser_csv.rb +0 -200
  170. data/test/plugin/test_parser_json.rb +0 -138
  171. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  172. data/test/plugin/test_parser_multiline.rb +0 -111
  173. data/test/plugin/test_parser_nginx.rb +0 -88
  174. data/test/plugin/test_parser_none.rb +0 -52
  175. data/test/plugin/test_parser_regexp.rb +0 -284
  176. data/test/plugin/test_parser_syslog.rb +0 -650
  177. data/test/plugin/test_parser_tsv.rb +0 -122
  178. data/test/plugin/test_sd_file.rb +0 -228
  179. data/test/plugin/test_sd_srv.rb +0 -230
  180. data/test/plugin/test_storage.rb +0 -167
  181. data/test/plugin/test_storage_local.rb +0 -335
  182. data/test/plugin/test_string_util.rb +0 -26
  183. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  184. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  185. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  186. data/test/plugin_helper/data/cert/cert.pem +0 -19
  187. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  188. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  189. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  191. data/test/plugin_helper/data/cert/empty.pem +0 -0
  192. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  193. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  194. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  195. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  196. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  197. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  198. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  199. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  200. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  201. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  202. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  203. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  204. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  205. data/test/plugin_helper/http_server/test_app.rb +0 -65
  206. data/test/plugin_helper/http_server/test_route.rb +0 -32
  207. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  208. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  209. data/test/plugin_helper/test_cert_option.rb +0 -25
  210. data/test/plugin_helper/test_child_process.rb +0 -862
  211. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  212. data/test/plugin_helper/test_event_emitter.rb +0 -80
  213. data/test/plugin_helper/test_event_loop.rb +0 -52
  214. data/test/plugin_helper/test_extract.rb +0 -194
  215. data/test/plugin_helper/test_formatter.rb +0 -255
  216. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  217. data/test/plugin_helper/test_inject.rb +0 -561
  218. data/test/plugin_helper/test_metrics.rb +0 -137
  219. data/test/plugin_helper/test_parser.rb +0 -264
  220. data/test/plugin_helper/test_record_accessor.rb +0 -238
  221. data/test/plugin_helper/test_retry_state.rb +0 -1006
  222. data/test/plugin_helper/test_server.rb +0 -1895
  223. data/test/plugin_helper/test_service_discovery.rb +0 -165
  224. data/test/plugin_helper/test_socket.rb +0 -146
  225. data/test/plugin_helper/test_storage.rb +0 -542
  226. data/test/plugin_helper/test_thread.rb +0 -164
  227. data/test/plugin_helper/test_timer.rb +0 -130
  228. data/test/scripts/exec_script.rb +0 -32
  229. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  230. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  231. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  232. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  233. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  234. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  235. data/test/test_capability.rb +0 -74
  236. data/test/test_clock.rb +0 -164
  237. data/test/test_config.rb +0 -369
  238. data/test/test_configdsl.rb +0 -148
  239. data/test/test_daemonizer.rb +0 -91
  240. data/test/test_engine.rb +0 -203
  241. data/test/test_event.rb +0 -531
  242. data/test/test_event_router.rb +0 -348
  243. data/test/test_event_time.rb +0 -199
  244. data/test/test_file_wrapper.rb +0 -53
  245. data/test/test_filter.rb +0 -121
  246. data/test/test_fluent_log_event_router.rb +0 -99
  247. data/test/test_formatter.rb +0 -369
  248. data/test/test_input.rb +0 -31
  249. data/test/test_log.rb +0 -1076
  250. data/test/test_match.rb +0 -148
  251. data/test/test_mixin.rb +0 -351
  252. data/test/test_msgpack_factory.rb +0 -50
  253. data/test/test_oj_options.rb +0 -55
  254. data/test/test_output.rb +0 -278
  255. data/test/test_plugin.rb +0 -251
  256. data/test/test_plugin_classes.rb +0 -370
  257. data/test/test_plugin_helper.rb +0 -81
  258. data/test/test_plugin_id.rb +0 -119
  259. data/test/test_process.rb +0 -14
  260. data/test/test_root_agent.rb +0 -951
  261. data/test/test_static_config_analysis.rb +0 -177
  262. data/test/test_supervisor.rb +0 -821
  263. data/test/test_test_drivers.rb +0 -136
  264. data/test/test_time_formatter.rb +0 -301
  265. data/test/test_time_parser.rb +0 -362
  266. data/test/test_tls.rb +0 -65
  267. data/test/test_unique_id.rb +0 -47
  268. data/test/test_variable_store.rb +0 -65
@@ -1,137 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin_helper/metrics'
3
- require 'fluent/plugin/base'
4
-
5
- class MetricsTest < Test::Unit::TestCase
6
- class Dummy < Fluent::Plugin::TestBase
7
- helpers :metrics
8
- def configure(conf)
9
- super
10
- end
11
- end
12
-
13
- setup do
14
- @d = nil
15
- end
16
-
17
- teardown do
18
- if @d
19
- @d.stop unless @d.stopped?
20
- @d.shutdown unless @d.shutdown?
21
- @d.close unless @d.closed?
22
- @d.terminate unless @d.terminated?
23
- end
24
- end
25
-
26
- test 'can be initialized without any metrics at first' do
27
- d = Dummy.new
28
- assert_equal 0, d._metrics.size
29
- end
30
-
31
- test 'can be configured' do
32
- d1 = Dummy.new
33
- assert_nothing_raised do
34
- d1.configure(config_element())
35
- end
36
- assert d1.plugin_id
37
- assert d1.log
38
- end
39
-
40
- test 'creates metrics instances' do
41
- d = Dummy.new
42
- i = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics1", help_text: "metrics testing")
43
- d.configure(config_element())
44
- assert do
45
- d.instance_variable_get(:@plugin_type_or_id).include?("dummy.object")
46
- end
47
- assert{ i.is_a?(Fluent::Plugin::LocalMetrics) }
48
- assert_true i.has_methods_for_counter
49
- assert_false i.has_methods_for_gauge
50
-
51
- d = Dummy.new
52
- i = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics2", help_text: "metrics testing", prefer_gauge: true)
53
- d.configure(config_element())
54
- assert do
55
- d.instance_variable_get(:@plugin_type_or_id).include?("dummy.object")
56
- end
57
- assert{ i.is_a?(Fluent::Plugin::LocalMetrics) }
58
- assert_false i.has_methods_for_counter
59
- assert_true i.has_methods_for_gauge
60
- end
61
-
62
- test 'calls lifecycle methods for all plugin instances via owner plugin' do
63
- @d = d = Dummy.new
64
- i1 = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics1", help_text: "metrics testing")
65
- i2 = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics2", help_text: "metrics testing", prefer_gauge: true)
66
- i3 = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics3", help_text: "metrics testing")
67
- d.configure(config_element())
68
- assert do
69
- d.instance_variable_get(:@plugin_type_or_id).include?("dummy.object")
70
- end
71
- d.start
72
-
73
- assert i1.started?
74
- assert i2.started?
75
- assert i3.started?
76
-
77
- assert !i1.stopped?
78
- assert !i2.stopped?
79
- assert !i3.stopped?
80
-
81
- d.stop
82
-
83
- assert i1.stopped?
84
- assert i2.stopped?
85
- assert i3.stopped?
86
-
87
- assert !i1.before_shutdown?
88
- assert !i2.before_shutdown?
89
- assert !i3.before_shutdown?
90
-
91
- d.before_shutdown
92
-
93
- assert i1.before_shutdown?
94
- assert i2.before_shutdown?
95
- assert i3.before_shutdown?
96
-
97
- assert !i1.shutdown?
98
- assert !i2.shutdown?
99
- assert !i3.shutdown?
100
-
101
- d.shutdown
102
-
103
- assert i1.shutdown?
104
- assert i2.shutdown?
105
- assert i3.shutdown?
106
-
107
- assert !i1.after_shutdown?
108
- assert !i2.after_shutdown?
109
- assert !i3.after_shutdown?
110
-
111
- d.after_shutdown
112
-
113
- assert i1.after_shutdown?
114
- assert i2.after_shutdown?
115
- assert i3.after_shutdown?
116
-
117
- assert !i1.closed?
118
- assert !i2.closed?
119
- assert !i3.closed?
120
-
121
- d.close
122
-
123
- assert i1.closed?
124
- assert i2.closed?
125
- assert i3.closed?
126
-
127
- assert !i1.terminated?
128
- assert !i2.terminated?
129
- assert !i3.terminated?
130
-
131
- d.terminate
132
-
133
- assert i1.terminated?
134
- assert i2.terminated?
135
- assert i3.terminated?
136
- end
137
- end
@@ -1,264 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin_helper/parser'
3
- require 'fluent/plugin/base'
4
- require 'fluent/time'
5
-
6
- class ParserHelperTest < Test::Unit::TestCase
7
- class ExampleParser < Fluent::Plugin::Parser
8
- Fluent::Plugin.register_parser('example', self)
9
- def parse(text)
10
- ary = text.split(/\s*,\s*/)
11
- r = {}
12
- ary.each_with_index do |v, i|
13
- r[i.to_s] = v
14
- end
15
- yield Fluent::EventTime.now, r
16
- end
17
- end
18
- class Example2Parser < Fluent::Plugin::Parser
19
- Fluent::Plugin.register_parser('example2', self)
20
- def parse(text)
21
- ary = text.split(/\s*,\s*/)
22
- r = {}
23
- ary.each_with_index do |v, i|
24
- r[i.to_s] = v
25
- end
26
- yield Fluent::EventTime.now, r
27
- end
28
- end
29
- class Dummy < Fluent::Plugin::TestBase
30
- helpers :parser
31
- config_section :parse do
32
- config_set_default :@type, 'example'
33
- end
34
- end
35
-
36
- class Dummy2 < Fluent::Plugin::TestBase
37
- helpers :parser
38
- config_section :parse do
39
- config_set_default :@type, 'example2'
40
- end
41
- end
42
-
43
- setup do
44
- @d = nil
45
- end
46
-
47
- teardown do
48
- if @d
49
- @d.stop unless @d.stopped?
50
- @d.shutdown unless @d.shutdown?
51
- @d.close unless @d.closed?
52
- @d.terminate unless @d.terminated?
53
- end
54
- end
55
-
56
- test 'can be initialized without any parsers at first' do
57
- d = Dummy.new
58
- assert_equal 0, d._parsers.size
59
- end
60
-
61
- test 'can override default configuration parameters, but not overwrite whole definition' do
62
- d = Dummy.new
63
- assert_equal [], d.parser_configs
64
-
65
- d = Dummy2.new
66
- d.configure(config_element('ROOT', '', {}, [config_element('parse', '', {}, [])]))
67
- assert_raise NoMethodError do
68
- d.parse
69
- end
70
- assert_equal 1, d.parser_configs.size
71
- assert_equal 'example2', d.parser_configs.first[:@type]
72
- end
73
-
74
- test 'creates instance of type specified by conf, or default_type if @type is missing in conf' do
75
- d = Dummy2.new
76
- d.configure(config_element())
77
- i = d.parser_create(conf: config_element('parse', '', {'@type' => 'example'}), default_type: 'example2')
78
- assert{ i.is_a?(ExampleParser) }
79
-
80
- d = Dummy2.new
81
- d.configure(config_element())
82
- i = d.parser_create(conf: nil, default_type: 'example2')
83
- assert{ i.is_a?(Example2Parser) }
84
- end
85
-
86
- test 'raises config error if config section is specified, but @type is not specified' do
87
- d = Dummy2.new
88
- d.configure(config_element())
89
- assert_raise Fluent::ConfigError.new("@type is required in <parse>") do
90
- d.parser_create(conf: config_element('parse', '', {}), default_type: 'example2')
91
- end
92
- end
93
-
94
- test 'can be configured with default type without parse sections' do
95
- d = Dummy.new
96
- d.configure(config_element())
97
- assert_equal 1, d._parsers.size
98
- end
99
-
100
- test 'can be configured with a parse section' do
101
- d = Dummy.new
102
- conf = config_element('ROOT', '', {}, [
103
- config_element('parse', '', {'@type' => 'example'})
104
- ])
105
- assert_nothing_raised do
106
- d.configure(conf)
107
- end
108
- assert_equal 1, d._parsers.size
109
- assert{ d._parsers.values.all?{ |parser| !parser.started? } }
110
- end
111
-
112
- test 'can be configured with 2 or more parse sections with different usages with each other' do
113
- d = Dummy.new
114
- conf = config_element('ROOT', '', {}, [
115
- config_element('parse', 'default', {'@type' => 'example'}),
116
- config_element('parse', 'extra', {'@type' => 'example2'}),
117
- ])
118
- assert_nothing_raised do
119
- d.configure(conf)
120
- end
121
- assert_equal 2, d._parsers.size
122
- assert{ d._parsers.values.all?{ |parser| !parser.started? } }
123
- end
124
-
125
- test 'cannot be configured with 2 parse sections with same usage' do
126
- d = Dummy.new
127
- conf = config_element('ROOT', '', {}, [
128
- config_element('parse', 'default', {'@type' => 'example'}),
129
- config_element('parse', 'extra', {'@type' => 'example2'}),
130
- config_element('parse', 'extra', {'@type' => 'example2'}),
131
- ])
132
- assert_raises Fluent::ConfigError do
133
- d.configure(conf)
134
- end
135
- end
136
-
137
- test 'creates a parse plugin instance which is already configured without usage' do
138
- @d = d = Dummy.new
139
- conf = config_element('ROOT', '', {}, [
140
- config_element('parse', '', {'@type' => 'example'})
141
- ])
142
- d.configure(conf)
143
- d.start
144
-
145
- parser = d.parser_create
146
- assert{ parser.is_a? ExampleParser }
147
- assert parser.started?
148
- end
149
-
150
- test 'creates a parser plugin instance which is already configured with usage' do
151
- @d = d = Dummy.new
152
- conf = config_element('ROOT', '', {}, [
153
- config_element('parse', 'mydata', {'@type' => 'example'})
154
- ])
155
- d.configure(conf)
156
- d.start
157
-
158
- parser = d.parser_create(usage: 'mydata')
159
- assert{ parser.is_a? ExampleParser }
160
- assert parser.started?
161
- end
162
-
163
- test 'creates a parser plugin without configurations' do
164
- @d = d = Dummy.new
165
- d.configure(config_element())
166
- d.start
167
-
168
- parser = d.parser_create(usage: 'mydata', type: 'example', conf: config_element('parse', 'mydata'))
169
- assert{ parser.is_a? ExampleParser }
170
- assert parser.started?
171
- end
172
-
173
- test 'creates 2 or more parser plugin instances' do
174
- @d = d = Dummy.new
175
- conf = config_element('ROOT', '', {}, [
176
- config_element('parse', 'mydata', {'@type' => 'example'}),
177
- config_element('parse', 'secret', {'@type' => 'example2'})
178
- ])
179
- d.configure(conf)
180
- d.start
181
-
182
- p1 = d.parser_create(usage: 'mydata')
183
- p2 = d.parser_create(usage: 'secret')
184
- assert{ p1.is_a? ExampleParser }
185
- assert p1.started?
186
- assert{ p2.is_a? Example2Parser }
187
- assert p2.started?
188
- end
189
-
190
- test 'calls lifecycle methods for all plugin instances via owner plugin' do
191
- @d = d = Dummy.new
192
- conf = config_element('ROOT', '', {}, [ config_element('parse', '', {'@type' => 'example'}), config_element('parse', 'e2', {'@type' => 'example'}) ])
193
- d.configure(conf)
194
- d.start
195
-
196
- i1 = d.parser_create(usage: '')
197
- i2 = d.parser_create(usage: 'e2')
198
- i3 = d.parser_create(usage: 'e3', type: 'example2')
199
-
200
- assert i1.started?
201
- assert i2.started?
202
- assert i3.started?
203
-
204
- assert !i1.stopped?
205
- assert !i2.stopped?
206
- assert !i3.stopped?
207
-
208
- d.stop
209
-
210
- assert i1.stopped?
211
- assert i2.stopped?
212
- assert i3.stopped?
213
-
214
- assert !i1.before_shutdown?
215
- assert !i2.before_shutdown?
216
- assert !i3.before_shutdown?
217
-
218
- d.before_shutdown
219
-
220
- assert i1.before_shutdown?
221
- assert i2.before_shutdown?
222
- assert i3.before_shutdown?
223
-
224
- assert !i1.shutdown?
225
- assert !i2.shutdown?
226
- assert !i3.shutdown?
227
-
228
- d.shutdown
229
-
230
- assert i1.shutdown?
231
- assert i2.shutdown?
232
- assert i3.shutdown?
233
-
234
- assert !i1.after_shutdown?
235
- assert !i2.after_shutdown?
236
- assert !i3.after_shutdown?
237
-
238
- d.after_shutdown
239
-
240
- assert i1.after_shutdown?
241
- assert i2.after_shutdown?
242
- assert i3.after_shutdown?
243
-
244
- assert !i1.closed?
245
- assert !i2.closed?
246
- assert !i3.closed?
247
-
248
- d.close
249
-
250
- assert i1.closed?
251
- assert i2.closed?
252
- assert i3.closed?
253
-
254
- assert !i1.terminated?
255
- assert !i2.terminated?
256
- assert !i3.terminated?
257
-
258
- d.terminate
259
-
260
- assert i1.terminated?
261
- assert i2.terminated?
262
- assert i3.terminated?
263
- end
264
- end
@@ -1,238 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin_helper/record_accessor'
3
- require 'fluent/plugin/base'
4
-
5
- require 'time'
6
-
7
- class RecordAccessorHelperTest < Test::Unit::TestCase
8
- class Dummy < Fluent::Plugin::TestBase
9
- helpers :record_accessor
10
- end
11
-
12
- sub_test_case 'parse nested key expression' do
13
- data('normal' => 'key1',
14
- 'space' => 'ke y2',
15
- 'dot key' => 'this.is.key3')
16
- test 'parse single key' do |param|
17
- result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
18
- assert_equal param, result
19
- end
20
-
21
- test "nested bracket keys with dot" do
22
- result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter("$['key1']['this.is.key3']")
23
- assert_equal ['key1', 'this.is.key3'], result
24
- end
25
-
26
- data('dot' => '$.key1.key2[0]',
27
- 'bracket' => "$['key1']['key2'][0]",
28
- 'bracket w/ double quotes' => '$["key1"]["key2"][0]')
29
- test "nested keys ['key1', 'key2', 0]" do |param|
30
- result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
31
- assert_equal ['key1', 'key2', 0], result
32
- end
33
-
34
- data('bracket' => "$['key1'][0]['ke y2']",
35
- 'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
36
- test "nested keys ['key1', 0, 'ke y2']" do |param|
37
- result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
38
- assert_equal ['key1', 0, 'ke y2'], result
39
- end
40
-
41
- data('dot' => '$.[0].key1.[1].key2',
42
- 'bracket' => "$[0]['key1'][1]['key2']",
43
- 'bracket w/ double quotes' => '$[0]["key1"][1]["key2"]')
44
- test "nested keys [0, 'key1', 1, 'key2']" do |param|
45
- result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
46
- assert_equal [0, 'key1', 1, 'key2'], result
47
- end
48
-
49
- data("missing ']'" => "$['key1'",
50
- "missing array index with dot" => "$.hello[]",
51
- "missing array index with bracket" => "$[]",
52
- "more chars" => "$.key1[0]foo",
53
- "whitespace char included key in dot notation" => "$.key[0].ke y",
54
- "empty keys with dot" => "$.",
55
- "empty keys with bracket" => "$[",
56
- "mismatched quotes1" => "$['key1']['key2\"]",
57
- "mismatched quotes2" => '$["key1"]["key2\']')
58
- test 'invalid syntax' do |param|
59
- assert_raise Fluent::ConfigError do
60
- Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
61
- end
62
- end
63
- end
64
-
65
- sub_test_case 'attr_reader :keys' do
66
- setup do
67
- @d = Dummy.new
68
- end
69
-
70
- data('normal' => 'key1',
71
- 'space' => 'ke y2',
72
- 'dot key' => 'this.is.key3')
73
- test 'access single key' do |param|
74
- accessor = @d.record_accessor_create(param)
75
- assert_equal param, accessor.keys
76
- end
77
-
78
- test "nested bracket keys with dot" do
79
- accessor = @d.record_accessor_create("$['key1']['this.is.key3']")
80
- assert_equal ['key1','this.is.key3'], accessor.keys
81
- end
82
-
83
- data('dot' => '$.key1.key2[0]',
84
- 'bracket' => "$['key1']['key2'][0]",
85
- 'bracket w/ double quotes' => '$["key1"]["key2"][0]')
86
- test "nested keys ['key1', 'key2', 0]" do |param|
87
- accessor = @d.record_accessor_create(param)
88
- assert_equal ['key1', 'key2', 0], accessor.keys
89
- end
90
-
91
- data('bracket' => "$['key1'][0]['ke y2']",
92
- 'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
93
- test "nested keys ['key1', 0, 'ke y2']" do |param|
94
- accessor = @d.record_accessor_create(param)
95
- assert_equal ['key1', 0, 'ke y2'], accessor.keys
96
- end
97
- end
98
-
99
- sub_test_case Fluent::PluginHelper::RecordAccessor::Accessor do
100
- setup do
101
- @d = Dummy.new
102
- end
103
-
104
- data('normal' => 'key1',
105
- 'space' => 'ke y2',
106
- 'dot key' => 'this.is.key3')
107
- test 'access single key' do |param|
108
- r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
109
- accessor = @d.record_accessor_create(param)
110
- assert_equal r[param], accessor.call(r)
111
- end
112
-
113
- test "access single dot key using bracket style" do
114
- r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
115
- accessor = @d.record_accessor_create('$["this.is.key3"]')
116
- assert_equal 'v3', accessor.call(r)
117
- end
118
-
119
- test "nested bracket keys with dot" do
120
- r = {'key1' => {'this.is.key3' => 'value'}}
121
- accessor = @d.record_accessor_create("$['key1']['this.is.key3']")
122
- assert_equal 'value', accessor.call(r)
123
- end
124
-
125
- data('dot' => '$.key1.key2[0]',
126
- 'bracket' => "$['key1']['key2'][0]",
127
- 'bracket w/ double quotes' => '$["key1"]["key2"][0]')
128
- test "nested keys ['key1', 'key2', 0]" do |param|
129
- r = {'key1' => {'key2' => [1, 2, 3]}}
130
- accessor = @d.record_accessor_create(param)
131
- assert_equal 1, accessor.call(r)
132
- end
133
-
134
- data('bracket' => "$['key1'][0]['ke y2']",
135
- 'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
136
- test "nested keys ['key1', 0, 'ke y2']" do |param|
137
- r = {'key1' => [{'ke y2' => "value"}]}
138
- accessor = @d.record_accessor_create(param)
139
- assert_equal 'value', accessor.call(r)
140
- end
141
-
142
- data("missing ']'" => "$['key1'",
143
- "missing array index with dot" => "$.hello[]",
144
- "missing array index with bracket" => "$['hello'][]",
145
- "whitespace char included key in dot notation" => "$.key[0].ke y",
146
- "more chars" => "$.key1[0]foo",
147
- "empty keys with dot" => "$.",
148
- "empty keys with bracket" => "$[",
149
- "mismatched quotes1" => "$['key1']['key2\"]",
150
- "mismatched quotes2" => '$["key1"]["key2\']')
151
- test 'invalid syntax' do |param|
152
- assert_raise Fluent::ConfigError do
153
- @d.record_accessor_create(param)
154
- end
155
- end
156
- end
157
-
158
- sub_test_case 'Fluent::PluginHelper::RecordAccessor::Accessor#delete' do
159
- setup do
160
- @d = Dummy.new
161
- end
162
-
163
- data('normal' => 'key1',
164
- 'space' => 'ke y2',
165
- 'dot key' => 'this.is.key3')
166
- test 'delete top key' do |param|
167
- r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
168
- accessor = @d.record_accessor_create(param)
169
- accessor.delete(r)
170
- assert_not_include(r, param)
171
- end
172
-
173
- test "delete top key using bracket style" do
174
- r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
175
- accessor = @d.record_accessor_create('$["this.is.key3"]')
176
- accessor.delete(r)
177
- assert_not_include(r, 'this.is.key3')
178
- end
179
-
180
- data('bracket' => "$['key1'][0]['ke y2']",
181
- 'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
182
- test "delete nested keys ['key1', 0, 'ke y2']" do |param|
183
- r = {'key1' => [{'ke y2' => "value"}]}
184
- accessor = @d.record_accessor_create(param)
185
- accessor.delete(r)
186
- assert_not_include(r['key1'][0], 'ke y2')
187
- end
188
-
189
- test "don't raise an error when unexpected record is coming" do
190
- r = {'key1' => [{'key3' => "value"}]}
191
- accessor = @d.record_accessor_create("$['key1']['key2']['key3']")
192
- assert_nothing_raised do
193
- assert_nil accessor.delete(r)
194
- end
195
- end
196
- end
197
-
198
- sub_test_case 'Fluent::PluginHelper::RecordAccessor::Accessor#set' do
199
- setup do
200
- @d = Dummy.new
201
- end
202
-
203
- data('normal' => 'key1',
204
- 'space' => 'ke y2',
205
- 'dot key' => 'this.is.key3')
206
- test 'set top key' do |param|
207
- r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
208
- accessor = @d.record_accessor_create(param)
209
- accessor.set(r, "test")
210
- assert_equal "test", r[param]
211
- end
212
-
213
- test "set top key using bracket style" do
214
- r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
215
- accessor = @d.record_accessor_create('$["this.is.key3"]')
216
- accessor.set(r, "test")
217
- assert_equal "test", r["this.is.key3"]
218
- end
219
-
220
- data('bracket' => "$['key1'][0]['ke y2']",
221
- 'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
222
- test "set nested keys ['key1', 0, 'ke y2']" do |param|
223
- r = {'key1' => [{'ke y2' => "value"}]}
224
- accessor = @d.record_accessor_create(param)
225
- accessor.set(r, "nested_message")
226
- assert_equal "nested_message", r['key1'][0]['ke y2']
227
- end
228
-
229
- test "don't raise an error when unexpected record is coming" do
230
- r = {'key1' => [{'key3' => "value"}]}
231
- accessor = @d.record_accessor_create("$['key1']['key2']['key3']")
232
- assert_nothing_raised do
233
- accessor.set(r, "unknown field")
234
- end
235
- assert_equal({'key1' => [{'key3' => "value"}]}, r)
236
- end
237
- end
238
- end