fluent-plugin-scalyr 0.8.10 → 0.8.15
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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/README.md +49 -17
- data/Rakefile +10 -6
- data/VERSION +1 -1
- data/fluent-plugin-scalyr.gemspec +11 -7
- data/lib/fluent/plugin/out_scalyr.rb +228 -219
- data/lib/fluent/plugin/{scalyr-exceptions.rb → scalyr_exceptions.rb} +2 -2
- data/lib/fluent/plugin/scalyr_utils.rb +65 -0
- data/test/helper.rb +12 -6
- data/test/test_config.rb +24 -30
- data/test/test_events.rb +297 -141
- data/test/test_handle_response.rb +34 -35
- data/test/test_ssl_verify.rb +101 -10
- data/test/test_utils.rb +100 -0
- metadata +50 -33
data/test/test_ssl_verify.rb
CHANGED
@@ -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
|
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 +
|
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
|
-
|
26
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
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
|
data/test/test_utils.rb
ADDED
@@ -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.
|
4
|
+
version: 0.8.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Imron Alston
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-03 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:
|
76
|
+
name: bundler
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
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: '
|
88
|
+
version: '1.9'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
90
|
+
name: flexmock
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
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: '
|
102
|
+
version: '1.2'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
104
|
+
name: rake
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
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: '
|
116
|
+
version: '0.9'
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
118
|
+
name: rubocop
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
121
|
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
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: '
|
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/
|
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,13 +184,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
184
|
- !ruby/object:Gem::Version
|
169
185
|
version: '0'
|
170
186
|
requirements: []
|
171
|
-
rubygems_version: 3.0.
|
187
|
+
rubygems_version: 3.0.3
|
172
188
|
signing_key:
|
173
189
|
specification_version: 4
|
174
190
|
summary: Scalyr plugin for fluentd
|
175
191
|
test_files:
|
176
|
-
- test/
|
177
|
-
- test/test_ssl_verify.rb
|
192
|
+
- test/helper.rb
|
178
193
|
- test/test_config.rb
|
179
194
|
- test/test_events.rb
|
180
|
-
- test/
|
195
|
+
- test/test_handle_response.rb
|
196
|
+
- test/test_ssl_verify.rb
|
197
|
+
- test/test_utils.rb
|