fluentd 1.17.0-x64-mingw32 → 1.18.0-x64-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +100 -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/command/fluentd.rb +7 -1
  8. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  9. data/lib/fluent/compat/propagate_default.rb +4 -4
  10. data/lib/fluent/config/literal_parser.rb +9 -2
  11. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  12. data/lib/fluent/engine.rb +49 -33
  13. data/lib/fluent/env.rb +3 -0
  14. data/lib/fluent/event_router.rb +2 -2
  15. data/lib/fluent/log/console_adapter.rb +4 -2
  16. data/lib/fluent/plugin/filter_parser.rb +27 -51
  17. data/lib/fluent/plugin/in_exec.rb +14 -2
  18. data/lib/fluent/plugin/in_http.rb +6 -1
  19. data/lib/fluent/plugin/in_sample.rb +13 -7
  20. data/lib/fluent/plugin/in_syslog.rb +4 -0
  21. data/lib/fluent/plugin/in_tail.rb +65 -23
  22. data/lib/fluent/plugin/in_tcp.rb +4 -0
  23. data/lib/fluent/plugin/in_udp.rb +10 -1
  24. data/lib/fluent/plugin/input.rb +4 -0
  25. data/lib/fluent/plugin/out_buffer.rb +40 -0
  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 +12 -0
  29. data/lib/fluent/plugin/output.rb +2 -0
  30. data/lib/fluent/plugin/parser_json.rb +4 -12
  31. data/lib/fluent/plugin_helper/cert_option.rb +8 -0
  32. data/lib/fluent/plugin_helper/event_emitter.rb +12 -0
  33. data/lib/fluent/plugin_helper/http_server/server.rb +24 -8
  34. data/lib/fluent/plugin_helper/server.rb +9 -0
  35. data/lib/fluent/root_agent.rb +114 -19
  36. data/lib/fluent/source_only_buffer_agent.rb +102 -0
  37. data/lib/fluent/supervisor.rb +207 -34
  38. data/lib/fluent/system_config.rb +15 -3
  39. data/lib/fluent/version.rb +1 -1
  40. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  41. metadata +24 -483
  42. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
  43. data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
  44. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  45. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  46. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  47. data/.github/ISSUE_TEMPLATE.md +0 -17
  48. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  49. data/.github/workflows/stale-actions.yml +0 -24
  50. data/.github/workflows/test-ruby-head.yml +0 -31
  51. data/.github/workflows/test.yml +0 -32
  52. data/.gitignore +0 -30
  53. data/Gemfile +0 -9
  54. data/fluentd.gemspec +0 -62
  55. data/test/command/test_binlog_reader.rb +0 -362
  56. data/test/command/test_ca_generate.rb +0 -70
  57. data/test/command/test_cap_ctl.rb +0 -100
  58. data/test/command/test_cat.rb +0 -128
  59. data/test/command/test_ctl.rb +0 -56
  60. data/test/command/test_fluentd.rb +0 -1291
  61. data/test/command/test_plugin_config_formatter.rb +0 -397
  62. data/test/command/test_plugin_generator.rb +0 -109
  63. data/test/compat/test_calls_super.rb +0 -166
  64. data/test/compat/test_parser.rb +0 -92
  65. data/test/config/assertions.rb +0 -42
  66. data/test/config/test_config_parser.rb +0 -551
  67. data/test/config/test_configurable.rb +0 -1784
  68. data/test/config/test_configure_proxy.rb +0 -604
  69. data/test/config/test_dsl.rb +0 -415
  70. data/test/config/test_element.rb +0 -518
  71. data/test/config/test_literal_parser.rb +0 -309
  72. data/test/config/test_plugin_configuration.rb +0 -56
  73. data/test/config/test_section.rb +0 -191
  74. data/test/config/test_system_config.rb +0 -195
  75. data/test/config/test_types.rb +0 -408
  76. data/test/counter/test_client.rb +0 -563
  77. data/test/counter/test_error.rb +0 -44
  78. data/test/counter/test_mutex_hash.rb +0 -179
  79. data/test/counter/test_server.rb +0 -589
  80. data/test/counter/test_store.rb +0 -258
  81. data/test/counter/test_validator.rb +0 -137
  82. data/test/helper.rb +0 -155
  83. data/test/helpers/fuzzy_assert.rb +0 -89
  84. data/test/helpers/process_extenstion.rb +0 -33
  85. data/test/log/test_console_adapter.rb +0 -117
  86. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  87. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  88. data/test/plugin/data/2010/01/20100102.log +0 -0
  89. data/test/plugin/data/log/bar +0 -0
  90. data/test/plugin/data/log/foo/bar.log +0 -0
  91. data/test/plugin/data/log/foo/bar2 +0 -0
  92. data/test/plugin/data/log/test.log +0 -0
  93. data/test/plugin/data/log_numeric/01.log +0 -0
  94. data/test/plugin/data/log_numeric/02.log +0 -0
  95. data/test/plugin/data/log_numeric/12.log +0 -0
  96. data/test/plugin/data/log_numeric/14.log +0 -0
  97. data/test/plugin/data/sd_file/config +0 -11
  98. data/test/plugin/data/sd_file/config.json +0 -17
  99. data/test/plugin/data/sd_file/config.yaml +0 -11
  100. data/test/plugin/data/sd_file/config.yml +0 -11
  101. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  102. data/test/plugin/in_tail/test_fifo.rb +0 -121
  103. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  104. data/test/plugin/in_tail/test_position_file.rb +0 -346
  105. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  106. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  107. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  108. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  109. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  110. data/test/plugin/test_bare_output.rb +0 -131
  111. data/test/plugin/test_base.rb +0 -247
  112. data/test/plugin/test_buf_file.rb +0 -1314
  113. data/test/plugin/test_buf_file_single.rb +0 -898
  114. data/test/plugin/test_buf_memory.rb +0 -42
  115. data/test/plugin/test_buffer.rb +0 -1493
  116. data/test/plugin/test_buffer_chunk.rb +0 -209
  117. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  118. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  119. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  120. data/test/plugin/test_compressable.rb +0 -87
  121. data/test/plugin/test_file_util.rb +0 -96
  122. data/test/plugin/test_filter.rb +0 -368
  123. data/test/plugin/test_filter_grep.rb +0 -697
  124. data/test/plugin/test_filter_parser.rb +0 -731
  125. data/test/plugin/test_filter_record_transformer.rb +0 -577
  126. data/test/plugin/test_filter_stdout.rb +0 -207
  127. data/test/plugin/test_formatter_csv.rb +0 -136
  128. data/test/plugin/test_formatter_hash.rb +0 -38
  129. data/test/plugin/test_formatter_json.rb +0 -61
  130. data/test/plugin/test_formatter_ltsv.rb +0 -70
  131. data/test/plugin/test_formatter_msgpack.rb +0 -28
  132. data/test/plugin/test_formatter_out_file.rb +0 -116
  133. data/test/plugin/test_formatter_single_value.rb +0 -44
  134. data/test/plugin/test_formatter_tsv.rb +0 -76
  135. data/test/plugin/test_in_debug_agent.rb +0 -49
  136. data/test/plugin/test_in_exec.rb +0 -261
  137. data/test/plugin/test_in_forward.rb +0 -1178
  138. data/test/plugin/test_in_gc_stat.rb +0 -62
  139. data/test/plugin/test_in_http.rb +0 -1124
  140. data/test/plugin/test_in_monitor_agent.rb +0 -922
  141. data/test/plugin/test_in_object_space.rb +0 -66
  142. data/test/plugin/test_in_sample.rb +0 -190
  143. data/test/plugin/test_in_syslog.rb +0 -505
  144. data/test/plugin/test_in_tail.rb +0 -3429
  145. data/test/plugin/test_in_tcp.rb +0 -328
  146. data/test/plugin/test_in_udp.rb +0 -296
  147. data/test/plugin/test_in_unix.rb +0 -181
  148. data/test/plugin/test_input.rb +0 -137
  149. data/test/plugin/test_metadata.rb +0 -89
  150. data/test/plugin/test_metrics.rb +0 -294
  151. data/test/plugin/test_metrics_local.rb +0 -96
  152. data/test/plugin/test_multi_output.rb +0 -204
  153. data/test/plugin/test_out_copy.rb +0 -308
  154. data/test/plugin/test_out_exec.rb +0 -312
  155. data/test/plugin/test_out_exec_filter.rb +0 -606
  156. data/test/plugin/test_out_file.rb +0 -1038
  157. data/test/plugin/test_out_forward.rb +0 -1349
  158. data/test/plugin/test_out_http.rb +0 -557
  159. data/test/plugin/test_out_null.rb +0 -105
  160. data/test/plugin/test_out_relabel.rb +0 -28
  161. data/test/plugin/test_out_roundrobin.rb +0 -146
  162. data/test/plugin/test_out_secondary_file.rb +0 -458
  163. data/test/plugin/test_out_stdout.rb +0 -205
  164. data/test/plugin/test_out_stream.rb +0 -103
  165. data/test/plugin/test_output.rb +0 -1334
  166. data/test/plugin/test_output_as_buffered.rb +0 -2024
  167. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  168. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  169. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  170. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  171. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  172. data/test/plugin/test_output_as_standard.rb +0 -374
  173. data/test/plugin/test_owned_by.rb +0 -34
  174. data/test/plugin/test_parser.rb +0 -399
  175. data/test/plugin/test_parser_apache.rb +0 -42
  176. data/test/plugin/test_parser_apache2.rb +0 -47
  177. data/test/plugin/test_parser_apache_error.rb +0 -45
  178. data/test/plugin/test_parser_csv.rb +0 -200
  179. data/test/plugin/test_parser_json.rb +0 -244
  180. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  181. data/test/plugin/test_parser_msgpack.rb +0 -127
  182. data/test/plugin/test_parser_multiline.rb +0 -111
  183. data/test/plugin/test_parser_nginx.rb +0 -88
  184. data/test/plugin/test_parser_none.rb +0 -52
  185. data/test/plugin/test_parser_regexp.rb +0 -284
  186. data/test/plugin/test_parser_syslog.rb +0 -650
  187. data/test/plugin/test_parser_tsv.rb +0 -122
  188. data/test/plugin/test_sd_file.rb +0 -228
  189. data/test/plugin/test_sd_srv.rb +0 -230
  190. data/test/plugin/test_storage.rb +0 -166
  191. data/test/plugin/test_storage_local.rb +0 -335
  192. data/test/plugin/test_string_util.rb +0 -26
  193. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  194. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  195. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  196. data/test/plugin_helper/data/cert/cert.pem +0 -19
  197. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  198. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  199. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  200. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  201. data/test/plugin_helper/data/cert/empty.pem +0 -0
  202. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  203. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  204. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  205. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  206. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  207. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  208. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  209. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  210. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  211. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  212. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  213. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  214. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  215. data/test/plugin_helper/http_server/test_app.rb +0 -65
  216. data/test/plugin_helper/http_server/test_route.rb +0 -32
  217. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  218. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  219. data/test/plugin_helper/test_cert_option.rb +0 -25
  220. data/test/plugin_helper/test_child_process.rb +0 -862
  221. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  222. data/test/plugin_helper/test_event_emitter.rb +0 -80
  223. data/test/plugin_helper/test_event_loop.rb +0 -52
  224. data/test/plugin_helper/test_extract.rb +0 -194
  225. data/test/plugin_helper/test_formatter.rb +0 -255
  226. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  227. data/test/plugin_helper/test_inject.rb +0 -561
  228. data/test/plugin_helper/test_metrics.rb +0 -137
  229. data/test/plugin_helper/test_parser.rb +0 -264
  230. data/test/plugin_helper/test_record_accessor.rb +0 -238
  231. data/test/plugin_helper/test_retry_state.rb +0 -1006
  232. data/test/plugin_helper/test_server.rb +0 -1895
  233. data/test/plugin_helper/test_service_discovery.rb +0 -165
  234. data/test/plugin_helper/test_socket.rb +0 -146
  235. data/test/plugin_helper/test_storage.rb +0 -542
  236. data/test/plugin_helper/test_thread.rb +0 -164
  237. data/test/plugin_helper/test_timer.rb +0 -130
  238. data/test/scripts/exec_script.rb +0 -32
  239. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  240. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  241. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  242. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  243. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  244. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  245. data/test/test_capability.rb +0 -74
  246. data/test/test_clock.rb +0 -164
  247. data/test/test_config.rb +0 -369
  248. data/test/test_configdsl.rb +0 -148
  249. data/test/test_daemonizer.rb +0 -91
  250. data/test/test_engine.rb +0 -203
  251. data/test/test_event.rb +0 -531
  252. data/test/test_event_router.rb +0 -348
  253. data/test/test_event_time.rb +0 -199
  254. data/test/test_file_wrapper.rb +0 -53
  255. data/test/test_filter.rb +0 -121
  256. data/test/test_fluent_log_event_router.rb +0 -99
  257. data/test/test_formatter.rb +0 -369
  258. data/test/test_input.rb +0 -31
  259. data/test/test_log.rb +0 -1076
  260. data/test/test_match.rb +0 -148
  261. data/test/test_mixin.rb +0 -351
  262. data/test/test_msgpack_factory.rb +0 -50
  263. data/test/test_oj_options.rb +0 -55
  264. data/test/test_output.rb +0 -278
  265. data/test/test_plugin.rb +0 -251
  266. data/test/test_plugin_classes.rb +0 -370
  267. data/test/test_plugin_helper.rb +0 -81
  268. data/test/test_plugin_id.rb +0 -119
  269. data/test/test_process.rb +0 -14
  270. data/test/test_root_agent.rb +0 -951
  271. data/test/test_static_config_analysis.rb +0 -177
  272. data/test/test_supervisor.rb +0 -821
  273. data/test/test_test_drivers.rb +0 -136
  274. data/test/test_time_formatter.rb +0 -301
  275. data/test/test_time_parser.rb +0 -362
  276. data/test/test_tls.rb +0 -65
  277. data/test/test_unique_id.rb +0 -47
  278. data/test/test_variable_store.rb +0 -65
@@ -1,122 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/parser'
3
- require 'fluent/plugin/parser_tsv'
4
-
5
- class TSVParserTest < ::Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def create_driver(conf={})
11
- Fluent::Test::Driver::Parser.new(Fluent::TextParser::TSVParser).configure(conf)
12
- end
13
-
14
- data('array param' => '["a","b"]', 'string param' => 'a,b')
15
- def test_config_params(param)
16
- d = create_driver(
17
- 'keys' => param,
18
- )
19
-
20
- assert_equal "\t", d.instance.delimiter
21
-
22
- d = create_driver(
23
- 'keys' => param,
24
- 'delimiter' => ',',
25
- )
26
-
27
- assert_equal ['a', 'b'], d.instance.keys
28
- assert_equal ",", d.instance.delimiter
29
- end
30
-
31
- data('array param' => '["time","a","b"]', 'string param' => 'time,a,b')
32
- def test_parse(param)
33
- d = create_driver('keys' => param, 'time_key' => 'time')
34
- d.instance.parse("2013/02/28 12:00:00\t192.168.0.1\t111") { |time, record|
35
- assert_equal(event_time('2013/02/28 12:00:00', format: '%Y/%m/%d %H:%M:%S'), time)
36
- assert_equal({
37
- 'a' => '192.168.0.1',
38
- 'b' => '111',
39
- }, record)
40
- }
41
- end
42
-
43
- def test_parse_with_time
44
- time_at_start = Time.now.to_i
45
-
46
- d = create_driver('keys' => 'a,b')
47
- d.instance.parse("192.168.0.1\t111") { |time, record|
48
- assert time && time >= time_at_start, "parser puts current time without time input"
49
- assert_equal({
50
- 'a' => '192.168.0.1',
51
- 'b' => '111',
52
- }, record)
53
- }
54
-
55
- d = Fluent::Test::Driver::Parser.new(Fluent::Plugin::TSVParser)
56
- d.configure('keys' => 'a,b', 'time_key' => 'time', 'estimate_current_event' => 'no')
57
- d.instance.parse("192.168.0.1\t111") { |time, record|
58
- assert_equal({
59
- 'a' => '192.168.0.1',
60
- 'b' => '111',
61
- }, record)
62
- assert_nil time, "parser returns nil w/o time and if configured so"
63
- }
64
- end
65
-
66
- data(
67
- 'left blank column' => ["\t@\t@", {"1" => "","2" => "@","3" => "@"}],
68
- 'center blank column' => ["@\t\t@", {"1" => "@","2" => "","3" => "@"}],
69
- 'right blank column' => ["@\t@\t", {"1" => "@","2" => "@","3" => ""}],
70
- '2 right blank columns' => ["@\t\t", {"1" => "@","2" => "","3" => ""}],
71
- 'left blank columns' => ["\t\t@", {"1" => "","2" => "","3" => "@"}],
72
- 'all blank columns' => ["\t\t", {"1" => "","2" => "","3" => ""}])
73
- def test_black_column(data)
74
- line, expected = data
75
-
76
- d = create_driver('keys' => '1,2,3')
77
- d.instance.parse(line) { |time, record|
78
- assert_equal(expected, record)
79
- }
80
- end
81
-
82
- def test_parse_with_keep_time_key
83
- d = create_driver(
84
- 'keys'=>'time',
85
- 'time_key'=>'time',
86
- 'time_format'=>"%d/%b/%Y:%H:%M:%S %z",
87
- 'keep_time_key'=>'true',
88
- )
89
- text = '28/Feb/2013:12:00:00 +0900'
90
- d.instance.parse(text) do |time, record|
91
- assert_equal text, record['time']
92
- end
93
- end
94
-
95
- data('array param' => '["a","b","c","d","e","f"]', 'string param' => 'a,b,c,d,e,f')
96
- def test_parse_with_null_value_pattern(param)
97
- d = create_driver(
98
- 'keys'=>param,
99
- 'null_value_pattern'=>'^(-|null|NULL)$'
100
- )
101
- d.instance.parse("-\tnull\tNULL\t\t--\tnuLL") do |time, record|
102
- assert_nil record['a']
103
- assert_nil record['b']
104
- assert_nil record['c']
105
- assert_equal record['d'], ''
106
- assert_equal record['e'], '--'
107
- assert_equal record['f'], 'nuLL'
108
- end
109
- end
110
-
111
- data('array param' => '["a","b"]', 'string param' => 'a,b')
112
- def test_parse_with_null_empty_string(param)
113
- d = create_driver(
114
- 'keys'=>param,
115
- 'null_empty_string'=>true
116
- )
117
- d.instance.parse("\t ") do |time, record|
118
- assert_nil record['a']
119
- assert_equal record['b'], ' '
120
- end
121
- end
122
- end
@@ -1,228 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin/sd_file'
3
- require 'fileutils'
4
- require 'json'
5
-
6
- class FileServiceDiscoveryTest < ::Test::Unit::TestCase
7
- setup do
8
- @dir = File.expand_path('data/sd_file', __dir__)
9
- FileUtils.mkdir_p(File.join(@dir, 'tmp'))
10
- end
11
-
12
- teardown do
13
- FileUtils.rm_r(File.join(@dir, 'tmp'))
14
- end
15
-
16
- sub_test_case 'configure' do
17
- test 'load yml' do
18
- sdf = Fluent::Plugin::FileServiceDiscovery.new
19
- sdf.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config.yml') }))
20
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24224, 'test1', 1, false, 'user1', 'pass1', 'key1'), sdf.services[0]
21
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24225, nil, 1), sdf.services[1]
22
- end
23
-
24
- test 'load yaml' do
25
- sdf = Fluent::Plugin::FileServiceDiscovery.new
26
- sdf.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config.yaml') }))
27
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24224, 'test1', 1, false, 'user1', 'pass1', 'key1'), sdf.services[0]
28
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24225, nil, 1), sdf.services[1]
29
- end
30
-
31
- test 'load json' do
32
- sdf = Fluent::Plugin::FileServiceDiscovery.new
33
- sdf.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config.json') }))
34
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24224, 'test1', 1, false, 'user1', 'pass1', 'key1'), sdf.services[0]
35
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24225, nil, 1), sdf.services[1]
36
- end
37
-
38
- test 'regard as yaml if ext is not givened' do
39
- sdf = Fluent::Plugin::FileServiceDiscovery.new
40
- sdf.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config') }))
41
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24224, 'test1', 1, false, 'user1', 'pass1', 'key1'), sdf.services[0]
42
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:file, '127.0.0.1', 24225, nil, 1), sdf.services[1]
43
- end
44
-
45
- test 'raise an error if config has error' do
46
- sdf = Fluent::Plugin::FileServiceDiscovery.new
47
- e = assert_raise Fluent::ConfigError do
48
- sdf.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'invalid_config.yaml') }))
49
- end
50
- assert_match(/path=/, e.message)
51
- end
52
-
53
- test 'raise an error if config file does not exist' do
54
- sdf = Fluent::Plugin::FileServiceDiscovery.new
55
- e = assert_raise Fluent::ConfigError do
56
- sdf.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'invalid_not_found.json') }))
57
- end
58
- assert_match(/not found/, e.message)
59
- end
60
- end
61
-
62
- sub_test_case '#start' do
63
- module TestStatEventHelperWrapper
64
- # easy to control statsevent
65
- def event_loop_attach(watcher)
66
- unless watcher.is_a?(Fluent::Plugin::FileServiceDiscovery::StatWatcher)
67
- super
68
- return
69
- end
70
-
71
- @test_stat_event_helper_wrapper_watchers ||= []
72
- @test_stat_event_helper_wrapper_watchers << watcher
73
-
74
- @test_stat_event_helper_wrapper_context = Fiber.new do
75
- loop do
76
- @test_stat_event_helper_wrapper_watchers.each do |w|
77
- w.on_change('old', 'new')
78
- end
79
-
80
- if Fiber.yield == :finish
81
- break
82
- end
83
- end
84
- end
85
- resume
86
- end
87
-
88
- def resume
89
- @test_stat_event_helper_wrapper_context.resume(:resume)
90
- end
91
-
92
- def shutdown
93
- super
94
-
95
- if @test_stat_event_helper_wrapper_context
96
- @test_stat_event_helper_wrapper_context.resume(:finish)
97
- end
98
- end
99
- end
100
-
101
- def create_tmp_config(path, body)
102
- File.write(File.join(@dir, 'tmp', path), body)
103
- end
104
-
105
- setup do
106
- sdf = Fluent::Plugin::FileServiceDiscovery.new
107
- @sd_file = sdf
108
- end
109
-
110
- teardown do
111
- if @sd_file
112
- @sd_file.stop unless @sd_file.stopped?
113
- @sd_file.before_shutdown unless @sd_file.before_shutdown?
114
- @sd_file.shutdown unless @sd_file.shutdown?
115
- @sd_file.after_shutdown unless @sd_file.after_shutdown?
116
- @sd_file.close unless @sd_file.closed?
117
- @sd_file.terminate unless @sd_file.terminated?
118
- end
119
- end
120
-
121
- test 'Skip if file is not updated' do
122
- @sd_file.extend(TestStatEventHelperWrapper)
123
-
124
- create_tmp_config('config.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }]))
125
- @sd_file.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config.yml') }))
126
- queue = []
127
- mock.proxy(@sd_file).refresh_file(queue).twice
128
-
129
- @sd_file.start(queue)
130
- assert_empty queue
131
-
132
- @sd_file.resume
133
- assert_empty queue
134
- end
135
-
136
- test 'Skip if file is invalid contents' do
137
- @sd_file.extend(TestStatEventHelperWrapper)
138
-
139
- create_tmp_config('config.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }]))
140
- @sd_file.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config.yml') }))
141
-
142
- queue = []
143
- @sd_file.start(queue)
144
-
145
- mock.proxy(@sd_file).refresh_file(queue).once
146
- create_tmp_config('test.json', 'invalid contents')
147
- @sd_file.resume
148
-
149
- assert_empty queue
150
- end
151
-
152
- test 'Skip if error is occurred' do
153
- @sd_file.extend(TestStatEventHelperWrapper)
154
-
155
- create_tmp_config('config.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }]))
156
- @sd_file.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'config.yml') }))
157
- queue = []
158
-
159
- FileUtils.rm_r(File.join(@dir, 'tmp', 'config.json'))
160
- mock.proxy(@sd_file).refresh_file(queue).twice
161
-
162
- @sd_file.start(queue)
163
- assert_empty queue
164
-
165
- @sd_file.resume
166
- assert_empty queue
167
- end
168
-
169
- test 'if service is updated, service_in and service_out event happen' do
170
- @sd_file.extend(TestStatEventHelperWrapper)
171
-
172
- create_tmp_config('test.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }]))
173
- @sd_file.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'tmp/test.json') }))
174
-
175
- queue = []
176
- @sd_file.start(queue)
177
- create_tmp_config('test.json', JSON.generate([{ port: 1234, host: '127.0.0.1' }]))
178
- @sd_file.resume
179
-
180
- assert_equal 2, queue.size
181
- join = queue.shift
182
- drain = queue.shift
183
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_IN, join.type
184
- assert_equal 1234, join.service.port
185
- assert_equal '127.0.0.1', join.service.host
186
-
187
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_OUT, drain.type
188
- assert_equal 1233, drain.service.port
189
- assert_equal '127.0.0.1', drain.service.host
190
- end
191
-
192
- test 'if service is deleted, service_out event happens' do
193
- @sd_file.extend(TestStatEventHelperWrapper)
194
-
195
- create_tmp_config('test.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }, { port: 1234, host: '127.0.0.2' }]))
196
- @sd_file.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'tmp/test.json') }))
197
-
198
- queue = []
199
- @sd_file.start(queue)
200
- create_tmp_config('test.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }]))
201
- @sd_file.resume
202
-
203
- assert_equal 1, queue.size
204
- drain = queue.shift
205
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_OUT, drain.type
206
- assert_equal 1234, drain.service.port
207
- assert_equal '127.0.0.2', drain.service.host
208
- end
209
-
210
- test 'if new service is added, service_in event happens' do
211
- @sd_file.extend(TestStatEventHelperWrapper)
212
-
213
- create_tmp_config('test.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }]))
214
- @sd_file.configure(config_element('service_discovery', '', { 'path' => File.join(@dir, 'tmp/test.json') }))
215
-
216
- queue = []
217
- @sd_file.start(queue)
218
- create_tmp_config('test.json', JSON.generate([{ port: 1233, host: '127.0.0.1' }, { port: 1234, host: '127.0.0.2' }]))
219
- @sd_file.resume
220
-
221
- assert_equal 1, queue.size
222
- join = queue.shift
223
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_IN, join.type
224
- assert_equal 1234, join.service.port
225
- assert_equal '127.0.0.2', join.service.host
226
- end
227
- end
228
- end
@@ -1,230 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin/sd_srv'
3
- require 'fileutils'
4
- require 'flexmock/test_unit'
5
- require 'json'
6
-
7
- class SrvServiceDiscoveryTest < ::Test::Unit::TestCase
8
- SRV_RECORD1 = Resolv::DNS::Resource::IN::SRV.new(1, 10, 8081, 'service1.example.com')
9
- SRV_RECORD2 = Resolv::DNS::Resource::IN::SRV.new(2, 20, 8082, 'service2.example.com')
10
-
11
- sub_test_case 'configure' do
12
- test 'set services ordered by priority' do
13
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
14
- mock(Resolv::DNS).new { flexmock('dns_resolver', getresources: [SRV_RECORD2, SRV_RECORD1], getaddress: '127.0.0.1') }
15
-
16
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com' }))
17
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8081, 'service1.example.com', 10, false, '', '', nil), sdf.services[0]
18
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8082, 'service2.example.com', 20, false, '', '', nil), sdf.services[1]
19
- end
20
-
21
- test 'reuturn host name without revolving name when dns_lookup is flase' do
22
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
23
- mock(Resolv::DNS).new { flexmock('dns_resolver', getresources: [SRV_RECORD1, SRV_RECORD2], getaddress: '127.0.0.1') }
24
-
25
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'dns_lookup' => false }))
26
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, 'service1.example.com', 8081, 'service1.example.com', 10, false, '', '', nil), sdf.services[0]
27
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, 'service2.example.com', 8082, 'service2.example.com', 20, false, '', '', nil), sdf.services[1]
28
- end
29
-
30
- test 'pass a value as :nameserver to Resolve::DNS when dns_server_host is given' do
31
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
32
- mock(Resolv::DNS).new(nameserver: '8.8.8.8') { flexmock('dns_resolver', getresources: [SRV_RECORD1, SRV_RECORD2], getaddress: '127.0.0.1') }
33
-
34
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'dns_server_host' => '8.8.8.8' }))
35
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8081, 'service1.example.com', 10, false, '', '', nil), sdf.services[0]
36
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8082, 'service2.example.com', 20, false, '', '', nil), sdf.services[1]
37
- end
38
-
39
- test 'pass a value as :nameserver_port to Resolve::DNS when dns_server_host has port' do
40
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
41
- mock(Resolv::DNS).new(nameserver_port: [['8.8.8.8', 8080]]) { flexmock('dns_resolver', getresources: [SRV_RECORD1, SRV_RECORD2], getaddress: '127.0.0.1') }
42
-
43
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'dns_server_host' => '8.8.8.8:8080' }))
44
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8081, 'service1.example.com', 10, false, '', '', nil), sdf.services[0]
45
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8082, 'service2.example.com', 20, false, '', '', nil), sdf.services[1]
46
- end
47
-
48
- test 'target follows RFC2782' do
49
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
50
- mock = flexmock('dns_resolver', getaddress: '127.0.0.1')
51
- .should_receive(:getresources).with("_service1._tcp.example.com", Resolv::DNS::Resource::IN::SRV)
52
- .and_return([SRV_RECORD1, SRV_RECORD2])
53
- .mock
54
-
55
- mock(Resolv::DNS).new { mock }
56
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com' }))
57
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8081, 'service1.example.com', 10, false, '', '', nil), sdf.services[0]
58
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8082, 'service2.example.com', 20, false, '', '', nil), sdf.services[1]
59
- end
60
-
61
- test 'can change protocol' do
62
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
63
- mock = flexmock('dns_resolver', getaddress: '127.0.0.1')
64
- .should_receive(:getresources).with("_service1._udp.example.com", Resolv::DNS::Resource::IN::SRV)
65
- .and_return([SRV_RECORD1, SRV_RECORD2])
66
- .mock
67
-
68
- mock(Resolv::DNS).new { mock }
69
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'proto' => 'udp' }))
70
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8081, 'service1.example.com', 10, false, '', '', nil), sdf.services[0]
71
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8082, 'service2.example.com', 20, false, '', '', nil), sdf.services[1]
72
- end
73
-
74
- test 'can set password, username, password' do
75
- sdf = Fluent::Plugin::SrvServiceDiscovery.new
76
- mock(Resolv::DNS).new { flexmock('dns_resolver', getresources: [SRV_RECORD2, SRV_RECORD1], getaddress: '127.0.0.1') }
77
-
78
- sdf.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'shared_key' => 'key', 'username' => 'user', 'password' => 'pass' }))
79
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8081, 'service1.example.com', 10, false, 'user', 'pass', 'key'), sdf.services[0]
80
- assert_equal Fluent::Plugin::ServiceDiscovery::Service.new(:srv, '127.0.0.1', 8082, 'service2.example.com', 20, false, 'user', 'pass', 'key'), sdf.services[1]
81
- end
82
- end
83
-
84
- sub_test_case '#start' do
85
- module TestTimerEventHelperWrapper
86
- # easy to control statsevent
87
- def timer_execute(_name, _interval, &block)
88
- @test_timer_event_helper_wrapper_context = Fiber.new do
89
- loop do
90
- block.call
91
-
92
- if Fiber.yield == :finish
93
- break
94
- end
95
- end
96
- end
97
-
98
- resume
99
- end
100
-
101
- def resume
102
- @test_timer_event_helper_wrapper_context.resume(:resume)
103
- end
104
-
105
- def shutdown
106
- super
107
-
108
- if @test_timer_event_helper_wrapper_context
109
- @test_timer_event_helper_wrapper_context.resume(:finish)
110
- end
111
-
112
- end
113
- end
114
-
115
- setup do
116
- sds = Fluent::Plugin::SrvServiceDiscovery.new
117
- @sd_srv = sds
118
- end
119
-
120
- teardown do
121
- if @sd_srv
122
- @sd_srv.stop unless @sd_srv.stopped?
123
- @sd_srv.before_shutdown unless @sd_srv.before_shutdown?
124
- @sd_srv.shutdown unless @sd_srv.shutdown?
125
- @sd_srv.after_shutdown unless @sd_srv.after_shutdown?
126
- @sd_srv.close unless @sd_srv.closed?
127
- @sd_srv.terminate unless @sd_srv.terminated?
128
- end
129
- end
130
-
131
- test 'Skip if srv record is not updated' do
132
- @sd_srv.extend(TestTimerEventHelperWrapper)
133
- mock(Resolv::DNS).new { flexmock('dns_resolver', getresources: [SRV_RECORD2, SRV_RECORD1], getaddress: '127.0.0.1') }
134
- @sd_srv.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com' }))
135
- queue = []
136
-
137
- @sd_srv.start(queue)
138
- assert_empty queue
139
-
140
- @sd_srv.resume
141
- assert_empty queue
142
- end
143
-
144
- test 'Skip if DNS resolver raise an error' do
145
- @sd_srv.extend(TestTimerEventHelperWrapper)
146
- mock = flexmock('dns_resolver', getaddress: '127.0.0.1')
147
- .should_receive(:getresources)
148
- .and_return([SRV_RECORD1, SRV_RECORD2])
149
- .and_return { raise 'some error' } # for start
150
- .and_return { raise 'some error' } # for resume
151
- .mock
152
-
153
- mock(Resolv::DNS).new { mock }
154
- @sd_srv.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com' }))
155
- queue = []
156
-
157
- @sd_srv.start(queue)
158
- assert_empty queue
159
-
160
- @sd_srv.resume
161
- assert_empty queue
162
- end
163
-
164
- test 'if service is updated, service_in and service_out event happen' do
165
- @sd_srv.extend(TestTimerEventHelperWrapper)
166
- mock = flexmock('dns_resolver', getaddress: '127.0.0.1')
167
- .should_receive(:getresources)
168
- .and_return([SRV_RECORD1])
169
- .and_return([SRV_RECORD2])
170
- .mock
171
-
172
- mock(Resolv::DNS).new { mock }
173
- @sd_srv.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'dns_lookup' => false }))
174
- queue = []
175
-
176
- @sd_srv.start(queue)
177
- join = queue.shift
178
- drain = queue.shift
179
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_IN, join.type
180
- assert_equal 8082, join.service.port
181
- assert_equal 'service2.example.com', join.service.host
182
-
183
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_OUT, drain.type
184
- assert_equal 8081, drain.service.port
185
- assert_equal 'service1.example.com', drain.service.host
186
- end
187
-
188
- test 'if service is deleted, service_out event happens' do
189
- @sd_srv.extend(TestTimerEventHelperWrapper)
190
- mock = flexmock('dns_resolver', getaddress: '127.0.0.1')
191
- .should_receive(:getresources)
192
- .and_return([SRV_RECORD1, SRV_RECORD2])
193
- .and_return([SRV_RECORD2])
194
- .mock
195
-
196
- mock(Resolv::DNS).new { mock }
197
- @sd_srv.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'dns_lookup' => false }))
198
- queue = []
199
-
200
- @sd_srv.start(queue)
201
-
202
- assert_equal 1, queue.size
203
- drain = queue.shift
204
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_OUT, drain.type
205
- assert_equal 8081, drain.service.port
206
- assert_equal 'service1.example.com', drain.service.host
207
- end
208
-
209
- test 'if new service is added, service_in event happens' do
210
- @sd_srv.extend(TestTimerEventHelperWrapper)
211
- mock = flexmock('dns_resolver', getaddress: '127.0.0.1')
212
- .should_receive(:getresources)
213
- .and_return([SRV_RECORD2])
214
- .and_return([SRV_RECORD1, SRV_RECORD2])
215
- .mock
216
-
217
- mock(Resolv::DNS).new { mock }
218
- @sd_srv.configure(config_element('service_discovery', '', { 'service' => 'service1', 'hostname' => 'example.com', 'dns_lookup' => false }))
219
- queue = []
220
-
221
- @sd_srv.start(queue)
222
-
223
- assert_equal 1, queue.size
224
- join = queue.shift
225
- assert_equal Fluent::Plugin::ServiceDiscovery::SERVICE_IN, join.type
226
- assert_equal 8081, join.service.port
227
- assert_equal 'service1.example.com', join.service.host
228
- end
229
- end
230
- end