fluentd 1.14.4-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (558) hide show
  1. checksums.yaml +7 -0
  2. data/.deepsource.toml +13 -0
  3. data/.drone.yml +35 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.yaml +70 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.yaml +38 -0
  7. data/.github/ISSUE_TEMPLATE.md +17 -0
  8. data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  9. data/.github/workflows/issue-auto-closer.yml +12 -0
  10. data/.github/workflows/linux-test.yaml +36 -0
  11. data/.github/workflows/macos-test.yaml +30 -0
  12. data/.github/workflows/stale-actions.yml +22 -0
  13. data/.github/workflows/windows-test.yaml +46 -0
  14. data/.gitignore +30 -0
  15. data/.gitlab-ci.yml +103 -0
  16. data/ADOPTERS.md +5 -0
  17. data/AUTHORS +2 -0
  18. data/CHANGELOG.md +2409 -0
  19. data/CONTRIBUTING.md +45 -0
  20. data/GOVERNANCE.md +55 -0
  21. data/Gemfile +9 -0
  22. data/GithubWorkflow.md +78 -0
  23. data/LICENSE +202 -0
  24. data/MAINTAINERS.md +11 -0
  25. data/README.md +97 -0
  26. data/Rakefile +79 -0
  27. data/SECURITY.md +18 -0
  28. data/bin/fluent-binlog-reader +7 -0
  29. data/bin/fluent-ca-generate +6 -0
  30. data/bin/fluent-cap-ctl +7 -0
  31. data/bin/fluent-cat +5 -0
  32. data/bin/fluent-ctl +7 -0
  33. data/bin/fluent-debug +5 -0
  34. data/bin/fluent-gem +9 -0
  35. data/bin/fluent-plugin-config-format +5 -0
  36. data/bin/fluent-plugin-generate +5 -0
  37. data/bin/fluentd +15 -0
  38. data/code-of-conduct.md +3 -0
  39. data/docs/SECURITY_AUDIT.pdf +0 -0
  40. data/example/copy_roundrobin.conf +39 -0
  41. data/example/counter.conf +18 -0
  42. data/example/filter_stdout.conf +22 -0
  43. data/example/in_forward.conf +14 -0
  44. data/example/in_forward_client.conf +37 -0
  45. data/example/in_forward_shared_key.conf +15 -0
  46. data/example/in_forward_tls.conf +14 -0
  47. data/example/in_forward_users.conf +24 -0
  48. data/example/in_forward_workers.conf +21 -0
  49. data/example/in_http.conf +16 -0
  50. data/example/in_out_forward.conf +17 -0
  51. data/example/in_sample_blocks.conf +17 -0
  52. data/example/in_sample_with_compression.conf +23 -0
  53. data/example/in_syslog.conf +15 -0
  54. data/example/in_tail.conf +14 -0
  55. data/example/in_tcp.conf +13 -0
  56. data/example/in_udp.conf +13 -0
  57. data/example/logevents.conf +25 -0
  58. data/example/multi_filters.conf +61 -0
  59. data/example/out_copy.conf +20 -0
  60. data/example/out_exec_filter.conf +42 -0
  61. data/example/out_file.conf +13 -0
  62. data/example/out_forward.conf +35 -0
  63. data/example/out_forward_buf_file.conf +23 -0
  64. data/example/out_forward_client.conf +109 -0
  65. data/example/out_forward_heartbeat_none.conf +16 -0
  66. data/example/out_forward_sd.conf +17 -0
  67. data/example/out_forward_shared_key.conf +36 -0
  68. data/example/out_forward_tls.conf +18 -0
  69. data/example/out_forward_users.conf +65 -0
  70. data/example/out_null.conf +36 -0
  71. data/example/sd.yaml +8 -0
  72. data/example/secondary_file.conf +42 -0
  73. data/example/suppress_config_dump.conf +7 -0
  74. data/example/v0_12_filter.conf +78 -0
  75. data/example/v1_literal_example.conf +36 -0
  76. data/example/worker_section.conf +36 -0
  77. data/fluent.conf +139 -0
  78. data/fluentd.gemspec +55 -0
  79. data/lib/fluent/agent.rb +168 -0
  80. data/lib/fluent/capability.rb +87 -0
  81. data/lib/fluent/clock.rb +66 -0
  82. data/lib/fluent/command/binlog_reader.rb +244 -0
  83. data/lib/fluent/command/bundler_injection.rb +45 -0
  84. data/lib/fluent/command/ca_generate.rb +184 -0
  85. data/lib/fluent/command/cap_ctl.rb +174 -0
  86. data/lib/fluent/command/cat.rb +365 -0
  87. data/lib/fluent/command/ctl.rb +177 -0
  88. data/lib/fluent/command/debug.rb +103 -0
  89. data/lib/fluent/command/fluentd.rb +374 -0
  90. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  91. data/lib/fluent/command/plugin_generator.rb +365 -0
  92. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  93. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  94. data/lib/fluent/compat/exec_util.rb +129 -0
  95. data/lib/fluent/compat/file_util.rb +54 -0
  96. data/lib/fluent/compat/filter.rb +68 -0
  97. data/lib/fluent/compat/formatter.rb +111 -0
  98. data/lib/fluent/compat/formatter_utils.rb +85 -0
  99. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  100. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  101. data/lib/fluent/compat/input.rb +49 -0
  102. data/lib/fluent/compat/output.rb +721 -0
  103. data/lib/fluent/compat/output_chain.rb +60 -0
  104. data/lib/fluent/compat/parser.rb +310 -0
  105. data/lib/fluent/compat/parser_utils.rb +40 -0
  106. data/lib/fluent/compat/propagate_default.rb +62 -0
  107. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  108. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  109. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  110. data/lib/fluent/compat/socket_util.rb +165 -0
  111. data/lib/fluent/compat/string_util.rb +34 -0
  112. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  113. data/lib/fluent/compat/type_converter.rb +90 -0
  114. data/lib/fluent/config/basic_parser.rb +123 -0
  115. data/lib/fluent/config/configure_proxy.rb +424 -0
  116. data/lib/fluent/config/dsl.rb +152 -0
  117. data/lib/fluent/config/element.rb +265 -0
  118. data/lib/fluent/config/error.rb +32 -0
  119. data/lib/fluent/config/literal_parser.rb +286 -0
  120. data/lib/fluent/config/parser.rb +107 -0
  121. data/lib/fluent/config/section.rb +272 -0
  122. data/lib/fluent/config/types.rb +249 -0
  123. data/lib/fluent/config/v1_parser.rb +192 -0
  124. data/lib/fluent/config.rb +76 -0
  125. data/lib/fluent/configurable.rb +201 -0
  126. data/lib/fluent/counter/base_socket.rb +44 -0
  127. data/lib/fluent/counter/client.rb +297 -0
  128. data/lib/fluent/counter/error.rb +86 -0
  129. data/lib/fluent/counter/mutex_hash.rb +163 -0
  130. data/lib/fluent/counter/server.rb +273 -0
  131. data/lib/fluent/counter/store.rb +205 -0
  132. data/lib/fluent/counter/validator.rb +145 -0
  133. data/lib/fluent/counter.rb +23 -0
  134. data/lib/fluent/daemon.rb +15 -0
  135. data/lib/fluent/daemonizer.rb +88 -0
  136. data/lib/fluent/engine.rb +253 -0
  137. data/lib/fluent/env.rb +40 -0
  138. data/lib/fluent/error.rb +34 -0
  139. data/lib/fluent/event.rb +326 -0
  140. data/lib/fluent/event_router.rb +297 -0
  141. data/lib/fluent/ext_monitor_require.rb +28 -0
  142. data/lib/fluent/filter.rb +21 -0
  143. data/lib/fluent/fluent_log_event_router.rb +141 -0
  144. data/lib/fluent/formatter.rb +23 -0
  145. data/lib/fluent/input.rb +21 -0
  146. data/lib/fluent/label.rb +46 -0
  147. data/lib/fluent/load.rb +34 -0
  148. data/lib/fluent/log.rb +713 -0
  149. data/lib/fluent/match.rb +187 -0
  150. data/lib/fluent/mixin.rb +31 -0
  151. data/lib/fluent/msgpack_factory.rb +106 -0
  152. data/lib/fluent/oj_options.rb +62 -0
  153. data/lib/fluent/output.rb +29 -0
  154. data/lib/fluent/output_chain.rb +23 -0
  155. data/lib/fluent/parser.rb +23 -0
  156. data/lib/fluent/plugin/bare_output.rb +104 -0
  157. data/lib/fluent/plugin/base.rb +197 -0
  158. data/lib/fluent/plugin/buf_file.rb +213 -0
  159. data/lib/fluent/plugin/buf_file_single.rb +225 -0
  160. data/lib/fluent/plugin/buf_memory.rb +34 -0
  161. data/lib/fluent/plugin/buffer/chunk.rb +240 -0
  162. data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
  163. data/lib/fluent/plugin/buffer/file_single_chunk.rb +311 -0
  164. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  165. data/lib/fluent/plugin/buffer.rb +918 -0
  166. data/lib/fluent/plugin/compressable.rb +96 -0
  167. data/lib/fluent/plugin/exec_util.rb +22 -0
  168. data/lib/fluent/plugin/file_util.rb +22 -0
  169. data/lib/fluent/plugin/file_wrapper.rb +187 -0
  170. data/lib/fluent/plugin/filter.rb +127 -0
  171. data/lib/fluent/plugin/filter_grep.rb +189 -0
  172. data/lib/fluent/plugin/filter_parser.rb +130 -0
  173. data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
  174. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  175. data/lib/fluent/plugin/formatter.rb +75 -0
  176. data/lib/fluent/plugin/formatter_csv.rb +78 -0
  177. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  178. data/lib/fluent/plugin/formatter_json.rb +59 -0
  179. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  180. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  181. data/lib/fluent/plugin/formatter_out_file.rb +53 -0
  182. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  183. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  184. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  185. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  186. data/lib/fluent/plugin/in_dummy.rb +18 -0
  187. data/lib/fluent/plugin/in_exec.rb +110 -0
  188. data/lib/fluent/plugin/in_forward.rb +473 -0
  189. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  190. data/lib/fluent/plugin/in_http.rb +667 -0
  191. data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
  192. data/lib/fluent/plugin/in_object_space.rb +93 -0
  193. data/lib/fluent/plugin/in_sample.rb +141 -0
  194. data/lib/fluent/plugin/in_syslog.rb +276 -0
  195. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  196. data/lib/fluent/plugin/in_tail.rb +1228 -0
  197. data/lib/fluent/plugin/in_tcp.rb +181 -0
  198. data/lib/fluent/plugin/in_udp.rb +92 -0
  199. data/lib/fluent/plugin/in_unix.rb +195 -0
  200. data/lib/fluent/plugin/input.rb +75 -0
  201. data/lib/fluent/plugin/metrics.rb +119 -0
  202. data/lib/fluent/plugin/metrics_local.rb +96 -0
  203. data/lib/fluent/plugin/multi_output.rb +195 -0
  204. data/lib/fluent/plugin/out_copy.rb +120 -0
  205. data/lib/fluent/plugin/out_exec.rb +105 -0
  206. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  207. data/lib/fluent/plugin/out_file.rb +334 -0
  208. data/lib/fluent/plugin/out_forward/ack_handler.rb +161 -0
  209. data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
  210. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  211. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  212. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  213. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  214. data/lib/fluent/plugin/out_forward/socket_cache.rb +140 -0
  215. data/lib/fluent/plugin/out_forward.rb +826 -0
  216. data/lib/fluent/plugin/out_http.rb +275 -0
  217. data/lib/fluent/plugin/out_null.rb +74 -0
  218. data/lib/fluent/plugin/out_relabel.rb +32 -0
  219. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  220. data/lib/fluent/plugin/out_secondary_file.rb +131 -0
  221. data/lib/fluent/plugin/out_stdout.rb +74 -0
  222. data/lib/fluent/plugin/out_stream.rb +130 -0
  223. data/lib/fluent/plugin/output.rb +1556 -0
  224. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  225. data/lib/fluent/plugin/parser.rb +275 -0
  226. data/lib/fluent/plugin/parser_apache.rb +28 -0
  227. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  228. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  229. data/lib/fluent/plugin/parser_csv.rb +114 -0
  230. data/lib/fluent/plugin/parser_json.rb +96 -0
  231. data/lib/fluent/plugin/parser_ltsv.rb +51 -0
  232. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  233. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  234. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  235. data/lib/fluent/plugin/parser_none.rb +36 -0
  236. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  237. data/lib/fluent/plugin/parser_syslog.rb +496 -0
  238. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  239. data/lib/fluent/plugin/sd_file.rb +156 -0
  240. data/lib/fluent/plugin/sd_srv.rb +135 -0
  241. data/lib/fluent/plugin/sd_static.rb +58 -0
  242. data/lib/fluent/plugin/service_discovery.rb +65 -0
  243. data/lib/fluent/plugin/socket_util.rb +22 -0
  244. data/lib/fluent/plugin/storage.rb +84 -0
  245. data/lib/fluent/plugin/storage_local.rb +162 -0
  246. data/lib/fluent/plugin/string_util.rb +22 -0
  247. data/lib/fluent/plugin.rb +206 -0
  248. data/lib/fluent/plugin_helper/cert_option.rb +191 -0
  249. data/lib/fluent/plugin_helper/child_process.rb +366 -0
  250. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  251. data/lib/fluent/plugin_helper/counter.rb +51 -0
  252. data/lib/fluent/plugin_helper/event_emitter.rb +100 -0
  253. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  254. data/lib/fluent/plugin_helper/extract.rb +104 -0
  255. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  256. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  257. data/lib/fluent/plugin_helper/http_server/compat/server.rb +92 -0
  258. data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -0
  259. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  260. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  261. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  262. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  263. data/lib/fluent/plugin_helper/http_server/server.rb +93 -0
  264. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  265. data/lib/fluent/plugin_helper/http_server.rb +135 -0
  266. data/lib/fluent/plugin_helper/inject.rb +154 -0
  267. data/lib/fluent/plugin_helper/metrics.rb +129 -0
  268. data/lib/fluent/plugin_helper/parser.rb +147 -0
  269. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  270. data/lib/fluent/plugin_helper/retry_state.rb +209 -0
  271. data/lib/fluent/plugin_helper/server.rb +801 -0
  272. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  273. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  274. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  275. data/lib/fluent/plugin_helper/socket.rb +277 -0
  276. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  277. data/lib/fluent/plugin_helper/storage.rb +349 -0
  278. data/lib/fluent/plugin_helper/thread.rb +180 -0
  279. data/lib/fluent/plugin_helper/timer.rb +92 -0
  280. data/lib/fluent/plugin_helper.rb +75 -0
  281. data/lib/fluent/plugin_id.rb +93 -0
  282. data/lib/fluent/process.rb +22 -0
  283. data/lib/fluent/registry.rb +116 -0
  284. data/lib/fluent/root_agent.rb +372 -0
  285. data/lib/fluent/rpc.rb +94 -0
  286. data/lib/fluent/static_config_analysis.rb +194 -0
  287. data/lib/fluent/supervisor.rb +1054 -0
  288. data/lib/fluent/system_config.rb +187 -0
  289. data/lib/fluent/test/base.rb +78 -0
  290. data/lib/fluent/test/driver/base.rb +225 -0
  291. data/lib/fluent/test/driver/base_owned.rb +83 -0
  292. data/lib/fluent/test/driver/base_owner.rb +135 -0
  293. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  294. data/lib/fluent/test/driver/filter.rb +57 -0
  295. data/lib/fluent/test/driver/formatter.rb +30 -0
  296. data/lib/fluent/test/driver/input.rb +31 -0
  297. data/lib/fluent/test/driver/multi_output.rb +53 -0
  298. data/lib/fluent/test/driver/output.rb +102 -0
  299. data/lib/fluent/test/driver/parser.rb +30 -0
  300. data/lib/fluent/test/driver/storage.rb +30 -0
  301. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  302. data/lib/fluent/test/filter_test.rb +77 -0
  303. data/lib/fluent/test/formatter_test.rb +65 -0
  304. data/lib/fluent/test/helpers.rb +134 -0
  305. data/lib/fluent/test/input_test.rb +174 -0
  306. data/lib/fluent/test/log.rb +79 -0
  307. data/lib/fluent/test/output_test.rb +156 -0
  308. data/lib/fluent/test/parser_test.rb +70 -0
  309. data/lib/fluent/test/startup_shutdown.rb +46 -0
  310. data/lib/fluent/test.rb +58 -0
  311. data/lib/fluent/time.rb +512 -0
  312. data/lib/fluent/timezone.rb +171 -0
  313. data/lib/fluent/tls.rb +81 -0
  314. data/lib/fluent/unique_id.rb +39 -0
  315. data/lib/fluent/variable_store.rb +40 -0
  316. data/lib/fluent/version.rb +21 -0
  317. data/lib/fluent/winsvc.rb +103 -0
  318. data/templates/new_gem/Gemfile +3 -0
  319. data/templates/new_gem/README.md.erb +43 -0
  320. data/templates/new_gem/Rakefile +13 -0
  321. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  322. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  323. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  324. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  325. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  326. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  327. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  328. data/templates/new_gem/test/helper.rb.erb +8 -0
  329. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  330. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  331. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  332. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  333. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  335. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  336. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  337. data/templates/plugin_config_formatter/param.md.erb +34 -0
  338. data/templates/plugin_config_formatter/section.md.erb +12 -0
  339. data/test/command/test_binlog_reader.rb +362 -0
  340. data/test/command/test_ca_generate.rb +70 -0
  341. data/test/command/test_cap_ctl.rb +100 -0
  342. data/test/command/test_cat.rb +128 -0
  343. data/test/command/test_ctl.rb +57 -0
  344. data/test/command/test_fluentd.rb +1106 -0
  345. data/test/command/test_plugin_config_formatter.rb +398 -0
  346. data/test/command/test_plugin_generator.rb +109 -0
  347. data/test/compat/test_calls_super.rb +166 -0
  348. data/test/compat/test_parser.rb +92 -0
  349. data/test/config/assertions.rb +42 -0
  350. data/test/config/test_config_parser.rb +551 -0
  351. data/test/config/test_configurable.rb +1784 -0
  352. data/test/config/test_configure_proxy.rb +604 -0
  353. data/test/config/test_dsl.rb +415 -0
  354. data/test/config/test_element.rb +518 -0
  355. data/test/config/test_literal_parser.rb +309 -0
  356. data/test/config/test_plugin_configuration.rb +56 -0
  357. data/test/config/test_section.rb +191 -0
  358. data/test/config/test_system_config.rb +199 -0
  359. data/test/config/test_types.rb +408 -0
  360. data/test/counter/test_client.rb +563 -0
  361. data/test/counter/test_error.rb +44 -0
  362. data/test/counter/test_mutex_hash.rb +179 -0
  363. data/test/counter/test_server.rb +589 -0
  364. data/test/counter/test_store.rb +258 -0
  365. data/test/counter/test_validator.rb +137 -0
  366. data/test/helper.rb +155 -0
  367. data/test/helpers/fuzzy_assert.rb +89 -0
  368. data/test/helpers/process_extenstion.rb +33 -0
  369. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  370. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  371. data/test/plugin/data/2010/01/20100102.log +0 -0
  372. data/test/plugin/data/log/bar +0 -0
  373. data/test/plugin/data/log/foo/bar.log +0 -0
  374. data/test/plugin/data/log/foo/bar2 +0 -0
  375. data/test/plugin/data/log/test.log +0 -0
  376. data/test/plugin/data/sd_file/config +11 -0
  377. data/test/plugin/data/sd_file/config.json +17 -0
  378. data/test/plugin/data/sd_file/config.yaml +11 -0
  379. data/test/plugin/data/sd_file/config.yml +11 -0
  380. data/test/plugin/data/sd_file/invalid_config.yml +7 -0
  381. data/test/plugin/in_tail/test_fifo.rb +121 -0
  382. data/test/plugin/in_tail/test_io_handler.rb +140 -0
  383. data/test/plugin/in_tail/test_position_file.rb +379 -0
  384. data/test/plugin/out_forward/test_ack_handler.rb +101 -0
  385. data/test/plugin/out_forward/test_connection_manager.rb +145 -0
  386. data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
  387. data/test/plugin/out_forward/test_load_balancer.rb +106 -0
  388. data/test/plugin/out_forward/test_socket_cache.rb +149 -0
  389. data/test/plugin/test_bare_output.rb +131 -0
  390. data/test/plugin/test_base.rb +115 -0
  391. data/test/plugin/test_buf_file.rb +1275 -0
  392. data/test/plugin/test_buf_file_single.rb +833 -0
  393. data/test/plugin/test_buf_memory.rb +42 -0
  394. data/test/plugin/test_buffer.rb +1383 -0
  395. data/test/plugin/test_buffer_chunk.rb +198 -0
  396. data/test/plugin/test_buffer_file_chunk.rb +871 -0
  397. data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
  398. data/test/plugin/test_buffer_memory_chunk.rb +339 -0
  399. data/test/plugin/test_compressable.rb +87 -0
  400. data/test/plugin/test_file_util.rb +96 -0
  401. data/test/plugin/test_file_wrapper.rb +126 -0
  402. data/test/plugin/test_filter.rb +368 -0
  403. data/test/plugin/test_filter_grep.rb +697 -0
  404. data/test/plugin/test_filter_parser.rb +731 -0
  405. data/test/plugin/test_filter_record_transformer.rb +577 -0
  406. data/test/plugin/test_filter_stdout.rb +207 -0
  407. data/test/plugin/test_formatter_csv.rb +136 -0
  408. data/test/plugin/test_formatter_hash.rb +38 -0
  409. data/test/plugin/test_formatter_json.rb +61 -0
  410. data/test/plugin/test_formatter_ltsv.rb +70 -0
  411. data/test/plugin/test_formatter_msgpack.rb +28 -0
  412. data/test/plugin/test_formatter_out_file.rb +116 -0
  413. data/test/plugin/test_formatter_single_value.rb +44 -0
  414. data/test/plugin/test_formatter_tsv.rb +76 -0
  415. data/test/plugin/test_in_debug_agent.rb +49 -0
  416. data/test/plugin/test_in_exec.rb +261 -0
  417. data/test/plugin/test_in_forward.rb +1180 -0
  418. data/test/plugin/test_in_gc_stat.rb +62 -0
  419. data/test/plugin/test_in_http.rb +1080 -0
  420. data/test/plugin/test_in_monitor_agent.rb +923 -0
  421. data/test/plugin/test_in_object_space.rb +60 -0
  422. data/test/plugin/test_in_sample.rb +190 -0
  423. data/test/plugin/test_in_syslog.rb +505 -0
  424. data/test/plugin/test_in_tail.rb +2363 -0
  425. data/test/plugin/test_in_tcp.rb +243 -0
  426. data/test/plugin/test_in_udp.rb +268 -0
  427. data/test/plugin/test_in_unix.rb +181 -0
  428. data/test/plugin/test_input.rb +137 -0
  429. data/test/plugin/test_metadata.rb +89 -0
  430. data/test/plugin/test_metrics.rb +294 -0
  431. data/test/plugin/test_metrics_local.rb +96 -0
  432. data/test/plugin/test_multi_output.rb +204 -0
  433. data/test/plugin/test_out_copy.rb +308 -0
  434. data/test/plugin/test_out_exec.rb +312 -0
  435. data/test/plugin/test_out_exec_filter.rb +606 -0
  436. data/test/plugin/test_out_file.rb +1037 -0
  437. data/test/plugin/test_out_forward.rb +1348 -0
  438. data/test/plugin/test_out_http.rb +428 -0
  439. data/test/plugin/test_out_null.rb +105 -0
  440. data/test/plugin/test_out_relabel.rb +28 -0
  441. data/test/plugin/test_out_roundrobin.rb +146 -0
  442. data/test/plugin/test_out_secondary_file.rb +458 -0
  443. data/test/plugin/test_out_stdout.rb +205 -0
  444. data/test/plugin/test_out_stream.rb +103 -0
  445. data/test/plugin/test_output.rb +1065 -0
  446. data/test/plugin/test_output_as_buffered.rb +2024 -0
  447. data/test/plugin/test_output_as_buffered_backup.rb +363 -0
  448. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  449. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  450. data/test/plugin/test_output_as_buffered_retries.rb +919 -0
  451. data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
  452. data/test/plugin/test_output_as_standard.rb +374 -0
  453. data/test/plugin/test_owned_by.rb +35 -0
  454. data/test/plugin/test_parser.rb +399 -0
  455. data/test/plugin/test_parser_apache.rb +42 -0
  456. data/test/plugin/test_parser_apache2.rb +47 -0
  457. data/test/plugin/test_parser_apache_error.rb +45 -0
  458. data/test/plugin/test_parser_csv.rb +200 -0
  459. data/test/plugin/test_parser_json.rb +138 -0
  460. data/test/plugin/test_parser_labeled_tsv.rb +160 -0
  461. data/test/plugin/test_parser_multiline.rb +111 -0
  462. data/test/plugin/test_parser_nginx.rb +88 -0
  463. data/test/plugin/test_parser_none.rb +52 -0
  464. data/test/plugin/test_parser_regexp.rb +289 -0
  465. data/test/plugin/test_parser_syslog.rb +650 -0
  466. data/test/plugin/test_parser_tsv.rb +122 -0
  467. data/test/plugin/test_sd_file.rb +228 -0
  468. data/test/plugin/test_sd_srv.rb +230 -0
  469. data/test/plugin/test_storage.rb +167 -0
  470. data/test/plugin/test_storage_local.rb +335 -0
  471. data/test/plugin/test_string_util.rb +26 -0
  472. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  473. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
  474. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  475. data/test/plugin_helper/data/cert/cert.pem +19 -0
  476. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  477. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  478. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  479. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  480. data/test/plugin_helper/data/cert/empty.pem +0 -0
  481. data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
  482. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
  483. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
  484. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
  485. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
  486. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
  487. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
  488. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
  489. data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
  490. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
  491. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
  492. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
  493. data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -0
  494. data/test/plugin_helper/http_server/test_app.rb +65 -0
  495. data/test/plugin_helper/http_server/test_route.rb +32 -0
  496. data/test/plugin_helper/service_discovery/test_manager.rb +93 -0
  497. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
  498. data/test/plugin_helper/test_cert_option.rb +25 -0
  499. data/test/plugin_helper/test_child_process.rb +840 -0
  500. data/test/plugin_helper/test_compat_parameters.rb +358 -0
  501. data/test/plugin_helper/test_event_emitter.rb +80 -0
  502. data/test/plugin_helper/test_event_loop.rb +52 -0
  503. data/test/plugin_helper/test_extract.rb +194 -0
  504. data/test/plugin_helper/test_formatter.rb +255 -0
  505. data/test/plugin_helper/test_http_server_helper.rb +372 -0
  506. data/test/plugin_helper/test_inject.rb +561 -0
  507. data/test/plugin_helper/test_metrics.rb +137 -0
  508. data/test/plugin_helper/test_parser.rb +264 -0
  509. data/test/plugin_helper/test_record_accessor.rb +238 -0
  510. data/test/plugin_helper/test_retry_state.rb +442 -0
  511. data/test/plugin_helper/test_server.rb +1823 -0
  512. data/test/plugin_helper/test_service_discovery.rb +165 -0
  513. data/test/plugin_helper/test_socket.rb +146 -0
  514. data/test/plugin_helper/test_storage.rb +542 -0
  515. data/test/plugin_helper/test_thread.rb +164 -0
  516. data/test/plugin_helper/test_timer.rb +130 -0
  517. data/test/scripts/exec_script.rb +32 -0
  518. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  519. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  520. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  521. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  522. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  523. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  524. data/test/test_capability.rb +74 -0
  525. data/test/test_clock.rb +164 -0
  526. data/test/test_config.rb +202 -0
  527. data/test/test_configdsl.rb +148 -0
  528. data/test/test_daemonizer.rb +91 -0
  529. data/test/test_engine.rb +203 -0
  530. data/test/test_event.rb +531 -0
  531. data/test/test_event_router.rb +331 -0
  532. data/test/test_event_time.rb +199 -0
  533. data/test/test_filter.rb +121 -0
  534. data/test/test_fluent_log_event_router.rb +99 -0
  535. data/test/test_formatter.rb +366 -0
  536. data/test/test_input.rb +31 -0
  537. data/test/test_log.rb +994 -0
  538. data/test/test_logger_initializer.rb +46 -0
  539. data/test/test_match.rb +148 -0
  540. data/test/test_mixin.rb +351 -0
  541. data/test/test_msgpack_factory.rb +18 -0
  542. data/test/test_oj_options.rb +55 -0
  543. data/test/test_output.rb +278 -0
  544. data/test/test_plugin.rb +251 -0
  545. data/test/test_plugin_classes.rb +370 -0
  546. data/test/test_plugin_helper.rb +81 -0
  547. data/test/test_plugin_id.rb +119 -0
  548. data/test/test_process.rb +14 -0
  549. data/test/test_root_agent.rb +951 -0
  550. data/test/test_static_config_analysis.rb +177 -0
  551. data/test/test_supervisor.rb +601 -0
  552. data/test/test_test_drivers.rb +136 -0
  553. data/test/test_time_formatter.rb +301 -0
  554. data/test/test_time_parser.rb +362 -0
  555. data/test/test_tls.rb +65 -0
  556. data/test/test_unique_id.rb +47 -0
  557. data/test/test_variable_store.rb +65 -0
  558. metadata +1261 -0
@@ -0,0 +1,167 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin/storage'
3
+ require 'fluent/plugin/base'
4
+
5
+ class DummyPlugin < Fluent::Plugin::TestBase
6
+ end
7
+
8
+ class BareStorage < Fluent::Plugin::Storage
9
+ Fluent::Plugin.register_storage('bare', self)
10
+ end
11
+
12
+ class BasicStorage < Fluent::Plugin::Storage
13
+ Fluent::Plugin.register_storage('example', self)
14
+
15
+ attr_reader :data, :saved
16
+
17
+ def initialize
18
+ super
19
+ @data = @saved = nil
20
+ end
21
+ def load
22
+ @data = {}
23
+ end
24
+ def save
25
+ @saved = @data.dup
26
+ end
27
+ def get(key)
28
+ @data[key]
29
+ end
30
+ def fetch(key, defval)
31
+ @data.fetch(key, defval)
32
+ end
33
+ def put(key, value)
34
+ @data[key] = value
35
+ end
36
+ def delete(key)
37
+ @data.delete(key)
38
+ end
39
+ def update(key, &block)
40
+ @data[key] = block.call(@data[key])
41
+ end
42
+ def close
43
+ @data = {}
44
+ super
45
+ end
46
+ def terminate
47
+ @saved = {}
48
+ super
49
+ end
50
+ end
51
+
52
+ class StorageTest < Test::Unit::TestCase
53
+ sub_test_case 'BareStorage' do
54
+ setup do
55
+ plugin = DummyPlugin.new
56
+ @s = BareStorage.new
57
+ @s.configure(config_element())
58
+ @s.owner = plugin
59
+ end
60
+
61
+ test 'is configured with plugin information and system config' do
62
+ plugin = DummyPlugin.new
63
+ plugin.system_config_override({'process_name' => 'mytest'})
64
+ plugin.configure(config_element('ROOT', '', {'@id' => '1'}))
65
+ s = BareStorage.new
66
+ s.configure(config_element())
67
+ s.owner = plugin
68
+
69
+ assert_equal 'mytest', s.owner.system_config.process_name
70
+ assert_equal '1', s.instance_eval{ @_plugin_id }
71
+ assert_equal true, s.instance_eval{ @_plugin_id_configured }
72
+ end
73
+
74
+ test 'does NOT have features for high-performance/high-consistent storages' do
75
+ assert_equal false, @s.persistent_always?
76
+ assert_equal false, @s.synchronized?
77
+ end
78
+
79
+ test 'does have default values which is conservative for almost all users' do
80
+ assert_equal false, @s.persistent
81
+ assert_equal true, @s.autosave
82
+ assert_equal 10, @s.autosave_interval
83
+ assert_equal true, @s.save_at_shutdown
84
+ end
85
+
86
+ test 'load/save doesn NOT anything: just as memory storage' do
87
+ assert_nothing_raised{ @s.load }
88
+ assert_nothing_raised{ @s.save }
89
+ end
90
+
91
+ test 'all operations are not defined yet' do
92
+ assert_raise NotImplementedError do
93
+ @s.get('key')
94
+ end
95
+ assert_raise NotImplementedError do
96
+ @s.fetch('key', 'value')
97
+ end
98
+ assert_raise NotImplementedError do
99
+ @s.put('key', 'value')
100
+ end
101
+ assert_raise NotImplementedError do
102
+ @s.delete('key')
103
+ end
104
+ assert_raise NotImplementedError do
105
+ @s.update('key'){ |v| v + '2' }
106
+ end
107
+ end
108
+ end
109
+
110
+ sub_test_case 'ExampleStorage' do
111
+ setup do
112
+ plugin = DummyPlugin.new
113
+ plugin.configure(config_element('ROOT', '', {'@id' => '1'}))
114
+ @s = BasicStorage.new
115
+ @s.configure(config_element())
116
+ @s.owner = plugin
117
+ end
118
+
119
+ test 'load/save works well as plugin internal state operations' do
120
+ plugin = DummyPlugin.new
121
+ plugin.configure(config_element('ROOT', '', {'@id' => '0'}))
122
+ s = BasicStorage.new
123
+ s.owner = plugin
124
+
125
+ assert_nothing_raised{ s.load }
126
+ assert s.data
127
+ assert_nil s.saved
128
+
129
+ assert_nothing_raised{ s.save }
130
+ assert s.saved
131
+ assert{ s.data == s.saved }
132
+ assert{ s.data.object_id != s.saved.object_id }
133
+ end
134
+
135
+ test 'all operations work well' do
136
+ @s.load
137
+
138
+ assert_nil @s.get('key')
139
+ assert_equal 'value', @s.fetch('key', 'value')
140
+ assert_nil @s.get('key')
141
+
142
+ assert_equal 'value', @s.put('key', 'value')
143
+ assert_equal 'value', @s.get('key')
144
+
145
+ assert_equal 'valuevalue', @s.update('key'){|v| v * 2 }
146
+
147
+ assert_equal 'valuevalue', @s.delete('key')
148
+ end
149
+
150
+ test 'close and terminate work to operate internal states' do
151
+ @s.load
152
+ @s.put('k1', 'v1')
153
+ @s.put('k2', 'v2')
154
+ assert_equal 2, @s.data.size
155
+ @s.save
156
+ assert_equal @s.data.size, @s.saved.size
157
+
158
+ assert_nothing_raised{ @s.close }
159
+ assert @s.data.empty?
160
+ assert !@s.saved.empty?
161
+
162
+ assert_nothing_raised{ @s.terminate }
163
+ assert @s.data.empty?
164
+ assert @s.saved.empty?
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,335 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin/storage_local'
3
+ require 'fluent/plugin/input'
4
+ require 'fluent/system_config'
5
+ require 'fileutils'
6
+
7
+ class LocalStorageTest < Test::Unit::TestCase
8
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/storage_local#{ENV['TEST_ENV_NUMBER']}")
9
+
10
+ class MyInput < Fluent::Plugin::Input
11
+ helpers :storage
12
+ config_section :storage do
13
+ config_set_default :@type, 'local'
14
+ end
15
+ end
16
+
17
+ setup do
18
+ FileUtils.rm_rf(TMP_DIR)
19
+ FileUtils.mkdir_p(TMP_DIR)
20
+ Fluent::Test.setup
21
+ @d = MyInput.new
22
+ end
23
+
24
+ teardown do
25
+ @d.stop unless @d.stopped?
26
+ @d.before_shutdown unless @d.before_shutdown?
27
+ @d.shutdown unless @d.shutdown?
28
+ @d.after_shutdown unless @d.after_shutdown?
29
+ @d.close unless @d.closed?
30
+ @d.terminate unless @d.terminated?
31
+ end
32
+
33
+ sub_test_case 'without any configuration' do
34
+ test 'works as on-memory storage' do
35
+ conf = config_element()
36
+
37
+ @d.configure(conf)
38
+ @d.start
39
+ @p = @d.storage_create()
40
+
41
+ assert_nil @p.path
42
+ assert @p.store.empty?
43
+
44
+ assert_nil @p.get('key1')
45
+ assert_equal 'EMPTY', @p.fetch('key1', 'EMPTY')
46
+
47
+ @p.put('key1', '1')
48
+ assert_equal '1', @p.get('key1')
49
+
50
+ @p.update('key1') do |v|
51
+ (v.to_i * 2).to_s
52
+ end
53
+ assert_equal '2', @p.get('key1')
54
+
55
+ @p.save # on-memory storage does nothing...
56
+
57
+ @d.stop; @d.before_shutdown; @d.shutdown; @d.after_shutdown; @d.close; @d.terminate
58
+
59
+ # re-create to reload storage contents
60
+ @d = MyInput.new
61
+ @d.configure(conf)
62
+ @d.start
63
+ @p = @d.storage_create()
64
+
65
+ assert @p.store.empty?
66
+ end
67
+
68
+ test 'warns about on-memory storage if autosave is true' do
69
+ @d.configure(config_element())
70
+ @d.start
71
+ @p = @d.storage_create()
72
+
73
+ logs = @d.log.out.logs
74
+ assert{ logs.any?{|log| log.include?("[warn]: both of Plugin @id and path for <storage> are not specified. Using on-memory store.") } }
75
+ end
76
+
77
+ test 'show info log about on-memory storage if autosave is false' do
78
+ @d.configure(config_element('ROOT', '', {}, [config_element('storage', '', {'autosave' => 'false'})]))
79
+ @d.start
80
+ @p = @d.storage_create()
81
+
82
+ logs = @d.log.out.logs
83
+ assert{ logs.any?{|log| log.include?("[info]: both of Plugin @id and path for <storage> are not specified. Using on-memory store.") } }
84
+ end
85
+ end
86
+
87
+ sub_test_case 'configured with file path' do
88
+ test 'works as storage which stores data on disk' do
89
+ storage_path = File.join(TMP_DIR, 'my_store.json')
90
+ conf = config_element('ROOT', '', {}, [config_element('storage', '', {'path' => storage_path})])
91
+ @d.configure(conf)
92
+ @d.start
93
+ @p = @d.storage_create()
94
+
95
+ assert_equal storage_path, @p.path
96
+ assert @p.store.empty?
97
+
98
+ assert_nil @p.get('key1')
99
+ assert_equal 'EMPTY', @p.fetch('key1', 'EMPTY')
100
+
101
+ @p.put('key1', '1')
102
+ assert_equal '1', @p.get('key1')
103
+
104
+ @p.update('key1') do |v|
105
+ (v.to_i * 2).to_s
106
+ end
107
+ assert_equal '2', @p.get('key1')
108
+
109
+ @p.save # stores all data into file
110
+
111
+ assert File.exist?(storage_path)
112
+
113
+ @p.put('key2', 4)
114
+
115
+ @d.stop; @d.before_shutdown; @d.shutdown; @d.after_shutdown; @d.close; @d.terminate
116
+
117
+ assert_equal({'key1' => '2', 'key2' => 4}, File.open(storage_path){|f| JSON.parse(f.read) })
118
+
119
+ # re-create to reload storage contents
120
+ @d = MyInput.new
121
+ @d.configure(conf)
122
+ @d.start
123
+ @p = @d.storage_create()
124
+
125
+ assert_false @p.store.empty?
126
+
127
+ assert_equal '2', @p.get('key1')
128
+ assert_equal 4, @p.get('key2')
129
+ end
130
+
131
+ test 'raise configuration error if a file specified with multi worker configuration' do
132
+ storage_path = File.join(TMP_DIR, 'my_store.json')
133
+ conf = config_element('ROOT', '', {}, [config_element('storage', '', {'path' => storage_path})])
134
+ @d.system_config_override('workers' => 3)
135
+ assert_raise Fluent::ConfigError.new("Plugin 'local' does not support multi workers configuration (Fluent::Plugin::LocalStorage)") do
136
+ @d.configure(conf)
137
+ end
138
+ end
139
+ end
140
+
141
+ sub_test_case 'configured with root-dir and plugin id' do
142
+ test 'works as storage which stores data under root dir' do
143
+ root_dir = File.join(TMP_DIR, 'root')
144
+ expected_storage_path = File.join(root_dir, 'worker0', 'local_storage_test', 'storage.json')
145
+ conf = config_element('ROOT', '', {'@id' => 'local_storage_test'})
146
+ Fluent::SystemConfig.overwrite_system_config('root_dir' => root_dir) do
147
+ @d.configure(conf)
148
+ end
149
+ @d.start
150
+ @p = @d.storage_create()
151
+
152
+ assert_equal expected_storage_path, @p.path
153
+ assert @p.store.empty?
154
+
155
+ assert_nil @p.get('key1')
156
+ assert_equal 'EMPTY', @p.fetch('key1', 'EMPTY')
157
+
158
+ @p.put('key1', '1')
159
+ assert_equal '1', @p.get('key1')
160
+
161
+ @p.update('key1') do |v|
162
+ (v.to_i * 2).to_s
163
+ end
164
+ assert_equal '2', @p.get('key1')
165
+
166
+ @p.save # stores all data into file
167
+
168
+ assert File.exist?(expected_storage_path)
169
+
170
+ @p.put('key2', 4)
171
+
172
+ @d.stop; @d.before_shutdown; @d.shutdown; @d.after_shutdown; @d.close; @d.terminate
173
+
174
+ assert_equal({'key1' => '2', 'key2' => 4}, File.open(expected_storage_path){|f| JSON.parse(f.read) })
175
+
176
+ # re-create to reload storage contents
177
+ @d = MyInput.new
178
+ Fluent::SystemConfig.overwrite_system_config('root_dir' => root_dir) do
179
+ @d.configure(conf)
180
+ end
181
+ @d.start
182
+ @p = @d.storage_create()
183
+
184
+ assert_false @p.store.empty?
185
+
186
+ assert_equal '2', @p.get('key1')
187
+ assert_equal 4, @p.get('key2')
188
+ end
189
+
190
+ test 'works with customized path by specified usage' do
191
+ root_dir = File.join(TMP_DIR, 'root')
192
+ expected_storage_path = File.join(root_dir, 'worker0', 'local_storage_test', 'storage.usage.json')
193
+ conf = config_element('ROOT', 'usage', {'@id' => 'local_storage_test'})
194
+ Fluent::SystemConfig.overwrite_system_config('root_dir' => root_dir) do
195
+ @d.configure(conf)
196
+ end
197
+ @d.start
198
+ @p = @d.storage_create(usage: 'usage', type: 'local')
199
+
200
+ assert_equal expected_storage_path, @p.path
201
+ assert @p.store.empty?
202
+ end
203
+ end
204
+
205
+ sub_test_case 'configured with root-dir and plugin id, and multi workers' do
206
+ test 'works as storage which stores data under root dir, also in workers' do
207
+ root_dir = File.join(TMP_DIR, 'root')
208
+ expected_storage_path = File.join(root_dir, 'worker1', 'local_storage_test', 'storage.json')
209
+ conf = config_element('ROOT', '', {'@id' => 'local_storage_test'})
210
+ with_worker_config(root_dir: root_dir, workers: 2, worker_id: 1) do
211
+ @d.configure(conf)
212
+ end
213
+ @d.start
214
+ @p = @d.storage_create()
215
+
216
+ assert_equal expected_storage_path, @p.path
217
+ assert @p.store.empty?
218
+ end
219
+ end
220
+
221
+ sub_test_case 'persistent specified' do
222
+ test 'works well with path' do
223
+ omit "It's hard to test on Windows" if Fluent.windows?
224
+
225
+ storage_path = File.join(TMP_DIR, 'my_store.json')
226
+ conf = config_element('ROOT', '', {}, [config_element('storage', '', {'path' => storage_path, 'persistent' => 'true'})])
227
+ @d.configure(conf)
228
+ @d.start
229
+ @p = @d.storage_create()
230
+
231
+ assert_equal storage_path, @p.path
232
+ assert @p.store.empty?
233
+
234
+ assert_nil @p.get('key1')
235
+ assert_equal 'EMPTY', @p.fetch('key1', 'EMPTY')
236
+
237
+ @p.put('key1', '1')
238
+ assert_equal({'key1' => '1'}, File.open(storage_path){|f| JSON.parse(f.read) })
239
+
240
+ @p.update('key1') do |v|
241
+ (v.to_i * 2).to_s
242
+ end
243
+ assert_equal({'key1' => '2'}, File.open(storage_path){|f| JSON.parse(f.read) })
244
+ end
245
+
246
+ test 'works well with root-dir and plugin id' do
247
+ omit "It's hard to test on Windows" if Fluent.windows?
248
+
249
+ root_dir = File.join(TMP_DIR, 'root')
250
+ expected_storage_path = File.join(root_dir, 'worker0', 'local_storage_test', 'storage.json')
251
+ conf = config_element('ROOT', '', {'@id' => 'local_storage_test'}, [config_element('storage', '', {'persistent' => 'true'})])
252
+ Fluent::SystemConfig.overwrite_system_config('root_dir' => root_dir) do
253
+ @d.configure(conf)
254
+ end
255
+ @d.start
256
+ @p = @d.storage_create()
257
+
258
+ assert_equal expected_storage_path, @p.path
259
+ assert @p.store.empty?
260
+
261
+ assert_nil @p.get('key1')
262
+ assert_equal 'EMPTY', @p.fetch('key1', 'EMPTY')
263
+
264
+ @p.put('key1', '1')
265
+ assert_equal({'key1' => '1'}, File.open(expected_storage_path){|f| JSON.parse(f.read) })
266
+
267
+ @p.update('key1') do |v|
268
+ (v.to_i * 2).to_s
269
+ end
270
+ assert_equal({'key1' => '2'}, File.open(expected_storage_path){|f| JSON.parse(f.read) })
271
+ end
272
+
273
+ test 'raises error if it is configured to use on-memory storage' do
274
+ assert_raise Fluent::ConfigError.new("Plugin @id or path for <storage> required when 'persistent' is true") do
275
+ @d.configure(config_element('ROOT', '', {}, [config_element('storage', '', {'persistent' => 'true'})]))
276
+ end
277
+ end
278
+ end
279
+
280
+ sub_test_case 'with various configurations' do
281
+ test 'mode and dir_mode controls permissions of stored data' do
282
+ omit "NTFS doesn't support UNIX like permissions" if Fluent.windows?
283
+
284
+ storage_path = File.join(TMP_DIR, 'dir', 'my_store.json')
285
+ storage_conf = {
286
+ 'path' => storage_path,
287
+ 'mode' => '0600',
288
+ 'dir_mode' => '0777',
289
+ }
290
+ conf = config_element('ROOT', '', {}, [config_element('storage', '', storage_conf)])
291
+ @d.configure(conf)
292
+ @d.start
293
+ @p = @d.storage_create()
294
+
295
+ assert_equal storage_path, @p.path
296
+ assert @p.store.empty?
297
+
298
+ @p.put('key1', '1')
299
+ assert_equal '1', @p.get('key1')
300
+
301
+ @p.save # stores all data into file
302
+
303
+ assert File.exist?(storage_path)
304
+ assert_equal 0600, (File.stat(storage_path).mode % 01000)
305
+ assert_equal 0777, (File.stat(File.dirname(storage_path)).mode % 01000)
306
+ end
307
+
308
+ test 'pretty_print controls to write data in files as human-easy-to-read' do
309
+ storage_path = File.join(TMP_DIR, 'dir', 'my_store.json')
310
+ storage_conf = {
311
+ 'path' => storage_path,
312
+ 'pretty_print' => 'true',
313
+ }
314
+ conf = config_element('ROOT', '', {}, [config_element('storage', '', storage_conf)])
315
+ @d.configure(conf)
316
+ @d.start
317
+ @p = @d.storage_create()
318
+
319
+ assert_equal storage_path, @p.path
320
+ assert @p.store.empty?
321
+
322
+ @p.put('key1', '1')
323
+ assert_equal '1', @p.get('key1')
324
+
325
+ @p.save # stores all data into file
326
+
327
+ expected_pp_json = <<JSON.chomp
328
+ {
329
+ "key1": "1"
330
+ }
331
+ JSON
332
+ assert_equal expected_pp_json, File.read(storage_path)
333
+ end
334
+ end
335
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin/string_util'
3
+
4
+ class StringUtilTest < Test::Unit::TestCase
5
+ def setup
6
+ @null_value_pattern = Regexp.new("^(-|null|NULL)$")
7
+ end
8
+
9
+ sub_test_case 'valid string' do
10
+ test 'null string' do
11
+ assert_equal Fluent::StringUtil.match_regexp(@null_value_pattern, "null").to_s, "null"
12
+ assert_equal Fluent::StringUtil.match_regexp(@null_value_pattern, "NULL").to_s, "NULL"
13
+ assert_equal Fluent::StringUtil.match_regexp(@null_value_pattern, "-").to_s, "-"
14
+ end
15
+
16
+ test 'normal string' do
17
+ assert_equal Fluent::StringUtil.match_regexp(@null_value_pattern, "fluentd"), nil
18
+ end
19
+ end
20
+
21
+ sub_test_case 'invalid string' do
22
+ test 'normal string' do
23
+ assert_equal Fluent::StringUtil.match_regexp(@null_value_pattern, "\xff"), nil
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEArbUTk5n5RruIQGhK1T8g/emKonlfWNMSj/J/f/U9NJ14ugIx
3
+ yHBMqx4WaTyA4zjT2VJO5tRBe385zlIUf8i+x7Ovt/MgsjiwXyKv7qdsE5KHLq+V
4
+ XJfA+s5vAAyzBHY/BA7xxh/QqCI8a/a1OyHyaQ9pFRFXtQBlTH7Fc1qSw5Yg0EXo
5
+ fa6YIBQuDjfqa7FRPj+bEWDO5PUqOMzH5XKBUPS9GLHOqia0CnzF2a51TArC0Dl1
6
+ oNFa7myVmjBuNtkG88Fkd7YNzGa+sNBJPmuGvFXuU3XPEnrtARO/SG4g9/MQUvfM
7
+ I3jFFOJAMmEKd8QXxO5FgIuEnaNOhVRVH/e9wwIDAQABAoIBAQCcYYAWSW/Y9ctb
8
+ 8IguIn8ZF77vNkVYOe1kGfQexjErxPiCvKcEw9TB2HxkkUuXQ/m0lBzkQgIRpB/u
9
+ VoaN47OdJW70M7UjvVVK0HeCascpd6irpvbYPOZG5MGZUdV4Ftv0U1/l9Y5rTycG
10
+ KzxM1+rcGjuH8+z5zjlj/FzV1Jx75pgH2vwE7tBC9hMIefKJVxsnj+1I2BWwT3Ra
11
+ tFayaKW80UYvGQeQjMHyWzEAHAAco5EVTNU9q4xkeKubZx/dod8b05S0Oral0SHY
12
+ AFzXJCp6k29w0m3saEtVQBTImwNut8scJ4KoryGRp9fj9a/dBb1RHe/6EXZ8kDRe
13
+ zhB2/XWBAoGBANpaAPdcIXFyke4DRB07JGin4NU+yzIZy+RwsHme1OIwu9jUYQ1j
14
+ SzcrnJ9adkjgHl4z2psXyeSz/lSUGj7ZjcMVaDu49JSYMPP3heXGkHdtlVyB7KFR
15
+ OBt1rgNdXYfOLOBg6j7mf5G5fXUIATM8fNw5nDYIivD7U3cl9TdUe3OJAoGBAMuo
16
+ e/pmRMEaaDmXuNkDGv/ZoOC4j9tO1fGheSdna9gZWoOyY+MUTFNBQuz/8aw6VsKS
17
+ c7RXY0QI6NsgdLD1OGVgH9AXhDqvgfOBXDWdr/DNJa0wDFNaWRrMFeNQLm7Xhxuf
18
+ OBQycq6vUiWJ6XTqcdk+xErcWRbsQPsGozCEcHfrAoGBAI+sl2QsMClI/PLDHWeq
19
+ ict/Y3aNigCebsYSzFxKgcOP05raLD417sEPplBIovpS1kigECDrJ0KgmSIoDZj7
20
+ Z8dM57gcfHrmJZfycB2AaYDcD2K+bui625Nd/LFkFu4MYQUHYDshSiGmDwIZ0UhY
21
+ bcQu+DWpq1rj1Mjaph7RLSYZAoGBAMAJNiZt6qT/ZonwA/A1mm7oYmekAJo2I0y+
22
+ CwTZ43oYph4Kx19nU3Up05aw3MyfEhJUkF/cCxErKY7+cqouAKiu1DCfDCNePTZE
23
+ o5M3BqEUgFNnPCgYyG6ZRIZco/wGpTKplvKMg1EuplIZUhbZvtKv+d3xGtyfl8Jc
24
+ huKH75lTAoGAHQ3Sy56zgQEJ3QFrIw4puztf/KXpSgLA+aSDh6Ti4IY7L+CwZmuW
25
+ JyVbgF33CwSIKEhacmALs1ZZsDc1ZXov1HWwePxe4/m7smoqZDtrRXQsbRB5COzA
26
+ U30iEMW/rwI3WmHhiIWZYje85+VJZqBc5QS8guv4/XrS/FE7C8Suksc=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDLDCCAhSgAwIBAgIIEJHFsHrKBGYwDQYJKoZIhvcNAQELBQAwJjEQMA4GA1UE
3
+ ChMHRmx1ZW50ZDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTE5MDYxOTA1MTM0NVoX
4
+ DTE5MDkxODExMTg0NVowJjEQMA4GA1UEChMHRmx1ZW50ZDESMBAGA1UEAxMJbG9j
5
+ YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArbUTk5n5RruI
6
+ QGhK1T8g/emKonlfWNMSj/J/f/U9NJ14ugIxyHBMqx4WaTyA4zjT2VJO5tRBe385
7
+ zlIUf8i+x7Ovt/MgsjiwXyKv7qdsE5KHLq+VXJfA+s5vAAyzBHY/BA7xxh/QqCI8
8
+ a/a1OyHyaQ9pFRFXtQBlTH7Fc1qSw5Yg0EXofa6YIBQuDjfqa7FRPj+bEWDO5PUq
9
+ OMzH5XKBUPS9GLHOqia0CnzF2a51TArC0Dl1oNFa7myVmjBuNtkG88Fkd7YNzGa+
10
+ sNBJPmuGvFXuU3XPEnrtARO/SG4g9/MQUvfMI3jFFOJAMmEKd8QXxO5FgIuEnaNO
11
+ hVRVH/e9wwIDAQABo14wXDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
12
+ BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPLdOVnVWuuB
13
+ 7Pnvpgte4BHitzFYMA0GCSqGSIb3DQEBCwUAA4IBAQBp8LAzjWIJapwTBnnivwZk
14
+ D6Lr028mZIacbBZKsmmPi0VvDFqCvUAbHN8ytPlRBWnvvkihDkZs1TwcDCXGsWYs
15
+ dNNwsYGpk3mQxsHQ9atvy0mQGLDlfaSs/329bfVCw1cPFo9n+MeivSBoE6asdIbH
16
+ tOW3kk1XtJZ2qQJJRvexFImZc0z8c2cG0+eR5hQxQd9bLnAczi/8mZ8VzaU/O3UU
17
+ OJoVuyp0AA8f2f0f1QDaeH9stWZtJQj3ZX1DWHRE3OmVkoBdlt8EHYGggtvQaLIF
18
+ XbHigLHzYztMjmDt4fmRczu/Fu6M4xNro8jLgjiIjqlLBjDZiKrSbOwgyebwFDlv
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDLDCCAhSgAwIBAgIIEJHFsHrKBGYwDQYJKoZIhvcNAQELBQAwJjEQMA4GA1UE
3
+ ChMHRmx1ZW50ZDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTE5MDYxOTA1MTM0NVoX
4
+ DTE5MDkxODExMTg0NVowJjEQMA4GA1UEChMHRmx1ZW50ZDESMBAGA1UEAxMJbG9j
5
+ YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArbUTk5n5RruI
6
+ QGhK1T8g/emKonlfWNMSj/J/f/U9NJ14ugIxyHBMqx4WaTyA4zjT2VJO5tRBe385
7
+ zlIUf8i+x7Ovt/MgsjiwXyKv7qdsE5KHLq+VXJfA+s5vAAyzBHY/BA7xxh/QqCI8
8
+ a/a1OyHyaQ9pFRFXtQBlTH7Fc1qSw5Yg0EXofa6YIBQuDjfqa7FRPj+bEWDO5PUq
9
+ OMzH5XKBUPS9GLHOqia0CnzF2a51TArC0Dl1oNFa7myVmjBuNtkG88Fkd7YNzGa+
10
+ sNBJPmuGvFXuU3XPEnrtARO/SG4g9/MQUvfMI3jFFOJAMmEKd8QXxO5FgIuEnaNO
11
+ hVRVH/e9wwIDAQABo14wXDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
12
+ BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPLdOVnVWuuB
13
+ 7Pnvpgte4BHitzFYMA0GCSqGSIb3DQEBCwUAA4IBAQBp8LAzjWIJapwTBnnivwZk
14
+ D6Lr028mZIacbBZKsmmPi0VvDFqCvUAbHN8ytPlRBWnvvkihDkZs1TwcDCXGsWYs
15
+ dNNwsYGpk3mQxsHQ9atvy0mQGLDlfaSs/329bfVCw1cPFo9n+MeivSBoE6asdIbH
16
+ tOW3kk1XtJZ2qQJJRvexFImZc0z8c2cG0+eR5hQxQd9bLnAczi/8mZ8VzaU/O3UU
17
+ OJoVuyp0AA8f2f0f1QDaeH9stWZtJQj3ZX1DWHRE3OmVkoBdlt8EHYGggtvQaLIF
18
+ XbHigLHzYztMjmDt4fmRczu/Fu6M4xNro8jLgjiIjqlLBjDZiKrSbOwgyebwFDlv
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDLDCCAhSgAwIBAgIIEJHFsHrKBGYwDQYJKoZIhvcNAQELBQAwJjEQMA4GA1UE
3
+ ChMHRmx1ZW50ZDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTE5MDYxOTA1MTM0NVoX
4
+ DTE5MDkxODExMTg0NVowJjEQMA4GA1UEChMHRmx1ZW50ZDESMBAGA1UEAxMJbG9j
5
+ YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArbUTk5n5RruI
6
+ QGhK1T8g/emKonlfWNMSj/J/f/U9NJ14ugIxyHBMqx4WaTyA4zjT2VJO5tRBe385
7
+ zlIUf8i+x7Ovt/MgsjiwXyKv7qdsE5KHLq+VXJfA+s5vAAyzBHY/BA7xxh/QqCI8
8
+ a/a1OyHyaQ9pFRFXtQBlTH7Fc1qSw5Yg0EXofa6YIBQuDjfqa7FRPj+bEWDO5PUq
9
+ OMzH5XKBUPS9GLHOqia0CnzF2a51TArC0Dl1oNFa7myVmjBuNtkG88Fkd7YNzGa+
10
+ sNBJPmuGvFXuU3XPEnrtARO/SG4g9/MQUvfMI3jFFOJAMmEKd8QXxO5FgIuEnaNO
11
+ hVRVH/e9wwIDAQABo14wXDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
12
+ BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPLdOVnVWuuB
13
+ 7Pnvpgte4BHitzFYMA0GCSqGSIb3DQEBCwUAA4IBAQBp8LAzjWIJapwTBnnivwZk
14
+ D6Lr028mZIacbBZKsmmPi0VvDFqCvUAbHN8ytPlRBWnvvkihDkZs1TwcDCXGsWYs
15
+ dNNwsYGpk3mQxsHQ9atvy0mQGLDlfaSs/329bfVCw1cPFo9n+MeivSBoE6asdIbH
16
+ tOW3kk1XtJZ2qQJJRvexFImZc0z8c2cG0+eR5hQxQd9bLnAczi/8mZ8VzaU/O3UU
17
+ OJoVuyp0AA8f2f0f1QDaeH9stWZtJQj3ZX1DWHRE3OmVkoBdlt8EHYGggtvQaLIF
18
+ XbHigLHzYztMjmDt4fmRczu/Fu6M4xNro8jLgjiIjqlLBjDZiKrSbOwgyebwFDlv
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEA21in8qRqBrfYlRHr1N6eGq3d4CnKe+lTt0sGbab1670s0+h1
3
+ lGtjWny6gLSnt5PBY36CUoFB8MtRciVG2zUhB+dAZe4Mst5dzJO6cONT/l/USbCV
4
+ rQ/x8m3YzeJNj89fCZ7/7po8CpEfn16BMAd6TMXZZ8O+DCgv3SliEyxpi9CLg2PK
5
+ wAV4lwktbGenYadWLFWjv5a+QElFGH/tu5jUDhggoisoQGyZCls2Vmbr6RH+uiy8
6
+ js3gxy+5YgbuwkrQtjbfwxe5yEsd6RgzO8oLqlowCwCrn4CNaXFwaZa/vqcWzY4L
7
+ qiEWLfmFpFcSZdoWjr1WHsJS/PM3AyJea8nAnQIDAQABAoIBAGkMpaqsmWbMR7rl
8
+ EVgqoffPCzMfcK01ivV+xf5f9ulG+aAndaB2aefdUojvfF+MMRNQdGPFKeqDxWbw
9
+ eWXkpQQe+ZWXk5darfubSLBl/0UVahs8qgJvX4WmnC3GUzUrsK1v68y/K0A4TrfJ
10
+ z/9LpYP9QWjTs0IpQPsfpavfGlFt1TJvPxmomn7D+n0N6zzD3kFlGdeCSYwtPURR
11
+ dJ7ifX2vU4E8UtSm7gLrXlmAl1O7bJjFvL3+QlzKDM4M1WJpA9MkmM2icKxdYpew
12
+ biRmIiUHdV4soad2Aq58v4q5UgdMqGI8f+fWPO9qgXN7AKbT9NkXr1w/pziOt5rq
13
+ /77lbKECgYEA9bmOSA1LfRRclJCaoWWu4PiaXdvMHvsNC9r8NUGuwmiosEMKHFEJ
14
+ z8wvzVXprziXAwDTwqkPJmKseNPC8WCq2GfNu7lqJ1V1wHxpzHKhiAWhs7rE7skW
15
+ mF2xn2Tocba/L3Nb+K0tXhOZ7daduz94YXFhmRtsutZ9JvFv3G+QmHkCgYEA5IS4
16
+ +cOFyha486U9jXyLcPmZXZY9ql4ILuKuQ5pHA7CBO/zU2behuwcainW6P0WzbhKs
17
+ CP8xR5W/otqcaHZxy6hg9/nUFVVZIR/0jgKyxCqJA1W49jt23gykmU6q0vj7haZJ
18
+ QMhcAbleHBC7YvYoMTpTMe7tZP4YsFNysBn76EUCgYBqtFAn07YjM7NcREsRqSE+
19
+ ylXmSisijOxGaKq6ybIE9APEvufmEf7LwKRFa3hVwaI6CKLsVhOhHJo+wd5WiR7H
20
+ aJQ7X7HMMN04YA5lXKXudluYu5MHCkWIlq8qQ1x4/N2a0mJu42ze/G4MjPTjuhUh
21
+ Y2X5YaJepAOm5JMpyzykKQKBgQDj9eaU+dBgLdSo8UD7ALAVrlio/HRdnNoq82SF
22
+ +cQ30P7KucgXvFDxQv/d+d0mu0BoYOYPP4uIbsEyE0SODQIt+LVrCmTgNzjni3op
23
+ pFVyzT/K/Nu7fsxwbEpSySAtv8UhqSVQI89sxN81vhdAfHDR0u4lVMSqx7QXSdeS
24
+ Bwm9xQKBgQDSeoHoXbmiqRBss9Em69JPwWRZOc9eLns+fFJ1x/WkhY4bnnVXTYkZ
25
+ LzRN4ICq18xHy8egbl93uxDcjkMxi3Wj64QZcygI9gWmDBW2hdMpEArR/grsM/FH
26
+ DYu9KUMhm5T1KtXtV3izSVCprthdGjbKSbmR6hGw3n9Z1uP6V1rnXQ==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDPTCCAiWgAwIBAgILAJJ76Kpa6DYtsncwDQYJKoZIhvcNAQELBQAwUzELMAkG
3
+ A1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MR8w
4
+ HQYDVQQDDBZjYS50ZXN0aW5nLmZsdWVudGQub3JnMCAXDTcwMDEwMTAwMDAwMFoY
5
+ DzIxMTgxMDI3MDgwNjU3WjBTMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAU
6
+ BgNVBAcMDU1vdW50YWluIFZpZXcxHzAdBgNVBAMMFmNhLnRlc3RpbmcuZmx1ZW50
7
+ ZC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbWKfypGoGt9iV
8
+ EevU3p4ard3gKcp76VO3SwZtpvXrvSzT6HWUa2NafLqAtKe3k8FjfoJSgUHwy1Fy
9
+ JUbbNSEH50Bl7gyy3l3Mk7pw41P+X9RJsJWtD/HybdjN4k2Pz18Jnv/umjwKkR+f
10
+ XoEwB3pMxdlnw74MKC/dKWITLGmL0IuDY8rABXiXCS1sZ6dhp1YsVaO/lr5ASUUY
11
+ f+27mNQOGCCiKyhAbJkKWzZWZuvpEf66LLyOzeDHL7liBu7CStC2Nt/DF7nISx3p
12
+ GDM7yguqWjALAKufgI1pcXBplr++pxbNjguqIRYt+YWkVxJl2haOvVYewlL88zcD
13
+ Il5rycCdAgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
14
+ AGPhEAc+vb9PHyet9t5gKJTZF7S4x207hKZ0zLqCQCLM7VjrTVBh/TUFT+saiPsv
15
+ 4k2TYSZKInYXh6tkSzdGlRyzk166hF1eOTOae/92Da5PEQMT0AC+SDRDHXrNTyD8
16
+ ZxP2xOl0j+FNeKQDdNL+PCU56PYehY40dYZ/EjRyu4VjKaSCMHcVx7eMTyxU3wtB
17
+ HbOa8UJdUXEjn4h7icz4aca22aqLedXNaDr6YX+mo25t1jsTO7cEMfr4Ce7GvxdA
18
+ msey/b5jnsKcpL7/2uYz5+owD39JZQBRQt+1YAzIU+BNiz8yzdXJO4aQpGWTflIB
19
+ jO31o7x4loEvaBTQbX3iP2g=
20
+ -----END CERTIFICATE-----