excon 0.61.0 → 0.63.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of excon might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.github/stale.yml +17 -0
- data/.travis.yml +7 -19
- data/LICENSE.md +1 -1
- data/README.md +5 -4
- data/changelog.txt +30 -0
- data/data/cacert.pem +440 -994
- data/excon.gemspec +9 -0
- data/lib/excon/connection.rb +53 -36
- data/lib/excon/constants.rb +33 -13
- data/lib/excon/error.rb +3 -0
- data/lib/excon/instrumentors/logging_instrumentor.rb +3 -14
- data/lib/excon/instrumentors/standard_instrumentor.rb +1 -8
- data/lib/excon/middlewares/base.rb +6 -0
- data/lib/excon/middlewares/expects.rb +6 -0
- data/lib/excon/middlewares/idempotent.rb +20 -3
- data/lib/excon/middlewares/instrumentor.rb +8 -0
- data/lib/excon/middlewares/mock.rb +8 -0
- data/lib/excon/middlewares/response_parser.rb +3 -0
- data/lib/excon/pretty_printer.rb +1 -8
- data/lib/excon/socket.rb +36 -10
- data/lib/excon/ssl_socket.rb +7 -0
- data/lib/excon/utils.rb +23 -4
- data/lib/excon/version.rb +1 -1
- data/lib/excon.rb +9 -1
- data/spec/excon/test/server_spec.rb +2 -2
- data/spec/helpers/warning_helpers.rb +9 -0
- data/spec/requests/unix_socket_spec.rb +2 -10
- data/spec/requests/validation_spec.rb +80 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/shared_contexts/test_stub_context.rb +11 -0
- data/spec/support/shared_examples/shared_example_for_clients.rb +13 -2
- data/tests/authorization_header_tests.rb +19 -21
- data/tests/bad_tests.rb +22 -0
- data/tests/batch_requests.rb +1 -1
- data/tests/complete_responses.rb +1 -1
- data/tests/data/127.0.0.1.cert.crt +15 -18
- data/tests/data/127.0.0.1.cert.key +28 -27
- data/tests/data/excon.cert.crt +15 -18
- data/tests/data/excon.cert.key +28 -27
- data/tests/error_tests.rb +1 -1
- data/tests/instrumentors/logging_instrumentor_tests.rb +28 -0
- data/tests/middlewares/decompress_tests.rb +1 -1
- data/tests/middlewares/idempotent_tests.rb +56 -17
- data/tests/middlewares/mock_tests.rb +2 -2
- data/tests/pipeline_tests.rb +1 -1
- data/tests/request_tests.rb +5 -6
- data/tests/response_tests.rb +1 -1
- data/tests/servers/bad.rb +5 -0
- data/tests/servers/good.rb +0 -8
- data/tests/servers/good_ipv4.rb +8 -0
- data/tests/servers/good_ipv6.rb +8 -0
- data/tests/test_helper.rb +27 -36
- metadata +17 -5
data/lib/excon/utils.rb
CHANGED
@@ -10,6 +10,12 @@ module Excon
|
|
10
10
|
UNESCAPED = /([#{ Regexp.escape(CONTROL + ' ' + DELIMS + UNWISE + NONASCII) }])/
|
11
11
|
ESCAPED = /%([0-9a-fA-F]{2})/
|
12
12
|
|
13
|
+
def binary_encode(string)
|
14
|
+
if FORCE_ENC && string.encoding != Encoding::ASCII_8BIT
|
15
|
+
string.force_encoding('BINARY')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
13
19
|
def connection_uri(datum = @data)
|
14
20
|
unless datum
|
15
21
|
raise ArgumentError, '`datum` must be given unless called on a Connection'
|
@@ -21,6 +27,19 @@ module Excon
|
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
30
|
+
# Redact sensitive info from provided data
|
31
|
+
def redact(datum)
|
32
|
+
datum = datum.dup
|
33
|
+
if datum.has_key?(:headers) && datum[:headers].has_key?('Authorization')
|
34
|
+
datum[:headers] = datum[:headers].dup
|
35
|
+
datum[:headers]['Authorization'] = REDACTED
|
36
|
+
end
|
37
|
+
if datum.has_key?(:password)
|
38
|
+
datum[:password] = REDACTED
|
39
|
+
end
|
40
|
+
datum
|
41
|
+
end
|
42
|
+
|
24
43
|
def request_uri(datum)
|
25
44
|
connection_uri(datum) + datum[:path] + query_string(datum)
|
26
45
|
end
|
@@ -59,7 +78,7 @@ module Excon
|
|
59
78
|
def split_header_value(str)
|
60
79
|
return [] if str.nil?
|
61
80
|
str = str.dup.strip
|
62
|
-
str
|
81
|
+
binary_encode(str)
|
63
82
|
str.scan(%r'\G((?:"(?:\\.|[^"])+?"|[^",]+)+)
|
64
83
|
(?:,\s*|\Z)'xn).flatten
|
65
84
|
end
|
@@ -67,21 +86,21 @@ module Excon
|
|
67
86
|
# Escapes HTTP reserved and unwise characters in +str+
|
68
87
|
def escape_uri(str)
|
69
88
|
str = str.dup
|
70
|
-
str
|
89
|
+
binary_encode(str)
|
71
90
|
str.gsub(UNESCAPED) { "%%%02X" % $1[0].ord }
|
72
91
|
end
|
73
92
|
|
74
93
|
# Unescapes HTTP reserved and unwise characters in +str+
|
75
94
|
def unescape_uri(str)
|
76
95
|
str = str.dup
|
77
|
-
str
|
96
|
+
binary_encode(str)
|
78
97
|
str.gsub(ESCAPED) { $1.hex.chr }
|
79
98
|
end
|
80
99
|
|
81
100
|
# Unescape form encoded values in +str+
|
82
101
|
def unescape_form(str)
|
83
102
|
str = str.dup
|
84
|
-
str
|
103
|
+
binary_encode(str)
|
85
104
|
str.gsub!(/\+/, ' ')
|
86
105
|
str.gsub(ESCAPED) { $1.hex.chr }
|
87
106
|
end
|
data/lib/excon/version.rb
CHANGED
data/lib/excon.rb
CHANGED
@@ -23,11 +23,11 @@ require 'excon/middlewares/instrumentor'
|
|
23
23
|
require 'excon/middlewares/mock'
|
24
24
|
require 'excon/middlewares/response_parser'
|
25
25
|
|
26
|
+
require 'excon/error'
|
26
27
|
require 'excon/constants'
|
27
28
|
require 'excon/utils'
|
28
29
|
|
29
30
|
require 'excon/connection'
|
30
|
-
require 'excon/error'
|
31
31
|
require 'excon/headers'
|
32
32
|
require 'excon/response'
|
33
33
|
require 'excon/middlewares/decompress'
|
@@ -61,6 +61,14 @@ module Excon
|
|
61
61
|
if $VERBOSE || ENV['EXCON_DEBUG']
|
62
62
|
$stderr.puts "[excon][WARNING] #{warning}\n#{ caller.join("\n") }"
|
63
63
|
end
|
64
|
+
|
65
|
+
if @raise_on_warnings
|
66
|
+
raise Error::Warning.new(warning)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def set_raise_on_warnings!(should_raise)
|
71
|
+
@raise_on_warnings = should_raise
|
64
72
|
end
|
65
73
|
|
66
74
|
# Status of mocking
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Excon::Test::Server do
|
4
|
-
|
4
|
+
|
5
5
|
context 'when the web server is webrick' do
|
6
6
|
it_should_behave_like "a excon test server", :webrick, 'basic.ru'
|
7
7
|
end
|
@@ -23,6 +23,6 @@ describe Excon::Test::Server do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
context 'when the web server is a executable' do
|
26
|
-
it_should_behave_like "a excon test server", :exec, '
|
26
|
+
it_should_behave_like "a excon test server", :exec, 'good_ipv4.rb'
|
27
27
|
end
|
28
28
|
end
|
@@ -1,25 +1,17 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Excon::Connection do
|
4
|
+
include_context('stubs')
|
4
5
|
context "when speaking to a UNIX socket" do
|
5
6
|
context "Host header handling" do
|
6
7
|
before do
|
7
|
-
|
8
|
+
Excon.stub do |req|
|
8
9
|
{
|
9
10
|
body: req[:headers].to_json,
|
10
11
|
status: 200,
|
11
12
|
}
|
12
13
|
end
|
13
|
-
|
14
|
-
@original_mock = Excon.defaults[:mock]
|
15
|
-
Excon.defaults[:mock] = true
|
16
|
-
Excon.stub({}, responder)
|
17
|
-
end
|
18
|
-
|
19
|
-
after do
|
20
|
-
Excon.defaults[:mock] = @original_mock
|
21
14
|
end
|
22
|
-
|
23
15
|
it "sends an empty Host= by default" do
|
24
16
|
conn = Excon::Connection.new(
|
25
17
|
scheme: "unix",
|
@@ -0,0 +1,80 @@
|
|
1
|
+
describe Excon::Connection do
|
2
|
+
include_context('stubs')
|
3
|
+
describe 'validating parameters' do
|
4
|
+
class FooMiddleware < Excon::Middleware::Base
|
5
|
+
def self.valid_parameter_keys
|
6
|
+
[:foo]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:foo_stack) do
|
11
|
+
Excon.defaults[:middlewares] + [FooMiddleware]
|
12
|
+
end
|
13
|
+
|
14
|
+
def expect_parameter_warning(validation, key)
|
15
|
+
expect { yield }.to raise_error(Excon::Error::Warning, "Invalid Excon #{validation} keys: #{key.inspect}")
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with default middleware' do
|
19
|
+
it 'Connection.new warns on invalid parameter keys' do
|
20
|
+
expect_parameter_warning('connection', :foo) do
|
21
|
+
Excon.new('http://foo', :foo => :bar)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'Connection#request warns on invalid parameter keys' do
|
26
|
+
conn = Excon.new('http://foo')
|
27
|
+
expect_parameter_warning('request', :foo) do
|
28
|
+
conn.request(:foo => :bar)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'with custom middleware at instantiation' do
|
34
|
+
it 'Connection.new accepts parameters that are valid for the provided middleware' do
|
35
|
+
Excon.new('http://foo', :foo => :bar, :middlewares => foo_stack)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'Connection.new warns on parameters that are not valid for the provided middleware' do
|
39
|
+
expect_parameter_warning('connection', :bar) do
|
40
|
+
Excon.new('http://foo', :bar => :baz, :middlewares => foo_stack)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'Connection#request accepts parameters that are valid for the provided middleware' do
|
45
|
+
Excon.stub({}, {})
|
46
|
+
conn = Excon.new('http://foo', :middlewares => foo_stack)
|
47
|
+
conn.request(:foo => :bar)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'Connection#request warns on parameters that are not valid for the provided middleware' do
|
51
|
+
conn = Excon.new('http://foo', :middlewares => foo_stack)
|
52
|
+
expect_parameter_warning('request', :bar) do
|
53
|
+
conn.request(:bar => :baz)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'with custom middleware at request time' do
|
59
|
+
it 'Connection#request accepts parameters that are valid for the provided middleware' do
|
60
|
+
Excon.stub({}, {})
|
61
|
+
conn = Excon.new('http://foo')
|
62
|
+
conn.request(:foo => :bar, :middlewares => foo_stack)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'Connection#request warns on parameters that are not valid for the request middleware' do
|
66
|
+
conn = Excon.new('http://foo')
|
67
|
+
expect_parameter_warning('request', :bar) do
|
68
|
+
conn.request(:bar => :baz, :middlewares => foo_stack)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'Connection#request warns on parameters from instantiation that are not valid for the request middleware' do
|
73
|
+
conn = Excon.new('http://foo', :foo => :bar, :middlewares => foo_stack)
|
74
|
+
expect_parameter_warning('connection', :foo) do
|
75
|
+
conn.request(:middlewares => Excon.defaults[:middlewares])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -91,8 +91,10 @@ shared_examples_for 'a basic client' do |url = 'http://127.0.0.1:9292', opts = {
|
|
91
91
|
data = []
|
92
92
|
it 'yields with a chunk, remaining length, and total length' do
|
93
93
|
expect do
|
94
|
-
|
95
|
-
|
94
|
+
silence_warnings do
|
95
|
+
conn.request(method: :get, path: '/content-length/100') do |chunk, remaining_length, total_length|
|
96
|
+
data = [chunk, remaining_length, total_length]
|
97
|
+
end
|
96
98
|
end
|
97
99
|
end.to_not raise_error
|
98
100
|
end
|
@@ -163,6 +165,15 @@ shared_examples_for 'a basic client' do |url = 'http://127.0.0.1:9292', opts = {
|
|
163
165
|
end
|
164
166
|
|
165
167
|
context 'when a string is the body paramter' do
|
168
|
+
it 'does not change the enconding of the body' do
|
169
|
+
skip unless RUBY_VERSION >= '2.0'
|
170
|
+
|
171
|
+
string_body = '¥£€'
|
172
|
+
expect do
|
173
|
+
conn.request(method: :post, path: '/echo', body: string_body)
|
174
|
+
end.to_not change { string_body.encoding }
|
175
|
+
end
|
176
|
+
|
166
177
|
context 'without request_block' do
|
167
178
|
describe Excon::Response do
|
168
179
|
it "#body equals 'x' * 100)" do
|
@@ -1,29 +1,27 @@
|
|
1
1
|
Shindo.tests('Excon basics (Authorization data redacted)') do
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
conn = nil
|
2
|
+
cases = [
|
3
|
+
['user & pass', 'http://user1:pass1@foo.com/', 'Basic dXNlcjE6cGFzczE='],
|
4
|
+
['email & pass', 'http://foo%40bar.com:pass1@foo.com/', 'Basic Zm9vQGJhci5jb206cGFzczE='],
|
5
|
+
['user no pass', 'http://three_user@foo.com/', 'Basic dGhyZWVfdXNlcjo='],
|
6
|
+
['pass no user', 'http://:derppass@foo.com/', 'Basic OmRlcnBwYXNz']
|
7
|
+
]
|
8
|
+
cases.each do |desc,url,auth_header|
|
9
|
+
conn = nil
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
if conn.data[:password]
|
18
|
-
test("password param concealed for #{desc}") do
|
19
|
-
!conn.inspect.include?(conn.data[:password])
|
20
|
-
end
|
21
|
-
end
|
11
|
+
test("authorization header concealed for #{desc}") do
|
12
|
+
conn = Excon.new(url)
|
13
|
+
!conn.inspect.include?(auth_header)
|
14
|
+
end
|
22
15
|
|
23
|
-
|
24
|
-
|
16
|
+
if conn.data[:password]
|
17
|
+
test("password param concealed for #{desc}") do
|
18
|
+
!conn.inspect.include?(conn.data[:password])
|
25
19
|
end
|
20
|
+
end
|
26
21
|
|
22
|
+
test("password param remains correct for #{desc}") do
|
23
|
+
conn.data[:password] == URI.parse(url).password
|
27
24
|
end
|
25
|
+
|
28
26
|
end
|
29
27
|
end
|
data/tests/bad_tests.rb
CHANGED
@@ -2,6 +2,28 @@ Shindo.tests('Excon bad server interaction') do
|
|
2
2
|
|
3
3
|
with_server('bad') do
|
4
4
|
|
5
|
+
tests('header splitting') do
|
6
|
+
|
7
|
+
tests('prevents key splitting').raises(Excon::Errors::InvalidHeaderKey) do
|
8
|
+
connection = Excon.new('http://127.0.0.1:9292')
|
9
|
+
connection.request(
|
10
|
+
headers: { "Foo\r\nBar" => "baz" },
|
11
|
+
method: :get,
|
12
|
+
path: '/echo'
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
tests('prevents value splitting').raises(Excon::Errors::InvalidHeaderValue) do
|
17
|
+
connection = Excon.new('http://127.0.0.1:9292')
|
18
|
+
connection.request(
|
19
|
+
headers: { Foo: "bar\r\nBaz: qux" },
|
20
|
+
method: :get,
|
21
|
+
path: '/echo'
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
5
27
|
tests('bad server: causes EOFError') do
|
6
28
|
|
7
29
|
tests('with no content length and no chunking') do
|
data/tests/batch_requests.rb
CHANGED
data/tests/complete_responses.rb
CHANGED
@@ -1,20 +1,17 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
eaZl32yLu/7SmNEpyYNUWurkyB7tk77+7AiBQ9R4HCPWcrfdKic+XN5YNE5cZ+mm
|
18
|
-
YrHGxdS+5U848N6Qtj3B7fTuDn1K/WfpWKtR/RpP6k71eEZi7rufEuutcjPcUpwr
|
19
|
-
NzbvNobphr9vjCv9tbZgoAmKyBKOkLfj1gfv3HEPbFKOEYGZyBI=
|
2
|
+
MIICxDCCAawCCQC/zVG+jqJ/tzANBgkqhkiG9w0BAQsFADAkMRIwEAYDVQQDDAkx
|
3
|
+
MjcuMC4wLjExDjAMBgNVBAoMBWV4Y29uMB4XDTE5MDQxMjE0MzE1N1oXDTIwMDQx
|
4
|
+
MTE0MzE1N1owJDESMBAGA1UEAwwJMTI3LjAuMC4xMQ4wDAYDVQQKDAVleGNvbjCC
|
5
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJzEs8Gufig6OdBAaKeit5Gn
|
6
|
+
OXFTirbcLjhSfyowdTFCY+BRYhircz8ITTf6hPqyKIXV6LCS2/SHHUihwS6fB7u/
|
7
|
+
ZhmcBkWC7mkFkWgq41LcPLscAn0aOq2/AgIHYUEFg6svSb+H4oWZIgpgaNGL/0BR
|
8
|
+
5PJKZkDtNOIL/fnkCMv2TTz1dnK7nu4z8XZ/iPXE0Fok20r7Ka1j8bEgsUffAWlA
|
9
|
+
QAR+0SfHGkr/uFFA3rzRiajSWI+OcCYlcowTWehNNRlLtkMcWe3dcnQ+OZraJoe7
|
10
|
+
PgyGQ6e+dLkLARn9jihmKzLnQrWf2VBAifknmMDoK5iv81z6zJOnUpruCXRBXd0C
|
11
|
+
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAiwIgluZ8Rts3ga07CugZACTGVap6LUVW
|
12
|
+
0RoJ2zFzkc0msI/i5I/5X/cz1DqV7f1MjhXTQlY3aO6zzJWfuZRLF3tu81oVO5VG
|
13
|
+
/lnNqklPBGzPmeq/dR4o9bm9aJvQy74uD3lqbb8uEvrpsjqDUUawm/jt6YLevC6M
|
14
|
+
lNa3dWupQb30eGUeJkfuHT4cpOwLKdWM2xfLtwNY0QiR2i1UkvCOO16vBl+Wf4Uc
|
15
|
+
7aMG/6V6Bah34xCJqMAITpjmLAV3AYtV2hDKlA98hDZcowPzNznxcWwsy0/ggNWd
|
16
|
+
/4o0fz9oJjjRkC5mrnLa6Th9iRQ8TUQ5bxfkLzH9r3n4tHQjpCDTZg==
|
20
17
|
-----END CERTIFICATE-----
|
@@ -1,27 +1,28 @@
|
|
1
|
-
-----BEGIN
|
2
|
-
|
3
|
-
/
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
2
|
+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCcxLPBrn4oOjnQ
|
3
|
+
QGinoreRpzlxU4q23C44Un8qMHUxQmPgUWIYq3M/CE03+oT6siiF1eiwktv0hx1I
|
4
|
+
ocEunwe7v2YZnAZFgu5pBZFoKuNS3Dy7HAJ9GjqtvwICB2FBBYOrL0m/h+KFmSIK
|
5
|
+
YGjRi/9AUeTySmZA7TTiC/355AjL9k089XZyu57uM/F2f4j1xNBaJNtK+ymtY/Gx
|
6
|
+
ILFH3wFpQEAEftEnxxpK/7hRQN680Ymo0liPjnAmJXKME1noTTUZS7ZDHFnt3XJ0
|
7
|
+
Pjma2iaHuz4MhkOnvnS5CwEZ/Y4oZisy50K1n9lQQIn5J5jA6CuYr/Nc+syTp1Ka
|
8
|
+
7gl0QV3dAgMBAAECggEAfTtBIaqDyxzgTDT3pVp97BO69oW3HOZ84a89OHWnWKdh
|
9
|
+
Y7N/epeTo7m8/cfZbO7fIjLEBDH9FbTNttTInraZleiK5lBWTjcOvsSc6KrCF9Ip
|
10
|
+
jYsNjeRjFaKtNvOwRCHkkd5fumoRkYnHwKRNd3+vczE4hDjcwGb9RMoxo+r+//bM
|
11
|
+
eESn+D6edk7ZgcE28fRbMpvDrFJ/dXd21JJKXsu2yIHntUPbmsQ7Ya0KPcwoOwfm
|
12
|
+
uQNwDsNqsaFLGgpfO4vTEpuWsAeex/u+0YsDHoRH6TqIDkpXFYfVaqSRPnkS6jsL
|
13
|
+
OK+/PGhfABZJU743u4GFeMIzEJxxpIA9vjypcHUDYQKBgQDOywWK8PBeRUMU+Hyc
|
14
|
+
gJ+vbb3MLnyr0nekYRgGnq8ph+739aGcP1oADJwfs25tSg4t1srLluwuxCtvP3im
|
15
|
+
SF9U6znJMiyrFbvKkCpBTkHdzJyiUrSbCUv2P/IktNYaehn9WA6mXYaz7uaxZ/ED
|
16
|
+
/WtHJYqZHA/thdi1f7df9YqvmQKBgQDCEmIlfKCavd94CVNVmBiwIPMOEwCDwKZs
|
17
|
+
lA+xlaRA/fHEL9f0oJq5ca1NP+Fs9V3ISIe1kOhFea7NjEruglNY9nvGn69hyBrQ
|
18
|
+
22E2T2KREIEoWFZVgZjrQsQFot4lUGl7YqDn0tdRAWy7ykaFEYY1LOyF8NLXV8Wi
|
19
|
+
elqedTra5QKBgHOWV4rKEhEfddeK7VwtKRTNqoEumtEP24AuJVfN6uqz6IcA7UyA
|
20
|
+
vLW6VqoBiX/dHP/SR5h0y594Vy7fs3h+i4rT0ID9Yqpeg5E98+B89aQccpDo2bqu
|
21
|
+
/56tL5QE4If8J/rL9aRYMqrwplITX0xzojsqaMYcQWrqna8VrFIe1V5BAoGALuBt
|
22
|
+
4Iwn5vix/7aQ8H3aiMCMtPuWBj0EdfmViNmSYTh1q2O7EBWzCdQRfjVN6BmkW3pZ
|
23
|
+
fVvRHubzeCbI+q90Hmr7HtD3dfD1uTkkVA/8yPlpmSstP14cZ8cqvgnHCtBPikQa
|
24
|
+
haSB6ckkUH/dZMsE1ddSElBHPUiwLjzLorbCTpkCgYAZcGUbVGUBHYtNEf1vhY75
|
25
|
+
7qeuDbxlwxEX8D6HEJ0L6GpFgp6e/2IhzfgGJCW7gcbQHDwBixPva/ybvAsR64jG
|
26
|
+
c5n/TNguSv+JjpLZVl7MKmh4JssnEefBXT/LiSsz7LHeRm+SxxQptmsTYR5ODA8w
|
27
|
+
E1w/yHz1wrIocfCyb1J5+w==
|
28
|
+
-----END PRIVATE KEY-----
|
data/tests/data/excon.cert.crt
CHANGED
@@ -1,20 +1,17 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
0r6Lvook0ur+WXalGLu8110bCa4k+00SlZg0qZISlfrZyF5ofybylMjyy/qArgUy
|
18
|
-
8eltHfWbPhJEqf1yDPz2xCYGGCSplJMpvAhvSf4GSM55B27AoPlYlaS5wEaJf8Ft
|
19
|
-
g72ESuzICOQ617jOTeasIkkkoINIdnW1oA==
|
2
|
+
MIICvDCCAaQCCQCS1Yn8FMcKlzANBgkqhkiG9w0BAQsFADAgMQ4wDAYDVQQDDAVl
|
3
|
+
eGNvbjEOMAwGA1UECgwFZXhjb24wHhcNMTkwNDEyMTQzMTU2WhcNMjAwNDExMTQz
|
4
|
+
MTU2WjAgMQ4wDAYDVQQDDAVleGNvbjEOMAwGA1UECgwFZXhjb24wggEiMA0GCSqG
|
5
|
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycrlh3FfPSv8kDJrvnRJwdFPUp+23juTD
|
6
|
+
Pb8A7YBM1rw/z5WKJGhmdYAnhyhSO5KWuKH4dUTykNn0uFz0J5bXKclU6kjatM58
|
7
|
+
IF96tc7kugDXCy+IBnmf2pM2fDrmji0c50abcHu70HQvxC+BQS9Id0iZ2G12q539
|
8
|
+
lgxvSAquyh9NBhHhxW7aNUvPuueUVlfIKshd50aHtxWlMxr9hvOZzldj9C38du0Y
|
9
|
+
uY+klTReMY2UCK2cm9S31QSP4gSeepGeaw6buV5pGNhiK9UR6dVVF4qFu21ZE0aN
|
10
|
+
pNlCaBK8zCT5toxkgca096cKFOY6nfrhzhDdd2ULlRc/zpAkYuVRAgMBAAEwDQYJ
|
11
|
+
KoZIhvcNAQELBQADggEBAIaZW9JnfhFhnq6bu0qo0HFrfEnpOhiMHIp2nyAoXdQI
|
12
|
+
k/3Dxfd17LmfonQDkwo0D+tp3yu7xL2+qVIPElyWmKnhF13U4lhiGhAbMopV1dSH
|
13
|
+
oUU5uk3DHfeWcTurC9PMX5MnozIaogmffkTEhXBOdaNI6vfk2Gs0tqYMGyIV2VNp
|
14
|
+
KMegKCP2gX+PbqzXq6DzVCxbeDGdjKxpFQqas1W+soL/I9Hg7w/S8W9SpNP0tsfd
|
15
|
+
JB7Xl2urXNK8HnsRt9uhwP6ZSIdtVqr62CqM2z0SvuTTdPTDn2TMGd0nHacpmqN0
|
16
|
+
vUHeoZheUD+w8SikrQnr4/Ft3JrH0SKY0FlgVIGcaPg=
|
20
17
|
-----END CERTIFICATE-----
|
data/tests/data/excon.cert.key
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
-
-----BEGIN
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
2
|
+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCycrlh3FfPSv8k
|
3
|
+
DJrvnRJwdFPUp+23juTDPb8A7YBM1rw/z5WKJGhmdYAnhyhSO5KWuKH4dUTykNn0
|
4
|
+
uFz0J5bXKclU6kjatM58IF96tc7kugDXCy+IBnmf2pM2fDrmji0c50abcHu70HQv
|
5
|
+
xC+BQS9Id0iZ2G12q539lgxvSAquyh9NBhHhxW7aNUvPuueUVlfIKshd50aHtxWl
|
6
|
+
Mxr9hvOZzldj9C38du0YuY+klTReMY2UCK2cm9S31QSP4gSeepGeaw6buV5pGNhi
|
7
|
+
K9UR6dVVF4qFu21ZE0aNpNlCaBK8zCT5toxkgca096cKFOY6nfrhzhDdd2ULlRc/
|
8
|
+
zpAkYuVRAgMBAAECggEAcuhPGYYCgThAzRzU1ADn88Pki2ZLO8zm4BYtnVJSMKiB
|
9
|
+
9fEc0SSamYeGK23r9+/md+mSWuRgrnW588yYBpxLlGeS/nwSx8pvwBw0f1b9T+m6
|
10
|
+
Sr8oL0ZEITxlWUtrvjTFNfxzSfqHoqwbdPq2wFuSL+6nsHFeI3FlPfrWLP5N6rin
|
11
|
+
TlUglesEiaPDu7mN+E7jM94MyXkMkiPPpxd8m04YULZNTj5OAk9HEWnRr0L1GaCr
|
12
|
+
oc9n1k47sMzepiD6oKQRud4xijnVcI49L2hgSWSOm3dYREK7auCwCIcMx9m9Aa3N
|
13
|
+
1NpnHAfIJP++HHSi4JRB3HegLHOOMG2B5mTOzfQPlQKBgQDbULpJtyDU6og5HkVC
|
14
|
+
ViBkjIYGjfHeVeJxAEBCPyVszfUuGMImisYWiTAkC5bWiAsyyRoEpn1ro3e9pT/O
|
15
|
+
N5LORuaMpwOP/WMbG/ShNmOg2v3nW2EWuiWOjf+Rpr+lxgKGI9Gpe7TcIGgR+Vsl
|
16
|
+
/dCKEOjnFJzAVFt1A9zPdqpUkwKBgQDQTAcSCmKidhnz/scWDp272AwMaVA2OFfq
|
17
|
+
yEup8CZiIh/LzdoMog+bsjMlZ7IbJznfx3yGxiWUq83HNfQ0cFcR1TjXY8rT6IYp
|
18
|
+
5d5lKLMQiNdgt/ZhoJWCtKeYWx3LpJE+fPAUKIVC4BLd0O9U6z9iudKKyfEKwvWC
|
19
|
+
G64SHm6RCwKBgDDifaOQvjC3VkXlCWsP54iCCh3L5e25FxA5Dhm2GZF3Fv9/ZUdS
|
20
|
+
B3VefuyJ6MVI7bYUPUhsE+i6NyZ+fwpoOMDh7OHNGG4v/Lc+M/j7NpnUNmQraii2
|
21
|
+
tUhhPmYo1O8Og+GCemlcuaOXVZssCbUeLi2YN1HKtmXoZ7pdcgqMWMshAoGAFZCZ
|
22
|
+
dsuudIVnoHQzJlxzBhyS+sH4dPSWXY9JDhn3z1cbFZ2FQqOQnBzx4KCAtwDzo/Bi
|
23
|
+
Ow3OnDrBPiue0cMDsKvzi5EgUZoUMchDoxN4nnCcY74H+wmGERck9sgQKKIsC10h
|
24
|
+
+eRMD6VlLqPP82m7kTwNySKpGuUeR88X0XZnGgsCgYB26Hpm7rUJY/sUCyEQxqW+
|
25
|
+
Opt8vOBV0ipapFD7O7VKImz7wALKBs6oiQGr+AoN/YavIYbubnmzP8jSUoqeWzFR
|
26
|
+
c4s3/sozur+1sbFqk/lJeSdvogY2CT4qgQx9OrZBynSWYldHig9HEeU5a56oh9vv
|
27
|
+
Vns6XV2XQMGmvjg9yetRig==
|
28
|
+
-----END PRIVATE KEY-----
|
data/tests/error_tests.rb
CHANGED
@@ -35,7 +35,7 @@ Shindo.tests('HTTPStatusError request/response debugging') do
|
|
35
35
|
Excon.new('http://localhost', path: "foo\r\nbar: baz")
|
36
36
|
false
|
37
37
|
rescue => err
|
38
|
-
err.to_s.include? "foo\r\nbar: baz"
|
38
|
+
err.to_s.include?(RUBY_VERSION >= '2.6.0' ? 'foo\r\nbar: baz' : "foo\r\nbar: baz")
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
Shindo.tests('logging instrumentor') do
|
4
|
+
env_init
|
5
|
+
|
6
|
+
tests("connection logger").returns(true) do
|
7
|
+
Excon.stub({:method => :get}, {body: 'body', status: 200})
|
8
|
+
|
9
|
+
log_path = "/tmp/excon_#{Time.now.to_i}.txt"
|
10
|
+
logger = Logger.new(log_path)
|
11
|
+
# omit datetime to simplify test matcher
|
12
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
13
|
+
"#{msg}\n"
|
14
|
+
end
|
15
|
+
|
16
|
+
connection = Excon.new(
|
17
|
+
'http://127.0.0.1:9292',
|
18
|
+
instrumentor: Excon::LoggingInstrumentor,
|
19
|
+
logger: logger,
|
20
|
+
mock: true
|
21
|
+
)
|
22
|
+
response = connection.request(method: :get, path: '/logger')
|
23
|
+
File.readlines(log_path)[1..2] == [
|
24
|
+
"request: http://127.0.0.1/logger\n",
|
25
|
+
"response: body\n"
|
26
|
+
]
|
27
|
+
end
|
28
|
+
end
|