fluent-plugin-scalyr 0.8.7 → 0.8.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  # Scalyr Output Plugin for Fluentd
3
5
  #
@@ -15,76 +17,73 @@
15
17
  # See the License for the specific language governing permissions and
16
18
  # limitations under the License.
17
19
 
20
+ require "helper"
21
+ require "flexmock/test_unit"
18
22
 
19
- require 'helper'
20
- require 'flexmock/test_unit'
21
-
23
+ # rubocop:disable Layout/LineLength
22
24
  class HandleResponseTest < Scalyr::ScalyrOutTest
23
-
24
25
  def test_handle_response_missing_status
25
26
  d = create_driver
26
- response = flexmock( Net::HTTPResponse, :code => '200', :body =>'{ "message":"An invalid message" }' )
27
- exception = assert_raise( Scalyr::ServerError, "Server error not raised for missing status" ) {
28
- d.instance.handle_response( response )
27
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "message":"An invalid message" }')
28
+ exception = assert_raise(Scalyr::ServerError, "Server error not raised for missing status") {
29
+ d.instance.handle_response(response)
29
30
  }
30
31
 
31
- assert_equal( "JSON response does not contain status message", exception.message )
32
+ assert_equal("JSON response does not contain status message", exception.message)
32
33
  end
33
34
 
34
35
  def test_handle_response_discard_buffer
35
36
  d = create_driver
36
- response = flexmock( Net::HTTPResponse, :code => '200', :body =>'{ "message":"An invalid message", "status":"error/server/discardBuffer" }' )
37
- logger = flexmock( $log )
38
- logger.should_receive( :warn ).with( /buffer dropped/i )
39
- assert_nothing_raised( Scalyr::ServerError, Scalyr::ClientError, "Nothing should be raised when discarding the buffer" ) {
40
- d.instance.handle_response( response )
37
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "message":"An invalid message", "status":"error/server/discardBuffer" }')
38
+ logger = flexmock($log)
39
+ logger.should_receive(:warn).once.with(/buffer dropped/i)
40
+ assert_nothing_raised(Scalyr::ServerError, Scalyr::ClientError, "Nothing should be raised when discarding the buffer") {
41
+ d.instance.handle_response(response)
41
42
  }
42
-
43
43
  end
44
44
 
45
45
  def test_handle_response_unknown_error
46
46
  d = create_driver
47
- response = flexmock( Net::HTTPResponse, :code => '200', :body =>'{ "message":"An invalid message", "status":"error/other" }' )
48
- exception = assert_raise( Scalyr::ServerError, "Server error not raised for error status" ) {
49
- d.instance.handle_response( response )
47
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "message":"An invalid message", "status":"error/other" }')
48
+ exception = assert_raise(Scalyr::ServerError, "Server error not raised for error status") {
49
+ d.instance.handle_response(response)
50
50
  }
51
- assert_equal( "error/other", exception.message )
51
+ assert_equal("error/other", exception.message)
52
52
  end
53
53
 
54
54
  def test_handle_response_client_error
55
55
  d = create_driver
56
- response = flexmock( Net::HTTPResponse, :code => '200', :body =>'{ "message":"An invalid message", "status":"error/client/test" }' )
57
- exception = assert_raise( Scalyr::ClientError, "Client error not raised for error status" ) {
58
- d.instance.handle_response( response )
56
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "message":"An invalid message", "status":"error/client/test" }')
57
+ exception = assert_raise(Scalyr::ClientError, "Client error not raised for error status") {
58
+ d.instance.handle_response(response)
59
59
  }
60
- assert_equal( "error/client/test", exception.message )
60
+ assert_equal("error/client/test", exception.message)
61
61
  end
62
62
 
63
63
  def test_handle_response_server_error
64
64
  d = create_driver
65
- response = flexmock( Net::HTTPResponse, :code => '200', :body =>'{ "message":"An invalid message", "status":"error/server/test" }' )
66
- exception = assert_raise( Scalyr::ServerError, "Server error not raised for error status" ) {
67
- d.instance.handle_response( response )
65
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "message":"An invalid message", "status":"error/server/test" }')
66
+ exception = assert_raise(Scalyr::ServerError, "Server error not raised for error status") {
67
+ d.instance.handle_response(response)
68
68
  }
69
- assert_equal( "error/server/test", exception.message )
69
+ assert_equal("error/server/test", exception.message)
70
70
  end
71
71
 
72
72
  def test_handle_response_code_4xx
73
73
  d = create_driver
74
- response = flexmock( Net::HTTPResponse, :code => '404', :body =>'{ "status":"error/server/fileNotFound" }' )
75
- exception = assert_raise( Scalyr::Client4xxError, "No 4xx exception raised" ) {
76
- d.instance.handle_response( response )
74
+ response = flexmock(Net::HTTPResponse, code: "404", body: '{ "status":"error/server/fileNotFound" }')
75
+ exception = assert_raise(Scalyr::Client4xxError, "No 4xx exception raised") {
76
+ d.instance.handle_response(response)
77
77
  }
78
- assert_equal( "error/server/fileNotFound", exception.message )
78
+ assert_equal("error/server/fileNotFound", exception.message)
79
79
  end
80
80
 
81
81
  def test_handle_response_code_200
82
82
  d = create_driver
83
- response = flexmock( Net::HTTPResponse, :code => '200', :body =>'{ "status":"success" }' )
84
- exception = assert_nothing_raised( Scalyr::ServerError, Scalyr::ClientError, "Error raised on success" ) {
85
- d.instance.handle_response( response )
83
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "status":"success" }')
84
+ assert_nothing_raised(Scalyr::ServerError, Scalyr::ClientError, "Error raised on success") {
85
+ d.instance.handle_response(response)
86
86
  }
87
87
  end
88
-
89
88
  end
90
-
89
+ # rubocop:enable Layout/LineLength
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  # Scalyr Output Plugin for Fluentd
3
5
  #
@@ -15,21 +17,110 @@
15
17
  # See the License for the specific language governing permissions and
16
18
  # limitations under the License.
17
19
 
18
-
19
- require 'helper'
20
+ require "helper"
21
+ require "flexmock/test_unit"
20
22
 
21
23
  class SSLVerifyTest < Scalyr::ScalyrOutTest
24
+ def test_good_ssl_certificates
25
+ d = create_driver CONFIG
26
+
27
+ d.run(default_tag: "test") do
28
+ time = event_time("2015-04-01 10:00:00 UTC")
29
+ d.feed(time, {"a" => 1})
30
+
31
+ logger = flexmock($log)
32
+ logger.should_receive(:warn).times(0).with(/certificate verification failed/i)
33
+ logger.should_receive(:warn).times(0).with(/certificate verify failed/i)
34
+ logger.should_receive(:warn).once.with(/discarding buffer/i)
35
+ end
36
+ end
37
+
38
+ def test_no_ssl_certificates
39
+ d = create_driver %(
40
+ api_write_token test_token
41
+ )
42
+
43
+ d.run(default_tag: "test") do
44
+ time = event_time("2015-04-01 10:00:00 UTC")
45
+ d.feed(time, {"a" => 1})
46
+
47
+ logger = flexmock($log)
48
+ logger.should_receive(:warn).times(0).with(/certificate verification failed/i)
49
+ logger.should_receive(:warn).times(0).with(/certificate verify failed/i)
50
+ logger.should_receive(:warn).once.with(/discarding buffer/i)
51
+ end
52
+ end
53
+
22
54
  def test_bad_ssl_certificates
23
- d = create_driver CONFIG + 'ssl_ca_bundle_path /home/invalid'
55
+ d = create_driver CONFIG + "ssl_ca_bundle_path /home/invalid"
56
+
57
+ d.run(default_tag: "test") do
58
+ time = event_time("2015-04-01 10:00:00 UTC")
59
+ d.feed(time, {"a" => 1})
60
+
61
+ logger = flexmock($log)
62
+ logger.should_receive(:warn).once.with(/certificate verification failed/i)
63
+ logger.should_receive(:warn).once.with(/certificate verify failed/i)
64
+ logger.should_receive(:warn).once.with(/discarding buffer/i)
65
+ end
66
+ end
67
+
68
+ def test_bad_system_ssl_certificates
69
+ `sudo mv #{OpenSSL::X509::DEFAULT_CERT_FILE} /tmp/system_cert.pem`
70
+ `sudo mv #{OpenSSL::X509::DEFAULT_CERT_DIR} /tmp/system_certs`
71
+
72
+ begin
73
+ d = create_driver %(
74
+ api_write_token test_token
75
+ )
76
+
77
+ d.run(default_tag: "test") do
78
+ time = event_time("2015-04-01 10:00:00 UTC")
79
+ d.feed(time, {"a" => 1})
80
+
81
+ logger = flexmock($log)
82
+ logger.should_receive(:warn).once.with(/certificate verification failed/i)
83
+ logger.should_receive(:warn).once.with(/certificate verify failed/i)
84
+ logger.should_receive(:warn).once.with(/discarding buffer/i)
85
+ end
86
+ ensure
87
+ `sudo mv /tmp/system_certs #{OpenSSL::X509::DEFAULT_CERT_DIR}`
88
+ `sudo mv /tmp/system_cert.pem #{OpenSSL::X509::DEFAULT_CERT_FILE}`
89
+ end
90
+ end
91
+
92
+ def test_hostname_verification
93
+ agent_scalyr_com_ip = `dig +short agent.scalyr.com 2> /dev/null | tail -n 1 | tr -d "\n"`
94
+ if agent_scalyr_com_ip.empty?
95
+ agent_scalyr_com_ip = `getent hosts agent.scalyr.com \
96
+ | awk '{ print $1 }' | tail -n 1 | tr -d "\n"`
97
+ end
98
+ mock_host = "invalid.mitm.should.fail.test.agent.scalyr.com"
99
+ etc_hosts_entry = "#{agent_scalyr_com_ip} #{mock_host}"
100
+ hosts_bkp = `sudo cat /etc/hosts`
101
+ hosts_bkp = hosts_bkp.chomp
102
+ # Add mock /etc/hosts entry and config scalyr_server entry
103
+ `echo "#{etc_hosts_entry}" | sudo tee -a /etc/hosts`
24
104
 
25
- time = Time.parse("2015-04-01 10:00:00 UTC").to_i
26
- d.emit( { "a" => 1 }, time )
105
+ begin
106
+ d = create_driver %(
107
+ api_write_token test_token
108
+ scalyr_server https://invalid.mitm.should.fail.test.agent.scalyr.com:443
109
+ )
27
110
 
28
- logger = flexmock( $log )
29
- logger.should_receive( :warn ).with( /certificate verification failed/i )
30
- logger.should_receive( :warn ).with( /certificate verify failed/i )
31
- logger.should_receive( :warn ).with( /discarding buffer/i )
111
+ d.run(default_tag: "test") do
112
+ time = event_time("2015-04-01 10:00:00 UTC")
113
+ d.feed(time, {"a" => 1})
32
114
 
33
- d.run
115
+ logger = flexmock($log)
116
+ logger.should_receive(:warn).once.with(/certificate verification failed/i)
117
+ logger.should_receive(:warn).once.with(/certificate verify failed/i)
118
+ logger.should_receive(:warn).once.with(/discarding buffer/i)
119
+ end
120
+ ensure
121
+ # Clean up the hosts file
122
+ `sudo truncate -s 0 /etc/hosts`
123
+ `echo "#{hosts_bkp}" | sudo tee -a /etc/hosts`
124
+ end
34
125
  end
35
126
  end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Scalyr Output Plugin for Fluentd
5
+ #
6
+ # Copyright (C) 2015 Scalyr, Inc.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require "helper"
21
+ require "flexmock/test_unit"
22
+
23
+ require "fluent/plugin/scalyr_utils"
24
+ include Scalyr # rubocop:disable Style/MixinUsage
25
+
26
+ module Scalyr
27
+ class UtilsTest < Test::Unit::TestCase
28
+ def test_sanitize_and_reencode_value_simple_types
29
+ # Simple value - string
30
+ result = sanitize_and_reencode_value("test foo")
31
+ assert_equal("test foo", result)
32
+
33
+ # Simple value - string with bad unicode sequences
34
+ result = sanitize_and_reencode_value("test \xC2 foo \xC2 bar")
35
+ assert_equal("test <?> foo <?> bar", result)
36
+
37
+ # Simple value - int
38
+ result = sanitize_and_reencode_value(100)
39
+ assert_equal(100, result)
40
+
41
+ # Simple value - nill
42
+ result = sanitize_and_reencode_value(nil)
43
+ assert_equal(nil, result)
44
+
45
+ # Simple value - bool
46
+ result = sanitize_and_reencode_value(true)
47
+ assert_equal(true, result)
48
+
49
+ result = sanitize_and_reencode_value(false)
50
+ assert_equal(false, result)
51
+ end
52
+
53
+ def test_sanitize_and_reencode_value_complex_nested_types
54
+ actual = [1, 2, "a", "b", nil, "7", "\xC2"]
55
+ expected = [1, 2, "a", "b", nil, "7", "<?>"]
56
+
57
+ result = sanitize_and_reencode_value(actual)
58
+ assert_equal(expected, result)
59
+
60
+ actual = [1, 2, "a", "b", nil, "7",
61
+ [8, 9, [10, "\xC2"]],
62
+ {"a" => 1, "b" => "\xC2"}]
63
+ expected = [1, 2, "a", "b", nil, "7",
64
+ [8, 9, [10, "<?>"]],
65
+ {"a" => 1, "b" => "<?>"}]
66
+
67
+ result = sanitize_and_reencode_value(actual)
68
+ assert_equal(expected, result)
69
+
70
+ actual = {
71
+ "a" => "1",
72
+ "b" => {
73
+ "c" => "\xC2",
74
+ "d" => "e",
75
+ "f" => nil,
76
+ "g" => {
77
+ "h" => "bar \xC2",
78
+ "b" => 3,
79
+ "l" => [1, 2, "foo\xC2", 3, 4, 5]
80
+ }
81
+ }
82
+ }
83
+ expected = {
84
+ "a" => "1",
85
+ "b" => {
86
+ "c" => "<?>",
87
+ "d" => "e",
88
+ "f" => nil,
89
+ "g" => {
90
+ "h" => "bar <?>",
91
+ "b" => 3,
92
+ "l" => [1, 2, "foo<?>", 3, 4, 5]
93
+ }
94
+ }
95
+ }
96
+ result = sanitize_and_reencode_value(actual)
97
+ assert_equal(expected, result)
98
+ end
99
+ end
100
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-scalyr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.7
4
+ version: 0.8.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Imron Alston
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-13 00:00:00.000000000 Z
11
+ date: 2020-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.9.25
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.9.25
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: fluentd
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -30,20 +44,6 @@ dependencies:
30
44
  - - "<"
31
45
  - !ruby/object:Gem::Version
32
46
  version: '2'
33
- - !ruby/object:Gem::Dependency
34
- name: ffi
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - '='
38
- - !ruby/object:Gem::Version
39
- version: 1.9.25
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - '='
45
- - !ruby/object:Gem::Version
46
- version: 1.9.25
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rbzip2
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -73,61 +73,75 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
- name: rake
76
+ name: bundler
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0.9'
81
+ version: '1.9'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '0.9'
88
+ version: '1.9'
89
89
  - !ruby/object:Gem::Dependency
90
- name: test-unit
90
+ name: flexmock
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '3.0'
95
+ version: '1.2'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '3.0'
102
+ version: '1.2'
103
103
  - !ruby/object:Gem::Dependency
104
- name: flexmock
104
+ name: rake
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '1.2'
109
+ version: '0.9'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '1.2'
116
+ version: '0.9'
117
117
  - !ruby/object:Gem::Dependency
118
- name: bundler
118
+ name: rubocop
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '1.9'
123
+ version: '0.4'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '1.9'
130
+ version: '0.4'
131
+ - !ruby/object:Gem::Dependency
132
+ name: test-unit
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.0'
131
145
  description: Sends log data collected by fluentd to Scalyr (http://www.scalyr.com)
132
146
  email: imron@scalyr.com
133
147
  executables: []
@@ -143,12 +157,14 @@ files:
143
157
  - fluent-plugin-scalyr.gemspec
144
158
  - fluent.conf.sample
145
159
  - lib/fluent/plugin/out_scalyr.rb
146
- - lib/fluent/plugin/scalyr-exceptions.rb
160
+ - lib/fluent/plugin/scalyr_exceptions.rb
161
+ - lib/fluent/plugin/scalyr_utils.rb
147
162
  - test/helper.rb
148
163
  - test/test_config.rb
149
164
  - test/test_events.rb
150
165
  - test/test_handle_response.rb
151
166
  - test/test_ssl_verify.rb
167
+ - test/test_utils.rb
152
168
  homepage: https://github.com/scalyr/scalyr-fluentd
153
169
  licenses:
154
170
  - Apache-2.0
@@ -168,14 +184,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
184
  - !ruby/object:Gem::Version
169
185
  version: '0'
170
186
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.7.6
187
+ rubygems_version: 3.0.3
173
188
  signing_key:
174
189
  specification_version: 4
175
190
  summary: Scalyr plugin for fluentd
176
191
  test_files:
177
- - test/test_events.rb
178
- - test/test_config.rb
179
192
  - test/helper.rb
193
+ - test/test_events.rb
180
194
  - test/test_handle_response.rb
195
+ - test/test_config.rb
196
+ - test/test_utils.rb
181
197
  - test/test_ssl_verify.rb