fluent-plugin-http-pull 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f1480636da1bab4f88742d01d09a28689dc23f4f
4
- data.tar.gz: 6684def2381874b18aebf9e0b882d8d478f7413b
3
+ metadata.gz: 6e3619cf826d85851de1718106ba6184f72f1bc2
4
+ data.tar.gz: 4ecc716ba91a880d13c7ce3ca021f678c8c20243
5
5
  SHA512:
6
- metadata.gz: 741429737da8ed091713200ee6f59bfd8716070680715cade5c36959a1b7962fc7310bfdc2413873115baa7820b993b58165bbbae86e948707a5b79b90c52921
7
- data.tar.gz: c765d56d66a4b2bad85d30919f497eccf3a180038ca1122a59e0d96ecfa9f0a8016607c039d79b14175a3e3dfae3c44b92203b861bc16a280dc0481735079e56
6
+ metadata.gz: cca5ffc95191262f47ceca1207477415f44f233ccec6f2b2befd7ed5104a93c6758df4ce970e107be2f99ec88d46b2f7196de9a94ea2549a1e2def87a41520bd
7
+ data.tar.gz: b60ee55a581523bc46564d6f63fc5c901f48f98e9d319fdf7fb19dd3dce0fb65a98062f780c12873cfca44f0b4399e1832ec0942645e4c1f139df84cdf843294
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ Gemfile.lock
5
5
  coverage/**/*
6
6
  *.gem
7
7
  *.log
8
+ .ruby-version
data/.travis.yml CHANGED
@@ -6,5 +6,5 @@ rvm:
6
6
  gemfile:
7
7
  - Gemfile
8
8
 
9
- script: bundle exec rake test
9
+ script: bundle exec rake test TESTOPTS=-v
10
10
  sudo: false
data/README.md CHANGED
@@ -120,6 +120,10 @@ The tag of the event.
120
120
 
121
121
  The url of remote server.
122
122
 
123
+ ### agent (string) (optional, default: fluent-plugin-http-pull)
124
+
125
+ The user agent string of request.
126
+
123
127
  ### interval (time) (required)
124
128
 
125
129
  The interval time between periodic request.
data/appveyor.yml CHANGED
@@ -10,7 +10,7 @@ install:
10
10
  build: off
11
11
 
12
12
  test_script:
13
- - bundle exec rake test
13
+ - bundle exec rake test TESTOPTS=-v
14
14
 
15
15
  branches:
16
16
  only:
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-http-pull"
6
- spec.version = "0.6.1"
6
+ spec.version = "0.7.0"
7
7
  spec.authors = ["filepang"]
8
8
  spec.email = ["filepang@gmail.com"]
9
9
 
@@ -35,6 +35,9 @@ module Fluent
35
35
  desc 'The interval time between periodic request'
36
36
  config_param :interval, :time
37
37
 
38
+ desc 'The user agent string of request'
39
+ config_param :agent, :string, default: "fluent-plugin-http-pull"
40
+
38
41
  desc 'status_only'
39
42
  config_param :status_only, :bool, default: false
40
43
 
@@ -72,7 +75,8 @@ module Fluent
72
75
 
73
76
  @parser = parser_create unless @status_only
74
77
  @_request_headers = {
75
- "Content-Type" => "application/x-www-form-urlencoded"
78
+ "Content-Type" => "application/x-www-form-urlencoded",
79
+ "User-Agent" => @agent
76
80
  }.merge(@request_headers.map do |section|
77
81
  header = section["header"]
78
82
  value = section["value"]
@@ -3,18 +3,7 @@ require "fluent/plugin/in_http_pull.rb"
3
3
 
4
4
  require 'ostruct'
5
5
 
6
- class HttpPullInputTest < Test::Unit::TestCase
7
- @stub_server = nil
8
-
9
- setup do
10
- @stub_server = StubServer.new
11
- @stub_server.start
12
- end
13
-
14
- teardown do
15
- @stub_server.shutdown
16
- end
17
-
6
+ class HttpPullInputTestDefaultOptions < Test::Unit::TestCase
18
7
  sub_test_case "default value of each options" do
19
8
  TEST_DEFAULT_VALUE_CONFIG = %[
20
9
  tag test
@@ -65,557 +54,12 @@ class HttpPullInputTest < Test::Unit::TestCase
65
54
 
66
55
  assert_equal(:get, d.instance.http_method)
67
56
  end
68
- end
69
-
70
- sub_test_case "success case" do
71
- TEST_INTERVAL_3_CONFIG = %[
72
- tag test
73
- url http://127.0.0.1:3939
74
-
75
- interval 3s
76
- format none
77
- status_only true
78
- ]
79
-
80
- TEST_INTERVAL_5_CONFIG = %[
81
- tag test
82
- url http://127.0.0.1:3939
83
-
84
- interval 5s
85
- format json
86
- ]
87
-
88
- TEST_INTERVAL_3_REDIRECT_CONFIG = %[
89
- tag test
90
- url http://127.0.0.1:3939/redirect
91
-
92
- interval 3s
93
- format json
94
- ]
95
-
96
- test 'interval 3 with status_only' do
97
- d = create_driver TEST_INTERVAL_3_CONFIG
98
- assert_equal("test", d.instance.tag)
99
- assert_equal(3, d.instance.interval)
100
-
101
- d.run(timeout: 8) do
102
- sleep 7
103
- end
104
- assert_equal(2, d.events.size)
105
-
106
- d.events.each do |tag, time, record|
107
- assert_equal("test", tag)
108
-
109
- assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200}, record)
110
- assert(time.is_a?(Fluent::EventTime))
111
- end
112
- end
113
-
114
- test 'interval 5' do
115
- d = create_driver TEST_INTERVAL_5_CONFIG
116
- assert_equal("test", d.instance.tag)
117
- assert_equal(5, d.instance.interval)
118
-
119
- d.run(timeout: 12) do
120
- sleep 11
121
- end
122
- assert_equal(2, d.events.size)
123
-
124
- d.events.each do |tag, time, record|
125
- assert_equal("test", tag)
126
-
127
- assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200, "message"=>{"status"=>"OK"}}, record)
128
- assert(time.is_a?(Fluent::EventTime))
129
- end
130
- end
131
-
132
- test 'interval 3 with redirect' do
133
- d = create_driver TEST_INTERVAL_3_REDIRECT_CONFIG
134
- assert_equal("test", d.instance.tag)
135
- assert_equal(3, d.instance.interval)
136
-
137
- d.run(timeout: 8) do
138
- sleep 7
139
- end
140
- assert_equal(2, d.events.size)
141
-
142
- d.events.each do |tag, time, record|
143
- assert_equal("test", tag)
144
-
145
- assert_equal({"url"=>"http://127.0.0.1:3939/redirect","status"=>200, "message"=>{"status"=>"OK"}}, record)
146
- assert(time.is_a?(Fluent::EventTime))
147
- end
148
- end
149
- end
150
-
151
- sub_test_case "fail when not 200 OK" do
152
- TEST_404_INTERVAL_3_CONFIG = %[
153
- tag test
154
- url http://127.0.0.1:3939/not_exist
155
-
156
- interval 3s
157
- format none
158
- status_only true
159
- ]
160
-
161
- TEST_500_INTERVAL_3_CONFIG = %[
162
- tag test
163
- url http://127.0.0.1:3939/internal_error
164
-
165
- interval 3s
166
- format none
167
- status_only true
168
- ]
169
-
170
- test '404' do
171
- d = create_driver TEST_404_INTERVAL_3_CONFIG
172
- assert_equal("test", d.instance.tag)
173
- assert_equal(3, d.instance.interval)
174
-
175
- d.run(timeout: 8) do
176
- sleep 7
177
- end
178
- assert_equal(2, d.events.size)
179
-
180
- d.events.each do |tag, time, record|
181
- assert_equal("test", tag)
182
-
183
- assert_equal("http://127.0.0.1:3939/not_exist", record["url"])
184
- assert(time.is_a?(Fluent::EventTime))
185
-
186
- assert_equal(404, record["status"])
187
- assert_not_nil(record["error"])
188
- end
189
- end
190
-
191
- test '500' do
192
- d = create_driver TEST_500_INTERVAL_3_CONFIG
193
- assert_equal("test", d.instance.tag)
194
- assert_equal(3, d.instance.interval)
195
-
196
- d.run(timeout: 8) do
197
- sleep 7
198
- end
199
- assert_equal(2, d.events.size)
200
-
201
- d.events.each do |tag, time, record|
202
- assert_equal("test", tag)
203
-
204
- assert_equal("http://127.0.0.1:3939/internal_error", record["url"])
205
- assert(time.is_a?(Fluent::EventTime))
206
-
207
- assert_equal(500, record["status"])
208
- assert_not_nil(record["error"])
209
- end
210
- end
211
- end
212
-
213
- sub_test_case "fail when remote down" do
214
- TEST_REFUSED_CONFIG = %[
215
- tag test
216
- url http://127.0.0.1:5927
217
- interval 1s
218
-
219
- format json
220
- ]
221
- test "connection refused by remote" do
222
- d = create_driver TEST_REFUSED_CONFIG
223
- assert_equal("test", d.instance.tag)
224
-
225
- d.run(timeout: 4) do
226
- sleep 3
227
- end
228
-
229
- assert_equal(3, d.events.size)
230
- d.events.each do |tag, time, record|
231
- assert_equal("test", tag)
232
-
233
- assert_equal("http://127.0.0.1:5927", record["url"])
234
- assert(time.is_a?(Fluent::EventTime))
235
-
236
- assert_equal(0, record["status"])
237
- assert_not_nil(record["error"])
238
- end
239
- end
240
- end
241
-
242
- sub_test_case "fail when remote timeout" do
243
- TEST_TIMEOUT_FAIL_CONFIG = %[
244
- tag test
245
- url http://127.0.0.1:3939/timeout
246
- timeout 2s
247
-
248
- interval 3s
249
- format json
250
- ]
251
-
252
- test "timeout" do
253
- d = create_driver TEST_TIMEOUT_FAIL_CONFIG
254
- assert_equal("test", d.instance.tag)
255
- assert_equal(2, d.instance.timeout)
256
-
257
- d.run(timeout: 8) do
258
- sleep 7
259
- end
260
- assert_equal(2, d.events.size)
261
-
262
- d.events.each do |tag, time, record|
263
- assert_equal("test", tag)
264
-
265
- assert_equal("http://127.0.0.1:3939/timeout", record["url"])
266
- assert(time.is_a?(Fluent::EventTime))
267
-
268
- assert_equal(0, record["status"])
269
- assert_not_nil(record["error"])
270
- end
271
- end
272
- end
273
-
274
- sub_test_case "remote is prtected by basic auth" do
275
- TEST_AUTH_SUCCESS_CONFIG = %[
276
- tag test
277
- url http://127.0.0.1:3939/protected
278
- timeout 2s
279
- user HatsuneMiku
280
- password 3939
281
-
282
- interval 3s
283
- format json
284
- ]
285
-
286
- TEST_AUTH_FAIL_CONFIG = %[
287
- tag test
288
- url http://127.0.0.1:3939/protected
289
- timeout 2s
290
- user HatsuneMiku
291
- password wrong_password
292
-
293
- interval 3s
294
- format json
295
- ]
296
-
297
- TEST_AUTH_FAIL_NOT_GIVEN_CONFIG = %[
298
- tag test
299
- url http://127.0.0.1:3939/protected
300
- timeout 2s
301
-
302
- interval 3s
303
- format json
304
- ]
305
-
306
- test 'interval 3 with corrent password' do
307
- d = create_driver TEST_AUTH_SUCCESS_CONFIG
308
- assert_equal("test", d.instance.tag)
309
- assert_equal(3, d.instance.interval)
310
-
311
- d.run(timeout: 8) do
312
- sleep 7
313
- end
314
- assert_equal(2, d.events.size)
315
-
316
- d.events.each do |tag, time, record|
317
- assert_equal("test", tag)
318
-
319
- assert_equal({"url"=>"http://127.0.0.1:3939/protected","status"=>200, "message"=>{"status"=>"OK"}}, record)
320
- assert(time.is_a?(Fluent::EventTime))
321
- end
322
- end
323
-
324
- test 'interval 3 with wrong password' do
325
- d = create_driver TEST_AUTH_FAIL_CONFIG
326
- assert_equal("test", d.instance.tag)
327
- assert_equal(3, d.instance.interval)
328
-
329
- d.run(timeout: 8) do
330
- sleep 7
331
- end
332
- assert_equal(2, d.events.size)
333
-
334
- d.events.each do |tag, time, record|
335
- assert_equal("test", tag)
336
-
337
- assert_equal("http://127.0.0.1:3939/protected", record["url"])
338
- assert(time.is_a?(Fluent::EventTime))
339
-
340
- assert_equal(401, record["status"])
341
- assert_not_nil(record["error"])
342
- end
343
- end
344
-
345
- test 'interval 3 without auth info' do
346
- d = create_driver TEST_AUTH_FAIL_CONFIG
347
- assert_equal("test", d.instance.tag)
348
- assert_equal(3, d.instance.interval)
349
-
350
- d.run(timeout: 8) do
351
- sleep 7
352
- end
353
- assert_equal(2, d.events.size)
354
-
355
- d.events.each do |tag, time, record|
356
- assert_equal("test", tag)
357
-
358
- assert_equal("http://127.0.0.1:3939/protected", record["url"])
359
- assert(time.is_a?(Fluent::EventTime))
360
-
361
- assert_equal(401, record["status"])
362
- assert_not_nil(record["error"])
363
- end
364
- end
365
- end
366
-
367
- sub_test_case "success case behind proxy" do
368
- TEST_INTERVAL_3_PROXY_CONFIG = %[
369
- tag test
370
- url http://127.0.0.1:3939
371
- proxy http://127.0.0.1:4040
372
-
373
- interval 3s
374
- format none
375
- status_only true
376
- ]
377
-
378
- TEST_INTERVAL_3_REDIRECT_PROXY_CONFIG = %[
379
- tag test
380
- url http://127.0.0.1:3939/redirect
381
- proxy http://127.0.0.1:4040
382
-
383
- interval 3s
384
- format json
385
- ]
386
-
387
- TEST_AUTH_SUCCESS_PROXY_CONFIG = %[
388
- tag test
389
- url http://127.0.0.1:3939/protected
390
- proxy http://127.0.0.1:4040
391
- timeout 2s
392
- user HatsuneMiku
393
- password 3939
394
-
395
- interval 3s
396
- format json
397
- ]
398
-
399
- setup do
400
- @proxy_server = StubProxy.new
401
- @proxy_server.start
402
- end
403
-
404
- teardown do
405
- @proxy_server.shutdown
406
- end
407
-
408
- test 'interval 3 with status_only' do
409
- d = create_driver TEST_INTERVAL_3_PROXY_CONFIG
410
- assert_equal("test", d.instance.tag)
411
- assert_equal(3, d.instance.interval)
412
-
413
- d.run(timeout: 8) do
414
- sleep 7
415
- end
416
- assert_equal(2, d.events.size)
417
-
418
- d.events.each do |tag, time, record|
419
- assert_equal("test", tag)
420
-
421
- assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200}, record)
422
- assert(time.is_a?(Fluent::EventTime))
423
- end
424
- end
425
-
426
- test 'interval 3 with redirect' do
427
- d = create_driver TEST_INTERVAL_3_REDIRECT_PROXY_CONFIG
428
- assert_equal("test", d.instance.tag)
429
- assert_equal(3, d.instance.interval)
430
-
431
- d.run(timeout: 8) do
432
- sleep 7
433
- end
434
- assert_equal(2, d.events.size)
435
-
436
- d.events.each do |tag, time, record|
437
- assert_equal("test", tag)
438
-
439
- assert_equal({"url"=>"http://127.0.0.1:3939/redirect","status"=>200, "message"=>{"status"=>"OK"}}, record)
440
- assert(time.is_a?(Fluent::EventTime))
441
- end
442
- end
443
-
444
- test 'interval 3 with corrent password' do
445
- d = create_driver TEST_AUTH_SUCCESS_PROXY_CONFIG
446
- assert_equal("test", d.instance.tag)
447
- assert_equal(3, d.instance.interval)
448
-
449
- d.run(timeout: 8) do
450
- sleep 7
451
- end
452
- assert_equal(2, d.events.size)
453
-
454
- d.events.each do |tag, time, record|
455
- assert_equal("test", tag)
456
-
457
- assert_equal({"url"=>"http://127.0.0.1:3939/protected","status"=>200, "message"=>{"status"=>"OK"}}, record)
458
- assert(time.is_a?(Fluent::EventTime))
459
- end
460
- end
461
- end
462
-
463
- sub_test_case "capture response header" do
464
- TEST_INTERVAL_3_RES_HEADER_CONFIG = %[
465
- tag test
466
- url http://127.0.0.1:3939
467
-
468
- interval 3s
469
- format json
470
-
471
- <response_header>
472
- header Content-Type
473
- </response_header>
474
- ]
475
-
476
- TEST_INTERVAL_3_RES_MULTI_HEADER_CONFIG = %[
477
- tag test
478
- url http://127.0.0.1:3939
479
-
480
- interval 3s
481
- format json
482
-
483
- <response_header>
484
- header Content-Type
485
- </response_header>
486
-
487
- <response_header>
488
- header Content-Length
489
- </response_header>
490
- ]
491
-
492
- test 'interval 3 with single header' do
493
- d = create_driver TEST_INTERVAL_3_RES_HEADER_CONFIG
494
- assert_equal("test", d.instance.tag)
495
- assert_equal(3, d.instance.interval)
496
-
497
- d.run(timeout: 8) do
498
- sleep 7
499
- end
500
- assert_equal(2, d.events.size)
501
-
502
- d.events.each do |tag, time, record|
503
- assert_equal("test", tag)
504
-
505
- assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"Content-Type"=>"application/json"}}, record)
506
- assert(time.is_a?(Fluent::EventTime))
507
- end
508
- end
509
-
510
- test 'interval 3 with multiple header' do
511
- d = create_driver TEST_INTERVAL_3_RES_MULTI_HEADER_CONFIG
512
- assert_equal("test", d.instance.tag)
513
- assert_equal(3, d.instance.interval)
514
-
515
- d.run(timeout: 8) do
516
- sleep 7
517
- end
518
- assert_equal(2, d.events.size)
519
-
520
- d.events.each do |tag, time, record|
521
- assert_equal("test", tag)
522
-
523
- assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"Content-Type"=>"application/json","Content-Length"=>"18"}}, record)
524
- assert(time.is_a?(Fluent::EventTime))
525
- end
526
- end
527
- end
528
-
529
- sub_test_case "custom request header" do
530
- TEST_INTERVAL_3_CUSTOM_HEADER_CONFIG = %[
531
- tag test
532
- url http://127.0.0.1:3939/custom_header
533
-
534
- interval 3s
535
- format json
536
-
537
- <request_header>
538
- header HATSUNE-MIKU
539
- value 3939
540
- </request_header>
541
-
542
- <response_header>
543
- header HATSUNE-MIKU
544
- </response_header>
545
- ]
546
-
547
- test 'interval 3 with single header' do
548
- d = create_driver TEST_INTERVAL_3_CUSTOM_HEADER_CONFIG
549
- assert_equal("test", d.instance.tag)
550
- assert_equal(3, d.instance.interval)
551
-
552
- d.run(timeout: 8) do
553
- sleep 7
554
- end
555
- assert_equal(2, d.events.size)
556
-
557
- d.events.each do |tag, time, record|
558
- assert_equal("test", tag)
559
-
560
- assert_equal({"url"=>"http://127.0.0.1:3939/custom_header","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"HATSUNE-MIKU"=>"3939"}}, record)
561
- assert(time.is_a?(Fluent::EventTime))
562
- end
563
- end
564
- end
565
-
566
- sub_test_case "request method" do
567
- TEST_INTERVAL_3_POST = %[
568
- tag test
569
- url http://127.0.0.1:3939/method_post
570
-
571
- interval 3s
572
- format json
573
- http_method post
574
- ]
575
-
576
- TEST_INTERVAL_3_DELETE = %[
577
- tag test
578
- url http://127.0.0.1:3939/method_delete
579
-
580
- interval 3s
581
- format json
582
- http_method delete
583
- ]
584
-
585
- test 'interval 3 with :post' do
586
- d = create_driver TEST_INTERVAL_3_POST
587
- assert_equal("test", d.instance.tag)
588
- assert_equal(3, d.instance.interval)
589
-
590
- d.run(timeout: 8) do
591
- sleep 7
592
- end
593
- assert_equal(2, d.events.size)
594
-
595
- d.events.each do |tag, time, record|
596
- assert_equal("test", tag)
597
-
598
- assert_equal({"url"=>"http://127.0.0.1:3939/method_post","status"=>200, "message"=>{"status"=>"OK"}}, record)
599
- assert(time.is_a?(Fluent::EventTime))
600
- end
601
- end
602
57
 
603
- test 'interval 3 with :delete' do
604
- d = create_driver TEST_INTERVAL_3_DELETE
58
+ test 'agent' do
59
+ d = create_driver TEST_DEFAULT_VALUE_CONFIG
605
60
  assert_equal("test", d.instance.tag)
606
- assert_equal(3, d.instance.interval)
607
-
608
- d.run(timeout: 8) do
609
- sleep 7
610
- end
611
- assert_equal(2, d.events.size)
612
-
613
- d.events.each do |tag, time, record|
614
- assert_equal("test", tag)
615
61
 
616
- assert_equal({"url"=>"http://127.0.0.1:3939/method_delete","status"=>200, "message"=>{"status"=>"OK"}}, record)
617
- assert(time.is_a?(Fluent::EventTime))
618
- end
62
+ assert_equal("fluent-plugin-http-pull", d.instance.agent)
619
63
  end
620
64
  end
621
65
 
@@ -0,0 +1,116 @@
1
+ require "helper"
2
+ require "fluent/plugin/in_http_pull.rb"
3
+
4
+ require 'ostruct'
5
+
6
+ class HttpPullInputTestAuth < Test::Unit::TestCase
7
+ @stub_server = nil
8
+
9
+ setup do
10
+ @stub_server = StubServer.new
11
+ @stub_server.start
12
+ end
13
+
14
+ teardown do
15
+ @stub_server.shutdown
16
+ end
17
+
18
+ sub_test_case "remote is prtected by basic auth" do
19
+ TEST_AUTH_SUCCESS_CONFIG = %[
20
+ tag test
21
+ url http://127.0.0.1:3939/protected
22
+ timeout 2s
23
+ user HatsuneMiku
24
+ password 3939
25
+
26
+ interval 3s
27
+ format json
28
+ ]
29
+
30
+ TEST_AUTH_FAIL_CONFIG = %[
31
+ tag test
32
+ url http://127.0.0.1:3939/protected
33
+ timeout 2s
34
+ user HatsuneMiku
35
+ password wrong_password
36
+
37
+ interval 3s
38
+ format json
39
+ ]
40
+
41
+ TEST_AUTH_FAIL_NOT_GIVEN_CONFIG = %[
42
+ tag test
43
+ url http://127.0.0.1:3939/protected
44
+ timeout 2s
45
+
46
+ interval 3s
47
+ format json
48
+ ]
49
+
50
+ test 'interval 3 with corrent password' do
51
+ d = create_driver TEST_AUTH_SUCCESS_CONFIG
52
+ assert_equal("test", d.instance.tag)
53
+ assert_equal(3, d.instance.interval)
54
+
55
+ d.run(timeout: 8) do
56
+ sleep 7
57
+ end
58
+ assert_equal(2, d.events.size)
59
+
60
+ d.events.each do |tag, time, record|
61
+ assert_equal("test", tag)
62
+
63
+ assert_equal({"url"=>"http://127.0.0.1:3939/protected","status"=>200, "message"=>{"status"=>"OK"}}, record)
64
+ assert(time.is_a?(Fluent::EventTime))
65
+ end
66
+ end
67
+
68
+ test 'interval 3 with wrong password' do
69
+ d = create_driver TEST_AUTH_FAIL_CONFIG
70
+ assert_equal("test", d.instance.tag)
71
+ assert_equal(3, d.instance.interval)
72
+
73
+ d.run(timeout: 8) do
74
+ sleep 7
75
+ end
76
+ assert_equal(2, d.events.size)
77
+
78
+ d.events.each do |tag, time, record|
79
+ assert_equal("test", tag)
80
+
81
+ assert_equal("http://127.0.0.1:3939/protected", record["url"])
82
+ assert(time.is_a?(Fluent::EventTime))
83
+
84
+ assert_equal(401, record["status"])
85
+ assert_not_nil(record["error"])
86
+ end
87
+ end
88
+
89
+ test 'interval 3 without auth info' do
90
+ d = create_driver TEST_AUTH_FAIL_CONFIG
91
+ assert_equal("test", d.instance.tag)
92
+ assert_equal(3, d.instance.interval)
93
+
94
+ d.run(timeout: 8) do
95
+ sleep 7
96
+ end
97
+ assert_equal(2, d.events.size)
98
+
99
+ d.events.each do |tag, time, record|
100
+ assert_equal("test", tag)
101
+
102
+ assert_equal("http://127.0.0.1:3939/protected", record["url"])
103
+ assert(time.is_a?(Fluent::EventTime))
104
+
105
+ assert_equal(401, record["status"])
106
+ assert_not_nil(record["error"])
107
+ end
108
+ end
109
+ end
110
+
111
+ private
112
+
113
+ def create_driver(conf)
114
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::HttpPullInput).configure(conf)
115
+ end
116
+ end
@@ -0,0 +1,227 @@
1
+ require "helper"
2
+ require "fluent/plugin/in_http_pull.rb"
3
+
4
+ require 'ostruct'
5
+
6
+ class HttpPullInputTestBasic < Test::Unit::TestCase
7
+ @stub_server = nil
8
+
9
+ setup do
10
+ @stub_server = StubServer.new
11
+ @stub_server.start
12
+ end
13
+
14
+ teardown do
15
+ @stub_server.shutdown
16
+ end
17
+
18
+ sub_test_case "success case" do
19
+ TEST_INTERVAL_3_CONFIG = %[
20
+ tag test
21
+ url http://127.0.0.1:3939
22
+
23
+ interval 3s
24
+ format none
25
+ status_only true
26
+ ]
27
+
28
+ TEST_INTERVAL_5_CONFIG = %[
29
+ tag test
30
+ url http://127.0.0.1:3939
31
+
32
+ interval 5s
33
+ format json
34
+ ]
35
+
36
+ TEST_INTERVAL_3_REDIRECT_CONFIG = %[
37
+ tag test
38
+ url http://127.0.0.1:3939/redirect
39
+
40
+ interval 3s
41
+ format json
42
+ ]
43
+
44
+ test 'interval 3 with status_only' do
45
+ d = create_driver TEST_INTERVAL_3_CONFIG
46
+ assert_equal("test", d.instance.tag)
47
+ assert_equal(3, d.instance.interval)
48
+
49
+ d.run(timeout: 8) do
50
+ sleep 7
51
+ end
52
+ assert_equal(2, d.events.size)
53
+
54
+ d.events.each do |tag, time, record|
55
+ assert_equal("test", tag)
56
+
57
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200}, record)
58
+ assert(time.is_a?(Fluent::EventTime))
59
+ end
60
+ end
61
+
62
+ test 'interval 5' do
63
+ d = create_driver TEST_INTERVAL_5_CONFIG
64
+ assert_equal("test", d.instance.tag)
65
+ assert_equal(5, d.instance.interval)
66
+
67
+ d.run(timeout: 12) do
68
+ sleep 11
69
+ end
70
+ assert_equal(2, d.events.size)
71
+
72
+ d.events.each do |tag, time, record|
73
+ assert_equal("test", tag)
74
+
75
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200, "message"=>{"status"=>"OK"}}, record)
76
+ assert(time.is_a?(Fluent::EventTime))
77
+ end
78
+ end
79
+
80
+ test 'interval 3 with redirect' do
81
+ d = create_driver TEST_INTERVAL_3_REDIRECT_CONFIG
82
+ assert_equal("test", d.instance.tag)
83
+ assert_equal(3, d.instance.interval)
84
+
85
+ d.run(timeout: 8) do
86
+ sleep 7
87
+ end
88
+ assert_equal(2, d.events.size)
89
+
90
+ d.events.each do |tag, time, record|
91
+ assert_equal("test", tag)
92
+
93
+ assert_equal({"url"=>"http://127.0.0.1:3939/redirect","status"=>200, "message"=>{"status"=>"OK"}}, record)
94
+ assert(time.is_a?(Fluent::EventTime))
95
+ end
96
+ end
97
+ end
98
+
99
+ sub_test_case "fail when not 200 OK" do
100
+ TEST_404_INTERVAL_3_CONFIG = %[
101
+ tag test
102
+ url http://127.0.0.1:3939/not_exist
103
+
104
+ interval 3s
105
+ format none
106
+ status_only true
107
+ ]
108
+
109
+ TEST_500_INTERVAL_3_CONFIG = %[
110
+ tag test
111
+ url http://127.0.0.1:3939/internal_error
112
+
113
+ interval 3s
114
+ format none
115
+ status_only true
116
+ ]
117
+
118
+ test '404' do
119
+ d = create_driver TEST_404_INTERVAL_3_CONFIG
120
+ assert_equal("test", d.instance.tag)
121
+ assert_equal(3, d.instance.interval)
122
+
123
+ d.run(timeout: 8) do
124
+ sleep 7
125
+ end
126
+ assert_equal(2, d.events.size)
127
+
128
+ d.events.each do |tag, time, record|
129
+ assert_equal("test", tag)
130
+
131
+ assert_equal("http://127.0.0.1:3939/not_exist", record["url"])
132
+ assert(time.is_a?(Fluent::EventTime))
133
+
134
+ assert_equal(404, record["status"])
135
+ assert_not_nil(record["error"])
136
+ end
137
+ end
138
+
139
+ test '500' do
140
+ d = create_driver TEST_500_INTERVAL_3_CONFIG
141
+ assert_equal("test", d.instance.tag)
142
+ assert_equal(3, d.instance.interval)
143
+
144
+ d.run(timeout: 8) do
145
+ sleep 7
146
+ end
147
+ assert_equal(2, d.events.size)
148
+
149
+ d.events.each do |tag, time, record|
150
+ assert_equal("test", tag)
151
+
152
+ assert_equal("http://127.0.0.1:3939/internal_error", record["url"])
153
+ assert(time.is_a?(Fluent::EventTime))
154
+
155
+ assert_equal(500, record["status"])
156
+ assert_not_nil(record["error"])
157
+ end
158
+ end
159
+ end
160
+
161
+ sub_test_case "fail when remote down" do
162
+ TEST_REFUSED_CONFIG = %[
163
+ tag test
164
+ url http://127.0.0.1:5927
165
+ interval 1s
166
+
167
+ format json
168
+ ]
169
+ test "connection refused by remote" do
170
+ d = create_driver TEST_REFUSED_CONFIG
171
+ assert_equal("test", d.instance.tag)
172
+
173
+ d.run(timeout: 4) do
174
+ sleep 3
175
+ end
176
+
177
+ assert_equal(3, d.events.size)
178
+ d.events.each do |tag, time, record|
179
+ assert_equal("test", tag)
180
+
181
+ assert_equal("http://127.0.0.1:5927", record["url"])
182
+ assert(time.is_a?(Fluent::EventTime))
183
+
184
+ assert_equal(0, record["status"])
185
+ assert_not_nil(record["error"])
186
+ end
187
+ end
188
+ end
189
+
190
+ sub_test_case "fail when remote timeout" do
191
+ TEST_TIMEOUT_FAIL_CONFIG = %[
192
+ tag test
193
+ url http://127.0.0.1:3939/timeout
194
+ timeout 2s
195
+
196
+ interval 3s
197
+ format json
198
+ ]
199
+
200
+ test "timeout" do
201
+ d = create_driver TEST_TIMEOUT_FAIL_CONFIG
202
+ assert_equal("test", d.instance.tag)
203
+ assert_equal(2, d.instance.timeout)
204
+
205
+ d.run(timeout: 8) do
206
+ sleep 7
207
+ end
208
+ assert_equal(2, d.events.size)
209
+
210
+ d.events.each do |tag, time, record|
211
+ assert_equal("test", tag)
212
+
213
+ assert_equal("http://127.0.0.1:3939/timeout", record["url"])
214
+ assert(time.is_a?(Fluent::EventTime))
215
+
216
+ assert_equal(0, record["status"])
217
+ assert_not_nil(record["error"])
218
+ end
219
+ end
220
+ end
221
+
222
+ private
223
+
224
+ def create_driver(conf)
225
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::HttpPullInput).configure(conf)
226
+ end
227
+ end
@@ -0,0 +1,126 @@
1
+ require "helper"
2
+ require "fluent/plugin/in_http_pull.rb"
3
+
4
+ require 'ostruct'
5
+
6
+ class HttpPullInputTestHttpHeader < Test::Unit::TestCase
7
+ @stub_server = nil
8
+
9
+ setup do
10
+ @stub_server = StubServer.new
11
+ @stub_server.start
12
+ end
13
+
14
+ teardown do
15
+ @stub_server.shutdown
16
+ end
17
+
18
+ sub_test_case "capture response header" do
19
+ TEST_INTERVAL_3_RES_HEADER_CONFIG = %[
20
+ tag test
21
+ url http://127.0.0.1:3939
22
+
23
+ interval 3s
24
+ format json
25
+
26
+ <response_header>
27
+ header Content-Type
28
+ </response_header>
29
+ ]
30
+
31
+ TEST_INTERVAL_3_RES_MULTI_HEADER_CONFIG = %[
32
+ tag test
33
+ url http://127.0.0.1:3939
34
+
35
+ interval 3s
36
+ format json
37
+
38
+ <response_header>
39
+ header Content-Type
40
+ </response_header>
41
+
42
+ <response_header>
43
+ header Content-Length
44
+ </response_header>
45
+ ]
46
+
47
+ test 'interval 3 with single header' do
48
+ d = create_driver TEST_INTERVAL_3_RES_HEADER_CONFIG
49
+ assert_equal("test", d.instance.tag)
50
+ assert_equal(3, d.instance.interval)
51
+
52
+ d.run(timeout: 8) do
53
+ sleep 7
54
+ end
55
+ assert_equal(2, d.events.size)
56
+
57
+ d.events.each do |tag, time, record|
58
+ assert_equal("test", tag)
59
+
60
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"Content-Type"=>"application/json"}}, record)
61
+ assert(time.is_a?(Fluent::EventTime))
62
+ end
63
+ end
64
+
65
+ test 'interval 3 with multiple header' do
66
+ d = create_driver TEST_INTERVAL_3_RES_MULTI_HEADER_CONFIG
67
+ assert_equal("test", d.instance.tag)
68
+ assert_equal(3, d.instance.interval)
69
+
70
+ d.run(timeout: 8) do
71
+ sleep 7
72
+ end
73
+ assert_equal(2, d.events.size)
74
+
75
+ d.events.each do |tag, time, record|
76
+ assert_equal("test", tag)
77
+
78
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"Content-Type"=>"application/json","Content-Length"=>"18"}}, record)
79
+ assert(time.is_a?(Fluent::EventTime))
80
+ end
81
+ end
82
+ end
83
+
84
+ sub_test_case "custom request header" do
85
+ TEST_INTERVAL_3_CUSTOM_HEADER_CONFIG = %[
86
+ tag test
87
+ url http://127.0.0.1:3939/custom_header
88
+
89
+ interval 3s
90
+ format json
91
+
92
+ <request_header>
93
+ header HATSUNE-MIKU
94
+ value 3939
95
+ </request_header>
96
+
97
+ <response_header>
98
+ header HATSUNE-MIKU
99
+ </response_header>
100
+ ]
101
+
102
+ test 'interval 3 with single header' do
103
+ d = create_driver TEST_INTERVAL_3_CUSTOM_HEADER_CONFIG
104
+ assert_equal("test", d.instance.tag)
105
+ assert_equal(3, d.instance.interval)
106
+
107
+ d.run(timeout: 8) do
108
+ sleep 7
109
+ end
110
+ assert_equal(2, d.events.size)
111
+
112
+ d.events.each do |tag, time, record|
113
+ assert_equal("test", tag)
114
+
115
+ assert_equal({"url"=>"http://127.0.0.1:3939/custom_header","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"HATSUNE-MIKU"=>"3939"}}, record)
116
+ assert(time.is_a?(Fluent::EventTime))
117
+ end
118
+ end
119
+ end
120
+
121
+ private
122
+
123
+ def create_driver(conf)
124
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::HttpPullInput).configure(conf)
125
+ end
126
+ end
@@ -0,0 +1,119 @@
1
+ require "helper"
2
+ require "fluent/plugin/in_http_pull.rb"
3
+
4
+ require 'ostruct'
5
+
6
+ class HttpPullInputTestProxy < Test::Unit::TestCase
7
+ @stub_server = nil
8
+
9
+ setup do
10
+ @stub_server = StubServer.new
11
+ @stub_server.start
12
+ end
13
+
14
+ teardown do
15
+ @stub_server.shutdown
16
+ end
17
+
18
+ sub_test_case "success case behind proxy" do
19
+ TEST_INTERVAL_3_PROXY_CONFIG = %[
20
+ tag test
21
+ url http://127.0.0.1:3939
22
+ proxy http://127.0.0.1:4040
23
+
24
+ interval 3s
25
+ format none
26
+ status_only true
27
+ ]
28
+
29
+ TEST_INTERVAL_3_REDIRECT_PROXY_CONFIG = %[
30
+ tag test
31
+ url http://127.0.0.1:3939/redirect
32
+ proxy http://127.0.0.1:4040
33
+
34
+ interval 3s
35
+ format json
36
+ ]
37
+
38
+ TEST_AUTH_SUCCESS_PROXY_CONFIG = %[
39
+ tag test
40
+ url http://127.0.0.1:3939/protected
41
+ proxy http://127.0.0.1:4040
42
+ timeout 2s
43
+ user HatsuneMiku
44
+ password 3939
45
+
46
+ interval 3s
47
+ format json
48
+ ]
49
+
50
+ setup do
51
+ @proxy_server = StubProxy.new
52
+ @proxy_server.start
53
+ end
54
+
55
+ teardown do
56
+ @proxy_server.shutdown
57
+ end
58
+
59
+ test 'interval 3 with status_only' do
60
+ d = create_driver TEST_INTERVAL_3_PROXY_CONFIG
61
+ assert_equal("test", d.instance.tag)
62
+ assert_equal(3, d.instance.interval)
63
+
64
+ d.run(timeout: 8) do
65
+ sleep 7
66
+ end
67
+ assert_equal(2, d.events.size)
68
+
69
+ d.events.each do |tag, time, record|
70
+ assert_equal("test", tag)
71
+
72
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200}, record)
73
+ assert(time.is_a?(Fluent::EventTime))
74
+ end
75
+ end
76
+
77
+ test 'interval 3 with redirect' do
78
+ d = create_driver TEST_INTERVAL_3_REDIRECT_PROXY_CONFIG
79
+ assert_equal("test", d.instance.tag)
80
+ assert_equal(3, d.instance.interval)
81
+
82
+ d.run(timeout: 8) do
83
+ sleep 7
84
+ end
85
+ assert_equal(2, d.events.size)
86
+
87
+ d.events.each do |tag, time, record|
88
+ assert_equal("test", tag)
89
+
90
+ assert_equal({"url"=>"http://127.0.0.1:3939/redirect","status"=>200, "message"=>{"status"=>"OK"}}, record)
91
+ assert(time.is_a?(Fluent::EventTime))
92
+ end
93
+ end
94
+
95
+ test 'interval 3 with corrent password' do
96
+ d = create_driver TEST_AUTH_SUCCESS_PROXY_CONFIG
97
+ assert_equal("test", d.instance.tag)
98
+ assert_equal(3, d.instance.interval)
99
+
100
+ d.run(timeout: 8) do
101
+ sleep 7
102
+ end
103
+ assert_equal(2, d.events.size)
104
+
105
+ d.events.each do |tag, time, record|
106
+ assert_equal("test", tag)
107
+
108
+ assert_equal({"url"=>"http://127.0.0.1:3939/protected","status"=>200, "message"=>{"status"=>"OK"}}, record)
109
+ assert(time.is_a?(Fluent::EventTime))
110
+ end
111
+ end
112
+ end
113
+
114
+ private
115
+
116
+ def create_driver(conf)
117
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::HttpPullInput).configure(conf)
118
+ end
119
+ end
@@ -0,0 +1,79 @@
1
+ require "helper"
2
+ require "fluent/plugin/in_http_pull.rb"
3
+
4
+ require 'ostruct'
5
+
6
+ class HttpPullInputTestRequestMethod < Test::Unit::TestCase
7
+ @stub_server = nil
8
+
9
+ setup do
10
+ @stub_server = StubServer.new
11
+ @stub_server.start
12
+ end
13
+
14
+ teardown do
15
+ @stub_server.shutdown
16
+ end
17
+
18
+ sub_test_case "request method" do
19
+ TEST_INTERVAL_3_POST = %[
20
+ tag test
21
+ url http://127.0.0.1:3939/method_post
22
+
23
+ interval 3s
24
+ format json
25
+ http_method post
26
+ ]
27
+
28
+ TEST_INTERVAL_3_DELETE = %[
29
+ tag test
30
+ url http://127.0.0.1:3939/method_delete
31
+
32
+ interval 3s
33
+ format json
34
+ http_method delete
35
+ ]
36
+
37
+ test 'interval 3 with :post' do
38
+ d = create_driver TEST_INTERVAL_3_POST
39
+ assert_equal("test", d.instance.tag)
40
+ assert_equal(3, d.instance.interval)
41
+
42
+ d.run(timeout: 8) do
43
+ sleep 7
44
+ end
45
+ assert_equal(2, d.events.size)
46
+
47
+ d.events.each do |tag, time, record|
48
+ assert_equal("test", tag)
49
+
50
+ assert_equal({"url"=>"http://127.0.0.1:3939/method_post","status"=>200, "message"=>{"status"=>"OK"}}, record)
51
+ assert(time.is_a?(Fluent::EventTime))
52
+ end
53
+ end
54
+
55
+ test 'interval 3 with :delete' do
56
+ d = create_driver TEST_INTERVAL_3_DELETE
57
+ assert_equal("test", d.instance.tag)
58
+ assert_equal(3, d.instance.interval)
59
+
60
+ d.run(timeout: 8) do
61
+ sleep 7
62
+ end
63
+ assert_equal(2, d.events.size)
64
+
65
+ d.events.each do |tag, time, record|
66
+ assert_equal("test", tag)
67
+
68
+ assert_equal({"url"=>"http://127.0.0.1:3939/method_delete","status"=>200, "message"=>{"status"=>"OK"}}, record)
69
+ assert(time.is_a?(Fluent::EventTime))
70
+ end
71
+ end
72
+ end
73
+
74
+ private
75
+
76
+ def create_driver(conf)
77
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::HttpPullInput).configure(conf)
78
+ end
79
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-http-pull
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - filepang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-03 00:00:00.000000000 Z
11
+ date: 2018-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -147,6 +147,11 @@ files:
147
147
  - test/helper/stub_proxy.rb
148
148
  - test/helper/stub_server.rb
149
149
  - test/plugin/test_in_http_pull.rb
150
+ - test/plugin/test_in_http_pull_auth.rb
151
+ - test/plugin/test_in_http_pull_basic.rb
152
+ - test/plugin/test_in_http_pull_http_header.rb
153
+ - test/plugin/test_in_http_pull_proxy.rb
154
+ - test/plugin/test_in_http_pull_request_method.rb
150
155
  homepage: https://github.com/HatsuneMiku3939/fluent-plugin-http-pull
151
156
  licenses:
152
157
  - Apache-2.0
@@ -167,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
172
  version: '0'
168
173
  requirements: []
169
174
  rubyforge_project:
170
- rubygems_version: 2.5.2
175
+ rubygems_version: 2.6.13
171
176
  signing_key:
172
177
  specification_version: 4
173
178
  summary: fluent-plugin-http-pull
@@ -176,3 +181,8 @@ test_files:
176
181
  - test/helper/stub_proxy.rb
177
182
  - test/helper/stub_server.rb
178
183
  - test/plugin/test_in_http_pull.rb
184
+ - test/plugin/test_in_http_pull_auth.rb
185
+ - test/plugin/test_in_http_pull_basic.rb
186
+ - test/plugin/test_in_http_pull_http_header.rb
187
+ - test/plugin/test_in_http_pull_proxy.rb
188
+ - test/plugin/test_in_http_pull_request_method.rb