fluentd 1.17.0-x86-mingw32 → 1.17.1-x86-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 (259) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/README.md +1 -0
  4. data/SECURITY.md +2 -2
  5. data/fluent.conf +14 -14
  6. data/lib/fluent/command/cap_ctl.rb +4 -4
  7. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  8. data/lib/fluent/compat/propagate_default.rb +4 -4
  9. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  10. data/lib/fluent/log/console_adapter.rb +4 -2
  11. data/lib/fluent/plugin/in_exec.rb +14 -2
  12. data/lib/fluent/plugin/in_http.rb +1 -1
  13. data/lib/fluent/plugin/in_sample.rb +13 -7
  14. data/lib/fluent/plugin/in_tail.rb +65 -23
  15. data/lib/fluent/plugin/out_copy.rb +1 -1
  16. data/lib/fluent/plugin/out_file.rb +8 -0
  17. data/lib/fluent/plugin/out_http.rb +12 -0
  18. data/lib/fluent/plugin/parser_json.rb +4 -12
  19. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  20. data/lib/fluent/version.rb +1 -1
  21. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  22. metadata +25 -472
  23. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
  24. data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
  25. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  26. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  27. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  28. data/.github/ISSUE_TEMPLATE.md +0 -17
  29. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  30. data/.github/workflows/stale-actions.yml +0 -24
  31. data/.github/workflows/test-ruby-head.yml +0 -31
  32. data/.github/workflows/test.yml +0 -32
  33. data/.gitignore +0 -30
  34. data/Gemfile +0 -9
  35. data/fluentd.gemspec +0 -62
  36. data/test/command/test_binlog_reader.rb +0 -362
  37. data/test/command/test_ca_generate.rb +0 -70
  38. data/test/command/test_cap_ctl.rb +0 -100
  39. data/test/command/test_cat.rb +0 -128
  40. data/test/command/test_ctl.rb +0 -56
  41. data/test/command/test_fluentd.rb +0 -1291
  42. data/test/command/test_plugin_config_formatter.rb +0 -397
  43. data/test/command/test_plugin_generator.rb +0 -109
  44. data/test/compat/test_calls_super.rb +0 -166
  45. data/test/compat/test_parser.rb +0 -92
  46. data/test/config/assertions.rb +0 -42
  47. data/test/config/test_config_parser.rb +0 -551
  48. data/test/config/test_configurable.rb +0 -1784
  49. data/test/config/test_configure_proxy.rb +0 -604
  50. data/test/config/test_dsl.rb +0 -415
  51. data/test/config/test_element.rb +0 -518
  52. data/test/config/test_literal_parser.rb +0 -309
  53. data/test/config/test_plugin_configuration.rb +0 -56
  54. data/test/config/test_section.rb +0 -191
  55. data/test/config/test_system_config.rb +0 -195
  56. data/test/config/test_types.rb +0 -408
  57. data/test/counter/test_client.rb +0 -563
  58. data/test/counter/test_error.rb +0 -44
  59. data/test/counter/test_mutex_hash.rb +0 -179
  60. data/test/counter/test_server.rb +0 -589
  61. data/test/counter/test_store.rb +0 -258
  62. data/test/counter/test_validator.rb +0 -137
  63. data/test/helper.rb +0 -155
  64. data/test/helpers/fuzzy_assert.rb +0 -89
  65. data/test/helpers/process_extenstion.rb +0 -33
  66. data/test/log/test_console_adapter.rb +0 -117
  67. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  68. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  69. data/test/plugin/data/2010/01/20100102.log +0 -0
  70. data/test/plugin/data/log/bar +0 -0
  71. data/test/plugin/data/log/foo/bar.log +0 -0
  72. data/test/plugin/data/log/foo/bar2 +0 -0
  73. data/test/plugin/data/log/test.log +0 -0
  74. data/test/plugin/data/log_numeric/01.log +0 -0
  75. data/test/plugin/data/log_numeric/02.log +0 -0
  76. data/test/plugin/data/log_numeric/12.log +0 -0
  77. data/test/plugin/data/log_numeric/14.log +0 -0
  78. data/test/plugin/data/sd_file/config +0 -11
  79. data/test/plugin/data/sd_file/config.json +0 -17
  80. data/test/plugin/data/sd_file/config.yaml +0 -11
  81. data/test/plugin/data/sd_file/config.yml +0 -11
  82. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  83. data/test/plugin/in_tail/test_fifo.rb +0 -121
  84. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  85. data/test/plugin/in_tail/test_position_file.rb +0 -346
  86. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  87. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  88. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  89. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  90. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  91. data/test/plugin/test_bare_output.rb +0 -131
  92. data/test/plugin/test_base.rb +0 -247
  93. data/test/plugin/test_buf_file.rb +0 -1314
  94. data/test/plugin/test_buf_file_single.rb +0 -898
  95. data/test/plugin/test_buf_memory.rb +0 -42
  96. data/test/plugin/test_buffer.rb +0 -1493
  97. data/test/plugin/test_buffer_chunk.rb +0 -209
  98. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  99. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  100. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  101. data/test/plugin/test_compressable.rb +0 -87
  102. data/test/plugin/test_file_util.rb +0 -96
  103. data/test/plugin/test_filter.rb +0 -368
  104. data/test/plugin/test_filter_grep.rb +0 -697
  105. data/test/plugin/test_filter_parser.rb +0 -731
  106. data/test/plugin/test_filter_record_transformer.rb +0 -577
  107. data/test/plugin/test_filter_stdout.rb +0 -207
  108. data/test/plugin/test_formatter_csv.rb +0 -136
  109. data/test/plugin/test_formatter_hash.rb +0 -38
  110. data/test/plugin/test_formatter_json.rb +0 -61
  111. data/test/plugin/test_formatter_ltsv.rb +0 -70
  112. data/test/plugin/test_formatter_msgpack.rb +0 -28
  113. data/test/plugin/test_formatter_out_file.rb +0 -116
  114. data/test/plugin/test_formatter_single_value.rb +0 -44
  115. data/test/plugin/test_formatter_tsv.rb +0 -76
  116. data/test/plugin/test_in_debug_agent.rb +0 -49
  117. data/test/plugin/test_in_exec.rb +0 -261
  118. data/test/plugin/test_in_forward.rb +0 -1178
  119. data/test/plugin/test_in_gc_stat.rb +0 -62
  120. data/test/plugin/test_in_http.rb +0 -1124
  121. data/test/plugin/test_in_monitor_agent.rb +0 -922
  122. data/test/plugin/test_in_object_space.rb +0 -66
  123. data/test/plugin/test_in_sample.rb +0 -190
  124. data/test/plugin/test_in_syslog.rb +0 -505
  125. data/test/plugin/test_in_tail.rb +0 -3429
  126. data/test/plugin/test_in_tcp.rb +0 -328
  127. data/test/plugin/test_in_udp.rb +0 -296
  128. data/test/plugin/test_in_unix.rb +0 -181
  129. data/test/plugin/test_input.rb +0 -137
  130. data/test/plugin/test_metadata.rb +0 -89
  131. data/test/plugin/test_metrics.rb +0 -294
  132. data/test/plugin/test_metrics_local.rb +0 -96
  133. data/test/plugin/test_multi_output.rb +0 -204
  134. data/test/plugin/test_out_copy.rb +0 -308
  135. data/test/plugin/test_out_exec.rb +0 -312
  136. data/test/plugin/test_out_exec_filter.rb +0 -606
  137. data/test/plugin/test_out_file.rb +0 -1038
  138. data/test/plugin/test_out_forward.rb +0 -1349
  139. data/test/plugin/test_out_http.rb +0 -557
  140. data/test/plugin/test_out_null.rb +0 -105
  141. data/test/plugin/test_out_relabel.rb +0 -28
  142. data/test/plugin/test_out_roundrobin.rb +0 -146
  143. data/test/plugin/test_out_secondary_file.rb +0 -458
  144. data/test/plugin/test_out_stdout.rb +0 -205
  145. data/test/plugin/test_out_stream.rb +0 -103
  146. data/test/plugin/test_output.rb +0 -1334
  147. data/test/plugin/test_output_as_buffered.rb +0 -2024
  148. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  149. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  150. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  151. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  152. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  153. data/test/plugin/test_output_as_standard.rb +0 -374
  154. data/test/plugin/test_owned_by.rb +0 -34
  155. data/test/plugin/test_parser.rb +0 -399
  156. data/test/plugin/test_parser_apache.rb +0 -42
  157. data/test/plugin/test_parser_apache2.rb +0 -47
  158. data/test/plugin/test_parser_apache_error.rb +0 -45
  159. data/test/plugin/test_parser_csv.rb +0 -200
  160. data/test/plugin/test_parser_json.rb +0 -244
  161. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  162. data/test/plugin/test_parser_msgpack.rb +0 -127
  163. data/test/plugin/test_parser_multiline.rb +0 -111
  164. data/test/plugin/test_parser_nginx.rb +0 -88
  165. data/test/plugin/test_parser_none.rb +0 -52
  166. data/test/plugin/test_parser_regexp.rb +0 -284
  167. data/test/plugin/test_parser_syslog.rb +0 -650
  168. data/test/plugin/test_parser_tsv.rb +0 -122
  169. data/test/plugin/test_sd_file.rb +0 -228
  170. data/test/plugin/test_sd_srv.rb +0 -230
  171. data/test/plugin/test_storage.rb +0 -166
  172. data/test/plugin/test_storage_local.rb +0 -335
  173. data/test/plugin/test_string_util.rb +0 -26
  174. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  175. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  176. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  177. data/test/plugin_helper/data/cert/cert.pem +0 -19
  178. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  179. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  180. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  181. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  182. data/test/plugin_helper/data/cert/empty.pem +0 -0
  183. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  184. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  185. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  186. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  187. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  188. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  189. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  191. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  192. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  193. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  194. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  195. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  196. data/test/plugin_helper/http_server/test_app.rb +0 -65
  197. data/test/plugin_helper/http_server/test_route.rb +0 -32
  198. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  199. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  200. data/test/plugin_helper/test_cert_option.rb +0 -25
  201. data/test/plugin_helper/test_child_process.rb +0 -862
  202. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  203. data/test/plugin_helper/test_event_emitter.rb +0 -80
  204. data/test/plugin_helper/test_event_loop.rb +0 -52
  205. data/test/plugin_helper/test_extract.rb +0 -194
  206. data/test/plugin_helper/test_formatter.rb +0 -255
  207. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  208. data/test/plugin_helper/test_inject.rb +0 -561
  209. data/test/plugin_helper/test_metrics.rb +0 -137
  210. data/test/plugin_helper/test_parser.rb +0 -264
  211. data/test/plugin_helper/test_record_accessor.rb +0 -238
  212. data/test/plugin_helper/test_retry_state.rb +0 -1006
  213. data/test/plugin_helper/test_server.rb +0 -1895
  214. data/test/plugin_helper/test_service_discovery.rb +0 -165
  215. data/test/plugin_helper/test_socket.rb +0 -146
  216. data/test/plugin_helper/test_storage.rb +0 -542
  217. data/test/plugin_helper/test_thread.rb +0 -164
  218. data/test/plugin_helper/test_timer.rb +0 -130
  219. data/test/scripts/exec_script.rb +0 -32
  220. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  221. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  222. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  223. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  224. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  225. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  226. data/test/test_capability.rb +0 -74
  227. data/test/test_clock.rb +0 -164
  228. data/test/test_config.rb +0 -369
  229. data/test/test_configdsl.rb +0 -148
  230. data/test/test_daemonizer.rb +0 -91
  231. data/test/test_engine.rb +0 -203
  232. data/test/test_event.rb +0 -531
  233. data/test/test_event_router.rb +0 -348
  234. data/test/test_event_time.rb +0 -199
  235. data/test/test_file_wrapper.rb +0 -53
  236. data/test/test_filter.rb +0 -121
  237. data/test/test_fluent_log_event_router.rb +0 -99
  238. data/test/test_formatter.rb +0 -369
  239. data/test/test_input.rb +0 -31
  240. data/test/test_log.rb +0 -1076
  241. data/test/test_match.rb +0 -148
  242. data/test/test_mixin.rb +0 -351
  243. data/test/test_msgpack_factory.rb +0 -50
  244. data/test/test_oj_options.rb +0 -55
  245. data/test/test_output.rb +0 -278
  246. data/test/test_plugin.rb +0 -251
  247. data/test/test_plugin_classes.rb +0 -370
  248. data/test/test_plugin_helper.rb +0 -81
  249. data/test/test_plugin_id.rb +0 -119
  250. data/test/test_process.rb +0 -14
  251. data/test/test_root_agent.rb +0 -951
  252. data/test/test_static_config_analysis.rb +0 -177
  253. data/test/test_supervisor.rb +0 -821
  254. data/test/test_test_drivers.rb +0 -136
  255. data/test/test_time_formatter.rb +0 -301
  256. data/test/test_time_parser.rb +0 -362
  257. data/test/test_tls.rb +0 -65
  258. data/test/test_unique_id.rb +0 -47
  259. 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