fluentd 1.16.5-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 (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,542 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin_helper/storage'
3
- require 'fluent/plugin/base'
4
-
5
- class ExampleStorage < Fluent::Plugin::Storage
6
- Fluent::Plugin.register_storage('example', self)
7
-
8
- attr_reader :data, :saved, :load_times, :save_times
9
-
10
- def initialize
11
- super
12
- @data = {}
13
- @saved = {}
14
- @load_times = 0
15
- @save_times = 0
16
- end
17
- def load
18
- @data ||= {}
19
- @load_times += 1
20
- end
21
- def save
22
- @saved = @data.dup
23
- @save_times += 1
24
- end
25
- def get(key)
26
- @data[key]
27
- end
28
- def fetch(key, defval)
29
- @data.fetch(key, defval)
30
- end
31
- def put(key, value)
32
- @data[key] = value
33
- end
34
- def delete(key)
35
- @data.delete(key)
36
- end
37
- def update(key, &block)
38
- @data[key] = block.call(@data[key])
39
- end
40
- def close
41
- @data = {}
42
- super
43
- end
44
- def terminate
45
- @saved = {}
46
- @load_times = @save_times = 0
47
- super
48
- end
49
- end
50
-
51
- class Example2Storage < ExampleStorage
52
- Fluent::Plugin.register_storage('ex2', self)
53
- config_param :dummy_path, :string, default: 'dummy'
54
- end
55
- class Example3Storage < ExampleStorage
56
- Fluent::Plugin.register_storage('ex3', self)
57
- def synchronized?
58
- true
59
- end
60
- end
61
- class Example4Storage < ExampleStorage
62
- Fluent::Plugin.register_storage('ex4', self)
63
- def persistent_always?
64
- true
65
- end
66
- def synchronized?
67
- true
68
- end
69
- end
70
-
71
- class StorageHelperTest < Test::Unit::TestCase
72
- class Dummy < Fluent::Plugin::TestBase
73
- helpers :storage
74
- end
75
-
76
- class Dummy2 < Fluent::Plugin::TestBase
77
- helpers :storage
78
- config_section :storage do
79
- config_set_default :@type, 'ex2'
80
- config_set_default :dummy_path, '/tmp/yay'
81
- end
82
- end
83
-
84
- setup do
85
- @d = nil
86
- end
87
-
88
- teardown do
89
- if @d
90
- @d.stop unless @d.stopped?
91
- @d.shutdown unless @d.shutdown?
92
- @d.close unless @d.closed?
93
- @d.terminate unless @d.terminated?
94
- end
95
- end
96
-
97
- test 'can be initialized without any storages at first' do
98
- d = Dummy.new
99
- assert_equal 0, d._storages.size
100
- end
101
-
102
- test 'can be configured with hash' do
103
- d = Dummy.new
104
- d.configure(config_element())
105
- conf = { '@type' => 'example' }
106
- assert_nothing_raised do
107
- d.storage_create(conf: conf)
108
- end
109
- end
110
-
111
- test 'can override default configuration parameters, but not overwrite whole definition' do
112
- d = Dummy.new
113
- d.configure(config_element())
114
- assert_equal 1, d.storage_configs.size
115
- assert_equal 'local', d.storage_configs.first[:@type]
116
-
117
- d = Dummy2.new
118
- d.configure(config_element('ROOT', '', {}, [config_element('storage', '', {}, [])]))
119
- assert_raise NoMethodError do
120
- d.storage
121
- end
122
- assert_equal 1, d.storage_configs.size
123
- assert_equal 'ex2', d.storage_configs.first[:@type]
124
- assert_equal '/tmp/yay', d.storage_configs.first.dummy_path
125
- end
126
-
127
- test 'creates instance of type specified by conf, or default_type if @type is missing in conf' do
128
- d = Dummy2.new
129
- d.configure(config_element())
130
- i = d.storage_create(conf: config_element('format', '', {'@type' => 'example'}), default_type: 'ex2')
131
- assert{ i.is_a?(Fluent::PluginHelper::Storage::SynchronizeWrapper) && i.instance_eval{ @storage }.is_a?(ExampleStorage) }
132
-
133
- d = Dummy2.new
134
- d.configure(config_element())
135
- i = d.storage_create(conf: nil, default_type: 'ex2')
136
- assert{ i.is_a?(Fluent::PluginHelper::Storage::SynchronizeWrapper) && i.instance_eval{ @storage }.is_a?(Example2Storage) }
137
- end
138
-
139
- test 'raises config error if config section is specified, but @type is not specified' do
140
- d = Dummy2.new
141
- d.configure(config_element())
142
- assert_raise Fluent::ConfigError.new("@type is required in <storage>") do
143
- d.storage_create(conf: config_element('storage', 'foo', {}), default_type: 'ex2')
144
- end
145
- end
146
-
147
- test 'raises config error if config argument has invalid characters' do
148
- d = Dummy.new
149
- assert_raise Fluent::ConfigError.new("Argument in <storage ARG> uses invalid characters: 'yaa y'") do
150
- d.configure(config_element('root', '', {}, [config_element('storage', 'yaa y', {'@type' => 'local'})]))
151
- end
152
- d.configure(config_element())
153
- assert_raise Fluent::ConfigError.new("Argument in <storage ARG> uses invalid characters: 'a,b'") do
154
- d.storage_create(usage: 'a,b', type: 'local')
155
- end
156
- end
157
-
158
- test 'can be configured without storage sections' do
159
- d = Dummy.new
160
- assert_nothing_raised do
161
- d.configure(config_element())
162
- end
163
- assert_equal 1, d._storages.size
164
- end
165
-
166
- test 'can be configured with a storage section' do
167
- d = Dummy.new
168
- conf = config_element('ROOT', '', {}, [
169
- config_element('storage', '', {'@type' => 'example'})
170
- ])
171
- assert_nothing_raised do
172
- d.configure(conf)
173
- end
174
- assert_equal 1, d._storages.size
175
- assert{ d._storages.values.all?{ |s| !s.running } }
176
- end
177
-
178
- test 'can be configured with 2 or more storage sections with different usages with each other' do
179
- d = Dummy.new
180
- conf = config_element('ROOT', '', {}, [
181
- config_element('storage', 'default', {'@type' => 'example'}),
182
- config_element('storage', 'extra', {'@type' => 'ex2', 'dummy_path' => 'v'}),
183
- ])
184
- assert_nothing_raised do
185
- d.configure(conf)
186
- end
187
- assert_equal 2, d._storages.size
188
- assert{ d._storages.values.all?{ |s| !s.running } }
189
- end
190
-
191
- test 'cannot be configured with 2 storage sections with same usage' do
192
- d = Dummy.new
193
- conf = config_element('ROOT', '', {}, [
194
- config_element('storage', 'default', {'@type' => 'example'}),
195
- config_element('storage', 'extra', {'@type' => 'ex2', 'dummy_path' => 'v'}),
196
- config_element('storage', 'extra', {'@type' => 'ex2', 'dummy_path' => 'v2'}),
197
- ])
198
- assert_raises Fluent::ConfigError do
199
- d.configure(conf)
200
- end
201
- end
202
-
203
- test 'creates a storage plugin instance which is already configured without usage' do
204
- @d = d = Dummy.new
205
- conf = config_element('ROOT', '', {}, [
206
- config_element('storage', '', {'@type' => 'example'})
207
- ])
208
- d.configure(conf)
209
- d.start
210
-
211
- s = d.storage_create
212
- assert{ s.implementation.is_a? ExampleStorage }
213
- end
214
-
215
- test 'creates a storage plugin instance which is already configured with usage' do
216
- @d = d = Dummy.new
217
- conf = config_element('ROOT', '', {}, [
218
- config_element('storage', 'mydata', {'@type' => 'example'})
219
- ])
220
- d.configure(conf)
221
- d.start
222
-
223
- s = d.storage_create(usage: 'mydata')
224
- assert{ s.implementation.is_a? ExampleStorage }
225
- end
226
-
227
- test 'creates a storage plugin without configurations' do
228
- @d = d = Dummy.new
229
- d.configure(config_element())
230
- d.start
231
-
232
- s = d.storage_create(usage: 'mydata', type: 'example', conf: config_element('storage', 'mydata'))
233
- assert{ s.implementation.is_a? ExampleStorage }
234
- end
235
-
236
- test 'creates 2 or more storage plugin instances' do
237
- @d = d = Dummy.new
238
- conf = config_element('ROOT', '', {}, [
239
- config_element('storage', 'mydata', {'@type' => 'example'}),
240
- config_element('storage', 'secret', {'@type' => 'ex2', 'dummy_path' => 'yay!'}),
241
- ])
242
- d.configure(conf)
243
- d.start
244
-
245
- s1 = d.storage_create(usage: 'mydata')
246
- s2 = d.storage_create(usage: 'secret')
247
- assert{ s1.implementation.is_a? ExampleStorage }
248
- assert{ s2.implementation.is_a? Example2Storage }
249
- assert_equal 'yay!', s2.implementation.dummy_path
250
- end
251
-
252
- test 'creates wrapped instances for non-synchronized plugin in default' do # and check operations
253
- @d = d = Dummy.new
254
- conf = config_element('ROOT', '', {}, [
255
- config_element('storage', 'mydata', {'@type' => 'example'})
256
- ])
257
- d.configure(conf)
258
- d.start
259
-
260
- s = d.storage_create(usage: 'mydata')
261
- assert !s.implementation.synchronized?
262
- assert{ s.is_a? Fluent::PluginHelper::Storage::SynchronizeWrapper }
263
- assert s.synchronized?
264
- assert s.autosave
265
- assert s.save_at_shutdown
266
-
267
- assert_nil s.get('key')
268
- assert_equal 'value', s.put('key', 'value')
269
- assert_equal 'value', s.fetch('key', 'v1')
270
- assert_equal 'v2', s.update('key'){|v| v[0] + '2' }
271
- assert_equal 'v2', s.get('key')
272
- assert_equal 'v2', s.delete('key')
273
- end
274
-
275
- test 'creates wrapped instances for non-persistent plugins when configured as persistent' do # and check operations
276
- @d = d = Dummy.new
277
- conf = config_element('ROOT', '', {}, [
278
- config_element('storage', 'mydata', {'@type' => 'example', 'persistent' => 'true'})
279
- ])
280
- d.configure(conf)
281
- d.start
282
-
283
- s = d.storage_create(usage: 'mydata')
284
- assert !s.implementation.persistent_always?
285
- assert{ s.is_a? Fluent::PluginHelper::Storage::PersistentWrapper }
286
- assert s.persistent
287
- assert s.persistent_always?
288
- assert s.synchronized?
289
- assert !s.autosave
290
- assert s.save_at_shutdown
291
-
292
- assert_nil s.get('key')
293
- assert_equal 'value', s.put('key', 'value')
294
- assert_equal 'value', s.fetch('key', 'v1')
295
- assert_equal 'v2', s.update('key'){|v| v[0] + '2' }
296
- assert_equal 'v2', s.get('key')
297
- assert_equal 'v2', s.delete('key')
298
- end
299
-
300
- test 'creates bare instances for synchronized plugin in default' do
301
- @d = d = Dummy.new
302
- conf = config_element('ROOT', '', {}, [
303
- config_element('storage', 'mydata', {'@type' => 'ex3'})
304
- ])
305
- d.configure(conf)
306
- d.start
307
-
308
- s = d.storage_create(usage: 'mydata')
309
- assert s.implementation.synchronized?
310
- assert{ s.is_a? Example3Storage }
311
- assert s.synchronized?
312
- end
313
-
314
- test 'creates bare instances for persistent-always plugin when configured as persistent' do
315
- @d = d = Dummy.new
316
- conf = config_element('ROOT', '', {}, [
317
- config_element('storage', 'mydata', {'@type' => 'ex4', 'persistent' => 'true'})
318
- ])
319
- d.configure(conf)
320
- d.start
321
-
322
- s = d.storage_create(usage: 'mydata')
323
- assert s.implementation.persistent_always?
324
- assert{ s.is_a? Example4Storage }
325
- assert s.persistent
326
- assert s.persistent_always?
327
- assert s.synchronized?
328
- end
329
-
330
- test 'does not execute timer if autosave is not specified' do
331
- @d = d = Dummy.new
332
- conf = config_element('ROOT', '', {}, [
333
- config_element('storage', 'mydata', {'@type' => 'example', 'autosave' => 'false'})
334
- ])
335
- d.configure(conf)
336
- d.start
337
-
338
- d.storage_create(usage: 'mydata')
339
- assert_equal 0, d._timers.size
340
- end
341
-
342
- test 'executes timer if autosave is specified and plugin is not persistent' do
343
- @d = d = Dummy.new
344
- conf = config_element('ROOT', '', {}, [
345
- config_element('storage', 'mydata', {'@type' => 'example', 'autosave_interval' => '1s', 'persistent' => 'false'})
346
- ])
347
- d.configure(conf)
348
- d.start
349
-
350
- d.storage_create(usage: 'mydata')
351
- assert_equal 1, d._timers.size
352
- end
353
-
354
- test 'executes timer for autosave, which calls #save periodically' do
355
- @d = d = Dummy.new
356
- conf = config_element('ROOT', '', {}, [
357
- config_element('storage', 'mydata', {'@type' => 'example', 'autosave_interval' => '1s', 'persistent' => 'false'})
358
- ])
359
- d.configure(conf)
360
- d.start
361
-
362
- s = d.storage_create(usage: 'mydata')
363
- assert_equal 1, d._timers.size
364
- timeout = Time.now + 3
365
- while Time.now < timeout
366
- s.put('k', 'v')
367
- sleep 0.2
368
- end
369
-
370
- d.stop
371
- assert{ s.implementation.save_times > 0 }
372
- end
373
-
374
- test 'saves data for each operations if plugin storage is configured as persistent, and wrapped' do
375
- @d = d = Dummy.new
376
- conf = config_element('ROOT', '', {}, [
377
- config_element('storage', 'mydata', {'@type' => 'example', 'persistent' => 'true'})
378
- ])
379
- d.configure(conf)
380
- d.start
381
- s = d.storage_create(usage: 'mydata')
382
- assert_equal 1, s.implementation.load_times
383
- assert_equal 0, s.implementation.save_times
384
-
385
- s.get('k1')
386
- assert_equal 2, s.implementation.load_times
387
- assert_equal 0, s.implementation.save_times
388
-
389
- s.put('k1', 'v1')
390
- assert_equal 3, s.implementation.load_times
391
- assert_equal 1, s.implementation.save_times
392
-
393
- s.fetch('k2', 'v2')
394
- assert_equal 4, s.implementation.load_times
395
- assert_equal 1, s.implementation.save_times
396
-
397
- s.delete('k1')
398
- assert_equal 5, s.implementation.load_times
399
- assert_equal 2, s.implementation.save_times
400
- end
401
-
402
- test 'stops timer for autosave by #stop, calls #save by #shutdown if save_at_shutdown is specified' do
403
- @d = d = Dummy.new
404
- conf = config_element('ROOT', '', {}, [
405
- config_element('storage', 'mydata', {'@type' => 'example', 'save_at_shutdown' => 'true'})
406
- ])
407
- d.configure(conf)
408
-
409
- assert !d.timer_running?
410
-
411
- d.start
412
-
413
- assert d.timer_running?
414
-
415
- s = d.storage_create(usage: 'mydata')
416
- assert s.autosave
417
- assert_equal 1, d._timers.size
418
-
419
- d.stop
420
-
421
- assert !d.timer_running?
422
-
423
- assert_equal 1, s.implementation.load_times
424
- assert_equal 0, s.implementation.save_times
425
-
426
- d.before_shutdown
427
-
428
- d.shutdown
429
-
430
- assert_equal 1, s.implementation.load_times
431
- assert_equal 1, s.implementation.save_times
432
- end
433
-
434
- test 'calls #close and #terminate for all plugin instances by #close/#shutdown' do
435
- @d = d = Dummy.new
436
- conf = config_element('ROOT', '', {}, [
437
- config_element('storage', 'mydata', {'@type' => 'example', 'autosave' => 'false', 'save_at_shutdown' => 'true'})
438
- ])
439
- d.configure(conf)
440
- d.start
441
- s = d.storage_create(usage: 'mydata')
442
-
443
- s.put('k1', 'v1')
444
- s.put('k2', 2)
445
- s.put('k3', true)
446
-
447
- d.stop
448
-
449
- assert_equal 3, s.implementation.data.size
450
- assert_equal 0, s.implementation.saved.size
451
-
452
- d.shutdown
453
-
454
- assert_equal 3, s.implementation.data.size
455
- assert_equal 3, s.implementation.saved.size
456
-
457
- d.close
458
-
459
- assert_equal 0, s.implementation.data.size
460
- assert_equal 3, s.implementation.saved.size
461
-
462
- d.shutdown
463
-
464
- assert_equal 0, s.implementation.data.size
465
- assert_equal 0, s.implementation.saved.size
466
- end
467
-
468
- test 'calls lifecycle methods for all plugin instances via owner plugin' do
469
- @d = d = Dummy.new
470
- conf = config_element('ROOT', '', {}, [ config_element('storage', '', {'@type' => 'example'}), config_element('storage', 'e2', {'@type' => 'example'}) ])
471
- d.configure(conf)
472
- d.start
473
-
474
- i1 = d.storage_create(usage: '')
475
- i2 = d.storage_create(usage: 'e2')
476
- i3 = d.storage_create(usage: 'e3', type: 'ex2')
477
-
478
- assert i1.started?
479
- assert i2.started?
480
- assert i3.started?
481
-
482
- assert !i1.stopped?
483
- assert !i2.stopped?
484
- assert !i3.stopped?
485
-
486
- d.stop
487
-
488
- assert i1.stopped?
489
- assert i2.stopped?
490
- assert i3.stopped?
491
-
492
- assert !i1.before_shutdown?
493
- assert !i2.before_shutdown?
494
- assert !i3.before_shutdown?
495
-
496
- d.before_shutdown
497
-
498
- assert i1.before_shutdown?
499
- assert i2.before_shutdown?
500
- assert i3.before_shutdown?
501
-
502
- assert !i1.shutdown?
503
- assert !i2.shutdown?
504
- assert !i3.shutdown?
505
-
506
- d.shutdown
507
-
508
- assert i1.shutdown?
509
- assert i2.shutdown?
510
- assert i3.shutdown?
511
-
512
- assert !i1.after_shutdown?
513
- assert !i2.after_shutdown?
514
- assert !i3.after_shutdown?
515
-
516
- d.after_shutdown
517
-
518
- assert i1.after_shutdown?
519
- assert i2.after_shutdown?
520
- assert i3.after_shutdown?
521
-
522
- assert !i1.closed?
523
- assert !i2.closed?
524
- assert !i3.closed?
525
-
526
- d.close
527
-
528
- assert i1.closed?
529
- assert i2.closed?
530
- assert i3.closed?
531
-
532
- assert !i1.terminated?
533
- assert !i2.terminated?
534
- assert !i3.terminated?
535
-
536
- d.terminate
537
-
538
- assert i1.terminated?
539
- assert i2.terminated?
540
- assert i3.terminated?
541
- end
542
- end
@@ -1,164 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin_helper/thread'
3
- require 'fluent/plugin/base'
4
- require 'timeout'
5
-
6
- class ThreadTest < Test::Unit::TestCase
7
- class Dummy < Fluent::Plugin::TestBase
8
- helpers :thread
9
- def configure(conf)
10
- super
11
- @_thread_wait_seconds = 0.1
12
- self
13
- end
14
- end
15
-
16
- test 'can be instantiated to be able to create threads' do
17
- d1 = Dummy.new
18
- assert d1.respond_to?(:thread_current_running?)
19
- assert d1.respond_to?(:thread_create)
20
- assert d1.respond_to?(:_threads)
21
- assert !d1.thread_current_running?
22
- assert d1._threads.empty?
23
- end
24
-
25
- test 'can be configured' do
26
- d1 = Dummy.new
27
- assert_nothing_raised do
28
- d1.configure(config_element())
29
- end
30
- assert d1.plugin_id
31
- assert d1.log
32
- end
33
-
34
- test 'can create thread after prepared' do
35
- d1 = Dummy.new
36
- d1.configure(config_element())
37
- d1.start
38
-
39
- m1 = Mutex.new
40
- m2 = Mutex.new
41
-
42
- m1.lock
43
- thread_run = false
44
-
45
- Timeout.timeout(10) do
46
- t = d1.thread_create(:test1) do
47
- m2.lock
48
-
49
- assert !d1._threads.empty? # this must be true always
50
- assert d1.thread_current_running?
51
-
52
- thread_run = true
53
- m2.unlock
54
- m1.lock
55
- end
56
- Thread.pass until m2.locked? || thread_run
57
-
58
- m2.lock; m2.unlock
59
- assert_equal 1, d1._threads.size
60
-
61
- assert_equal :test1, t[:_fluentd_plugin_helper_thread_title]
62
- assert t[:_fluentd_plugin_helper_thread_running]
63
- assert !d1._threads.empty?
64
-
65
- m1.unlock
66
-
67
- while t[:_fluentd_plugin_helper_thread_running]
68
- Thread.pass
69
- end
70
- end
71
-
72
- assert d1._threads.empty?
73
-
74
- d1.stop; d1.shutdown; d1.close; d1.terminate
75
- end
76
-
77
- test 'can wait until all threads start' do
78
- d1 = Dummy.new.configure(config_element()).start
79
- ary = []
80
- d1.thread_create(:t1) do
81
- ary << 1
82
- end
83
- d1.thread_create(:t2) do
84
- ary << 2
85
- end
86
- d1.thread_create(:t3) do
87
- ary << 3
88
- end
89
- Timeout.timeout(10) do
90
- d1.thread_wait_until_start
91
- end
92
- assert_equal [1,2,3], ary.sort
93
-
94
- d1.stop; d1.shutdown; d1.close; d1.terminate
95
- end
96
-
97
- test 'can stop threads which is watching thread_current_running?, and then close it' do
98
- d1 = Dummy.new.configure(config_element()).start
99
-
100
- m1 = Mutex.new
101
- thread_in_run = false
102
- Timeout.timeout(10) do
103
- t = d1.thread_create(:test2) do
104
- thread_in_run = true
105
- m1.lock
106
- while d1.thread_current_running?
107
- Thread.pass
108
- end
109
- thread_in_run = false
110
- m1.unlock
111
- end
112
- Thread.pass until m1.locked?
113
-
114
- assert thread_in_run
115
- assert !d1._threads.empty?
116
-
117
- d1.stop
118
- Thread.pass while m1.locked?
119
- assert !t[:_fluentd_plugin_helper_thread_running]
120
- assert t.stop?
121
- end
122
-
123
- assert d1._threads.empty?
124
-
125
- d1.stop; d1.shutdown; d1.close; d1.terminate
126
- end
127
-
128
- test 'can terminate threads forcedly which is running forever' do
129
- d1 = Dummy.new.configure(config_element()).start
130
-
131
- m1 = Mutex.new
132
- thread_in_run = false
133
- Timeout.timeout(10) do
134
- t = d1.thread_create(:test2) do
135
- thread_in_run = true
136
- m1.lock
137
- while true
138
- Thread.pass
139
- end
140
- thread_in_run = false
141
- end
142
- Thread.pass until m1.locked?
143
-
144
- assert thread_in_run
145
- assert !d1._threads.empty?
146
-
147
- d1.stop
148
- assert !t[:_fluentd_plugin_helper_thread_running]
149
- assert t.alive?
150
-
151
- d1.shutdown
152
- assert t.alive?
153
- assert !d1._threads.empty?
154
-
155
- d1.close
156
- assert t.alive?
157
- assert !d1._threads.empty?
158
-
159
- d1.terminate
160
- assert t.stop?
161
- assert d1._threads.empty?
162
- end
163
- end
164
- end