fluentd 1.16.5-x64-mingw32 → 1.17.1-x64-mingw32

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.
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,577 +0,0 @@
1
- require_relative '../helper'
2
- require 'timecop'
3
- require 'fluent/test/driver/filter'
4
- require 'fluent/plugin/filter_record_transformer'
5
- require 'flexmock/test_unit'
6
-
7
- class RecordTransformerFilterTest < Test::Unit::TestCase
8
- include Fluent
9
- include FlexMock::TestCase
10
-
11
- setup do
12
- Test.setup
13
- @hostname = Socket.gethostname.chomp
14
- @tag = 'test.tag'
15
- @tag_parts = @tag.split('.')
16
- @time = event_time('2010-05-04 03:02:01 UTC')
17
- Timecop.freeze(@time)
18
- end
19
-
20
- teardown do
21
- Timecop.return
22
- end
23
-
24
- def create_driver(conf = '')
25
- Fluent::Test::Driver::Filter.new(Fluent::Plugin::RecordTransformerFilter).configure(conf)
26
- end
27
-
28
- sub_test_case 'configure' do
29
- test 'check default' do
30
- assert_nothing_raised do
31
- create_driver
32
- end
33
- end
34
-
35
- test "keep_keys must be specified together with renew_record true" do
36
- assert_raise(Fluent::ConfigError) do
37
- create_driver(%[keep_keys a])
38
- end
39
- end
40
- end
41
-
42
- sub_test_case "test options" do
43
- def filter(config, msgs = [''])
44
- d = create_driver(config)
45
- d.run {
46
- msgs.each { |msg|
47
- d.feed(@tag, @time, {'foo' => 'bar', 'message' => msg, 'nest' => {'k1' => 'v1', 'k2' => 'v2'}})
48
- }
49
- }
50
- d.filtered
51
- end
52
-
53
- CONFIG = %[
54
- <record>
55
- hostname ${hostname}
56
- tag ${tag}
57
- time ${time}
58
- message ${hostname} ${tag_parts[-1]} ${record["message"]}
59
- </record>
60
- ]
61
-
62
- test 'typical usage' do
63
- msgs = ['1', '2']
64
- filtered = filter(CONFIG, msgs)
65
- filtered.each_with_index do |(_t, r), i|
66
- assert_equal('bar', r['foo'])
67
- assert_equal(@hostname, r['hostname'])
68
- assert_equal(@tag, r['tag'])
69
- assert_equal(Time.at(@time).localtime.to_s, r['time'])
70
- assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
71
- assert_equal({'k1' => 'v1', 'k2' => 'v2'}, r['nest'])
72
- end
73
- end
74
-
75
- test 'remove_keys' do
76
- config = CONFIG + %[remove_keys foo,message]
77
- filtered = filter(config)
78
- filtered.each_with_index do |(_t, r), i|
79
- assert_not_include(r, 'foo')
80
- assert_equal(@hostname, r['hostname'])
81
- assert_equal(@tag, r['tag'])
82
- assert_equal(Time.at(@time).localtime.to_s, r['time'])
83
- assert_not_include(r, 'message')
84
- end
85
- end
86
-
87
- test 'remove_keys with nested key' do
88
- config = CONFIG + %[remove_keys $.nest.k1]
89
- filtered = filter(config)
90
- filtered.each_with_index do |(_t, r), i|
91
- assert_not_include(r['nest'], 'k1')
92
- end
93
- end
94
-
95
- test 'renew_record' do
96
- config = CONFIG + %[renew_record true]
97
- msgs = ['1', '2']
98
- filtered = filter(config, msgs)
99
- filtered.each_with_index do |(_t, r), i|
100
- assert_not_include(r, 'foo')
101
- assert_equal(@hostname, r['hostname'])
102
- assert_equal(@tag, r['tag'])
103
- assert_equal(Time.at(@time).localtime.to_s, r['time'])
104
- assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
105
- end
106
- end
107
-
108
- test 'renew_time_key' do
109
- config = %[renew_time_key message]
110
- times = [ Time.local(2,2,3,4,5,2010,nil,nil,nil,nil), Time.local(3,2,3,4,5,2010,nil,nil,nil,nil) ]
111
- msgs = times.map{|t| t.to_f.to_s }
112
- filtered = filter(config, msgs)
113
- filtered.each_with_index do |(time, _record), i|
114
- assert_equal(times[i].to_i, time)
115
- assert(time.is_a?(Fluent::EventTime))
116
- assert_true(_record.has_key?('message'))
117
- end
118
- end
119
-
120
- test 'renew_time_key and remove_keys' do
121
- config = %[
122
- renew_time_key event_time_key
123
- remove_keys event_time_key
124
- auto_typecast true
125
- <record>
126
- event_time_key ${record["message"]}
127
- </record>
128
- ]
129
- times = [Time.local(2, 2, 3, 4, 5, 2010, nil, nil, nil, nil), Time.local(3, 2, 3, 4, 5, 2010, nil, nil, nil, nil)]
130
- msgs = times.map { |t| t.to_f.to_s }
131
- filtered = filter(config, msgs)
132
- filtered.each_with_index do |(time, _record), i|
133
- assert_equal(times[i].to_i, time)
134
- assert(time.is_a?(Fluent::EventTime))
135
- assert_false(_record.has_key?('event_time_key'))
136
- end
137
- end
138
-
139
- test 'keep_keys' do
140
- config = %[renew_record true\nkeep_keys foo,message]
141
- msgs = ['1', '2']
142
- filtered = filter(config, msgs)
143
- filtered.each_with_index do |(_t, r), i|
144
- assert_equal('bar', r['foo'])
145
- assert_equal(msgs[i], r['message'])
146
- end
147
- end
148
-
149
- test 'keep_keys that are not present in the original record should not be included in the result record' do
150
- config = %[renew_record true\nkeep_keys foo, bar, baz, message]
151
- msgs = ['1', '2', nil]
152
- filtered = filter(config, msgs)
153
- filtered.each_with_index do |(_t, r), i|
154
- assert_equal('bar', r['foo'])
155
- assert_equal(msgs[i], r['message'])
156
- assert_equal(false, r.has_key?('bar'))
157
- assert_equal(false, r.has_key?('baz'))
158
- end
159
- end
160
-
161
- test 'enable_ruby' do
162
- config = %[
163
- enable_ruby yes
164
- <record>
165
- message ${hostname} ${tag_parts.last} ${"'" + record["message"] + "'"}
166
- </record>
167
- ]
168
- msgs = ['1', '2']
169
- filtered = filter(config, msgs)
170
- filtered.each_with_index do |(_t, r), i|
171
- assert_equal("#{@hostname} #{@tag_parts[-1]} '#{msgs[i]}'", r['message'])
172
- end
173
- end
174
-
175
- test 'hash_value' do
176
- config = %[
177
- <record>
178
- hash_field {"k1":100, "k2":"foobar"}
179
- </record>
180
- %]
181
- msgs = ['1', '2']
182
- filtered = filter(config, msgs)
183
- filtered.each_with_index do |(_t, r), i|
184
- assert_equal({"k1"=>100, "k2"=>"foobar"}, r['hash_field'])
185
- end
186
- end
187
-
188
- test 'array_value' do
189
- config = %[
190
- <record>
191
- array_field [1, 2, 3]
192
- </record>
193
- %]
194
- msgs = ['1', '2']
195
- filtered = filter(config, msgs)
196
- filtered.each_with_index do |(_t, r), i|
197
- assert_equal([1,2,3], r['array_field'])
198
- end
199
- end
200
-
201
- test 'array_hash_mixed' do
202
- config = %[
203
- <record>
204
- mixed_field {"hello":[1,2,3], "world":{"foo":"bar"}}
205
- </record>
206
- %]
207
- msgs = ['1', '2']
208
- filtered = filter(config, msgs)
209
- filtered.each_with_index do |(_t, r), i|
210
- assert_equal({"hello"=>[1,2,3], "world"=>{"foo"=>"bar"}}, r['mixed_field'])
211
- end
212
- end
213
- end
214
-
215
- sub_test_case 'test placeholders' do
216
- def filter(config, msgs = [''])
217
- d = create_driver(config)
218
- yield d if block_given?
219
- d.run {
220
- records = msgs.map do |msg|
221
- next msg if msg.is_a?(Hash)
222
- { 'eventType0' => 'bar', 'message' => msg }
223
- end
224
- records.each do |record|
225
- d.feed(@tag, @time, record)
226
- end
227
- }
228
- d.filtered
229
- end
230
-
231
- %w[yes no].each do |enable_ruby|
232
- test "hostname with enable_ruby #{enable_ruby}" do
233
- config = %[
234
- enable_ruby #{enable_ruby}
235
- <record>
236
- message ${hostname}
237
- </record>
238
- ]
239
- filtered = filter(config)
240
- filtered.each do |t, r|
241
- assert_equal(@hostname, r['message'])
242
- end
243
- end
244
-
245
- test "tag with enable_ruby #{enable_ruby}" do
246
- config = %[
247
- enable_ruby #{enable_ruby}
248
- <record>
249
- message ${tag}
250
- </record>
251
- ]
252
- filtered = filter(config)
253
- filtered.each do |t, r|
254
- assert_equal(@tag, r['message'])
255
- end
256
- end
257
-
258
- test "tag_parts with enable_ruby #{enable_ruby}" do
259
- config = %[
260
- enable_ruby #{enable_ruby}
261
- <record>
262
- message ${tag_parts[0]} ${tag_parts[-1]}
263
- </record>
264
- ]
265
- expected = "#{@tag.split('.').first} #{@tag.split('.').last}"
266
- filtered = filter(config)
267
- filtered.each do |t, r|
268
- assert_equal(expected, r['message'])
269
- end
270
- end
271
-
272
- test "${tag_prefix[N]} and ${tag_suffix[N]} with enable_ruby #{enable_ruby}" do
273
- config = %[
274
- enable_ruby #{enable_ruby}
275
- <record>
276
- message ${tag_prefix[1]} ${tag_prefix[-2]} ${tag_suffix[2]} ${tag_suffix[-3]}
277
- </record>
278
- ]
279
- @tag = 'prefix.test.tag.suffix'
280
- expected = "prefix.test prefix.test.tag tag.suffix test.tag.suffix"
281
- filtered = filter(config)
282
- filtered.each do |t, r|
283
- assert_equal(expected, r['message'])
284
- end
285
- end
286
-
287
- test "time with enable_ruby #{enable_ruby}" do
288
- config = %[
289
- enable_ruby #{enable_ruby}
290
- <record>
291
- message ${time}
292
- </record>
293
- ]
294
- filtered = filter(config)
295
- filtered.each do |t, r|
296
- if enable_ruby == "yes"
297
- assert_equal(Time.at(@time).localtime, r['message'])
298
- else
299
- assert_equal(Time.at(@time).localtime.to_s, r['message'])
300
- end
301
- end
302
- end
303
-
304
- test "record keys with enable_ruby #{enable_ruby}" do
305
- config = %[
306
- enable_ruby #{enable_ruby}
307
- remove_keys eventType0
308
- <record>
309
- message bar ${record["message"]}
310
- eventtype ${record["eventType0"]}
311
- </record>
312
- ]
313
- msgs = ['1', '2']
314
- filtered = filter(config, msgs)
315
- filtered.each_with_index do |(_t, r), i|
316
- assert_not_include(r, 'eventType0')
317
- assert_equal("bar", r['eventtype'])
318
- assert_equal("bar #{msgs[i]}", r['message'])
319
- end
320
- end
321
-
322
- test "Prevent overwriting reserved keys such as tag with enable_ruby #{enable_ruby}" do
323
- config = %[
324
- enable_ruby #{enable_ruby}
325
- <record>
326
- new_tag ${tag}
327
- new_record_tag ${record["tag"]}
328
- </record>
329
- ]
330
- records = [{'tag' => 'tag', 'time' => 'time'}]
331
- filtered = filter(config, records)
332
- filtered.each_with_index do |(_t, r), i|
333
- assert_not_equal('tag', r['new_tag'])
334
- assert_equal(@tag, r['new_tag'])
335
- assert_equal('tag', r['new_record_tag'])
336
- end
337
- end
338
-
339
- test "hash values with placeholders with enable_ruby #{enable_ruby}" do
340
- config = %[
341
- enable_ruby #{enable_ruby}
342
- <record>
343
- hash_field {
344
- "hostname":"${hostname}",
345
- "tag":"${tag}",
346
- "${tag}":100
347
- }
348
- </record>
349
- ]
350
- msgs = ['1', '2']
351
- filtered = filter(config, msgs)
352
- filtered.each_with_index do |(_t, r), i|
353
- assert_equal({"hostname" => @hostname, "tag" => @tag, "#{@tag}" => 100}, r['hash_field'])
354
- end
355
- end
356
-
357
- test "array values with placeholders with enable_ruby #{enable_ruby}" do
358
- config = %[
359
- enable_ruby #{enable_ruby}
360
- <record>
361
- array_field ["${hostname}", "${tag}"]
362
- </record>
363
- ]
364
- msgs = ['1', '2']
365
- filtered = filter(config, msgs)
366
- filtered.each_with_index do |(_t, r), i|
367
- assert_equal([@hostname, @tag], r['array_field'])
368
- end
369
- end
370
-
371
- test "array and hash values with placeholders with enable_ruby #{enable_ruby}" do
372
- config = %[
373
- enable_ruby #{enable_ruby}
374
- <record>
375
- mixed_field [{"tag":"${tag}"}]
376
- </record>
377
- ]
378
- msgs = ['1', '2']
379
- filtered = filter(config, msgs)
380
- filtered.each_with_index do |(_t, r), i|
381
- assert_equal([{"tag" => @tag}], r['mixed_field'])
382
- end
383
- end
384
-
385
- test "keys with placeholders with enable_ruby #{enable_ruby}" do
386
- config = %[
387
- enable_ruby #{enable_ruby}
388
- renew_record true
389
- <record>
390
- ${hostname} hostname
391
- foo.${tag} tag
392
- </record>
393
- ]
394
- msgs = ['1', '2']
395
- filtered = filter(config, msgs)
396
- filtered.each_with_index do |(_t, r), i|
397
- assert_equal({@hostname=>'hostname',"foo.#{@tag}"=>'tag'}, r)
398
- end
399
- end
400
-
401
- test "disabled typecasting of values with enable_ruby #{enable_ruby}" do
402
- config = %[
403
- auto_typecast false
404
- enable_ruby #{enable_ruby}
405
- <record>
406
- single ${record["source"]}
407
- multiple ${record["source"]}${record["source"]}
408
- with_prefix prefix-${record["source"]}
409
- with_suffix ${record["source"]}-suffix
410
- with_quote record["source"][""]
411
- </record>
412
- ]
413
- msgs = [
414
- { "source" => "string" },
415
- { "source" => 123 },
416
- { "source" => [1, 2] },
417
- { "source" => {a:1, b:2} },
418
- { "source" => nil },
419
- ]
420
- expected_results = [
421
- { single: "string",
422
- multiple: "stringstring",
423
- with_prefix: "prefix-string",
424
- with_suffix: "string-suffix",
425
- with_quote: %Q{record["source"][""]} },
426
- { single: 123.to_s,
427
- multiple: "#{123.to_s}#{123.to_s}",
428
- with_prefix: "prefix-#{123.to_s}",
429
- with_suffix: "#{123.to_s}-suffix",
430
- with_quote: %Q{record["source"][""]} },
431
- { single: [1, 2].to_s,
432
- multiple: "#{[1, 2].to_s}#{[1, 2].to_s}",
433
- with_prefix: "prefix-#{[1, 2].to_s}",
434
- with_suffix: "#{[1, 2].to_s}-suffix",
435
- with_quote: %Q{record["source"][""]} },
436
- { single: {a:1, b:2}.to_s,
437
- multiple: "#{{a:1, b:2}.to_s}#{{a:1, b:2}.to_s}",
438
- with_prefix: "prefix-#{{a:1, b:2}.to_s}",
439
- with_suffix: "#{{a:1, b:2}.to_s}-suffix",
440
- with_quote: %Q{record["source"][""]} },
441
- { single: nil.to_s,
442
- multiple: "#{nil.to_s}#{nil.to_s}",
443
- with_prefix: "prefix-#{nil.to_s}",
444
- with_suffix: "#{nil.to_s}-suffix",
445
- with_quote: %Q{record["source"][""]} },
446
- ]
447
- actual_results = []
448
- filtered = filter(config, msgs)
449
- filtered.each_with_index do |(_t, r), i|
450
- actual_results << {
451
- single: r["single"],
452
- multiple: r["multiple"],
453
- with_prefix: r["with_prefix"],
454
- with_suffix: r["with_suffix"],
455
- with_quote: r["with_quote"],
456
- }
457
- end
458
- assert_equal(expected_results, actual_results)
459
- end
460
-
461
- test "enabled typecasting of values with enable_ruby #{enable_ruby}" do
462
- config = %[
463
- auto_typecast yes
464
- enable_ruby #{enable_ruby}
465
- <record>
466
- single ${record["source"]}
467
- multiple ${record["source"]}${record["source"]}
468
- with_prefix prefix-${record["source"]}
469
- with_suffix ${record["source"]}-suffix
470
- </record>
471
- ]
472
- msgs = [
473
- { "source" => "string" },
474
- { "source" => 123 },
475
- { "source" => [1, 2] },
476
- { "source" => {a:1, b:2} },
477
- { "source" => nil },
478
- ]
479
- expected_results = [
480
- { single: "string",
481
- multiple: "stringstring",
482
- with_prefix: "prefix-string",
483
- with_suffix: "string-suffix" },
484
- { single: 123,
485
- multiple: "#{123.to_s}#{123.to_s}",
486
- with_prefix: "prefix-#{123.to_s}",
487
- with_suffix: "#{123.to_s}-suffix" },
488
- { single: [1, 2],
489
- multiple: "#{[1, 2].to_s}#{[1, 2].to_s}",
490
- with_prefix: "prefix-#{[1, 2].to_s}",
491
- with_suffix: "#{[1, 2].to_s}-suffix" },
492
- { single: {a:1, b:2},
493
- multiple: "#{{a:1, b:2}.to_s}#{{a:1, b:2}.to_s}",
494
- with_prefix: "prefix-#{{a:1, b:2}.to_s}",
495
- with_suffix: "#{{a:1, b:2}.to_s}-suffix" },
496
- { single: nil,
497
- multiple: "#{nil.to_s}#{nil.to_s}",
498
- with_prefix: "prefix-#{nil.to_s}",
499
- with_suffix: "#{nil.to_s}-suffix" },
500
- ]
501
- actual_results = []
502
- filtered = filter(config, msgs)
503
- filtered.each_with_index do |(_t, r), i|
504
- actual_results << {
505
- single: r["single"],
506
- multiple: r["multiple"],
507
- with_prefix: r["with_prefix"],
508
- with_suffix: r["with_suffix"],
509
- }
510
- end
511
- assert_equal(expected_results, actual_results)
512
- end
513
- end
514
-
515
- test 'unknown placeholder (enable_ruby no)' do
516
- config = %[
517
- enable_ruby no
518
- <record>
519
- message ${unknown}
520
- </record>
521
- ]
522
- filter(config) { |d|
523
- mock(d.instance.log).warn("unknown placeholder `${unknown}` found")
524
- }
525
- end
526
-
527
- test 'expand fields starting with @ (enable_ruby no)' do
528
- config = %[
529
- enable_ruby no
530
- <record>
531
- foo ${record["@timestamp"]}
532
- </record>
533
- ]
534
- d = create_driver(config)
535
- message = {"@timestamp" => "foo"}
536
- d.run { d.feed(@tag, @time, message) }
537
- filtered = d.filtered
538
- filtered.each do |t, r|
539
- assert_equal(message["@timestamp"], r['foo'])
540
- end
541
- end
542
-
543
- test 'auto_typecast placeholder containing {} (enable_ruby yes)' do
544
- config = %[
545
- tag tag
546
- enable_ruby yes
547
- auto_typecast yes
548
- <record>
549
- foo ${record.map{|k,v|v}}
550
- </record>
551
- ]
552
- d = create_driver(config)
553
- message = {"@timestamp" => "foo"}
554
- d.run { d.feed(@tag, @time, message) }
555
- filtered = d.filtered
556
- filtered.each do |t, r|
557
- assert_equal([message["@timestamp"]], r['foo'])
558
- end
559
- end
560
- end # test placeholders
561
-
562
- sub_test_case 'test error record' do
563
- test 'invalid record for placeholders' do
564
- d = create_driver(%[
565
- enable_ruby yes
566
- <record>
567
- foo ${record["unknown"]["key"]}
568
- </record>
569
- ])
570
- flexmock(d.instance.router).should_receive(:emit_error_event).
571
- with(String, Fluent::EventTime, Hash, RuntimeError).once
572
- d.run do
573
- d.feed(@tag, Fluent::EventTime.now, {'key' => 'value'})
574
- end
575
- end
576
- end
577
- end