excon 0.62.0 → 0.92.3

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 (125) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.md +0 -1
  3. data/LICENSE.md +1 -1
  4. data/README.md +7 -6
  5. data/data/cacert.pem +1220 -1828
  6. data/excon.gemspec +19 -3
  7. data/lib/excon/connection.rb +216 -139
  8. data/lib/excon/constants.rb +38 -13
  9. data/lib/excon/error.rb +15 -0
  10. data/lib/excon/headers.rb +4 -3
  11. data/lib/excon/instrumentors/logging_instrumentor.rb +5 -16
  12. data/lib/excon/instrumentors/standard_instrumentor.rb +2 -9
  13. data/lib/excon/middlewares/base.rb +6 -0
  14. data/lib/excon/middlewares/capture_cookies.rb +1 -1
  15. data/lib/excon/middlewares/decompress.rb +11 -4
  16. data/lib/excon/middlewares/expects.rb +7 -1
  17. data/lib/excon/middlewares/idempotent.rb +20 -3
  18. data/lib/excon/middlewares/instrumentor.rb +8 -0
  19. data/lib/excon/middlewares/mock.rb +12 -3
  20. data/lib/excon/middlewares/redirect_follower.rb +25 -3
  21. data/lib/excon/middlewares/response_parser.rb +3 -0
  22. data/lib/excon/pretty_printer.rb +1 -8
  23. data/lib/excon/response.rb +12 -9
  24. data/lib/excon/socket.rb +59 -42
  25. data/lib/excon/ssl_socket.rb +37 -15
  26. data/lib/excon/test/plugin/server/exec.rb +5 -2
  27. data/lib/excon/test/plugin/server/puma.rb +4 -1
  28. data/lib/excon/test/plugin/server/unicorn.rb +5 -0
  29. data/lib/excon/test/plugin/server/webrick.rb +4 -1
  30. data/lib/excon/test/server.rb +1 -1
  31. data/lib/excon/unix_socket.rb +1 -0
  32. data/lib/excon/utils.rb +59 -5
  33. data/lib/excon/version.rb +1 -1
  34. data/lib/excon.rb +25 -17
  35. metadata +27 -98
  36. data/.document +0 -5
  37. data/.gitignore +0 -13
  38. data/.rspec +0 -3
  39. data/.travis.yml +0 -29
  40. data/Gemfile +0 -19
  41. data/Rakefile +0 -41
  42. data/benchmarks/class_vs_lambda.rb +0 -50
  43. data/benchmarks/concat_vs_insert.rb +0 -21
  44. data/benchmarks/concat_vs_interpolate.rb +0 -22
  45. data/benchmarks/cr_lf.rb +0 -21
  46. data/benchmarks/downcase-eq-eq_vs_casecmp.rb +0 -169
  47. data/benchmarks/excon.rb +0 -69
  48. data/benchmarks/excon_vs.rb +0 -165
  49. data/benchmarks/for_vs_array_each.rb +0 -27
  50. data/benchmarks/for_vs_hash_each.rb +0 -27
  51. data/benchmarks/has_key-vs-lookup.rb +0 -177
  52. data/benchmarks/headers_case_sensitivity.rb +0 -83
  53. data/benchmarks/headers_split_vs_match.rb +0 -34
  54. data/benchmarks/implicit_block-vs-explicit_block.rb +0 -98
  55. data/benchmarks/merging.rb +0 -21
  56. data/benchmarks/single_vs_double_quotes.rb +0 -21
  57. data/benchmarks/string_ranged_index.rb +0 -87
  58. data/benchmarks/strip_newline.rb +0 -115
  59. data/benchmarks/vs_stdlib.rb +0 -82
  60. data/changelog.txt +0 -1083
  61. data/spec/excon/error_spec.rb +0 -139
  62. data/spec/excon/test/server_spec.rb +0 -28
  63. data/spec/excon_spec.rb +0 -7
  64. data/spec/helpers/file_path_helpers.rb +0 -22
  65. data/spec/requests/basic_spec.rb +0 -40
  66. data/spec/requests/eof_requests_spec.rb +0 -36
  67. data/spec/requests/unix_socket_spec.rb +0 -46
  68. data/spec/spec_helper.rb +0 -24
  69. data/spec/support/shared_contexts/test_server_context.rb +0 -83
  70. data/spec/support/shared_examples/shared_example_for_clients.rb +0 -218
  71. data/spec/support/shared_examples/shared_example_for_streaming_clients.rb +0 -20
  72. data/spec/support/shared_examples/shared_example_for_test_servers.rb +0 -16
  73. data/tests/authorization_header_tests.rb +0 -29
  74. data/tests/bad_tests.rb +0 -47
  75. data/tests/basic_tests.rb +0 -351
  76. data/tests/batch_requests.rb +0 -133
  77. data/tests/complete_responses.rb +0 -31
  78. data/tests/data/127.0.0.1.cert.crt +0 -20
  79. data/tests/data/127.0.0.1.cert.key +0 -27
  80. data/tests/data/excon.cert.crt +0 -20
  81. data/tests/data/excon.cert.key +0 -27
  82. data/tests/data/xs +0 -1
  83. data/tests/error_tests.rb +0 -145
  84. data/tests/header_tests.rb +0 -119
  85. data/tests/middlewares/canned_response_tests.rb +0 -34
  86. data/tests/middlewares/capture_cookies_tests.rb +0 -34
  87. data/tests/middlewares/decompress_tests.rb +0 -157
  88. data/tests/middlewares/escape_path_tests.rb +0 -36
  89. data/tests/middlewares/idempotent_tests.rb +0 -206
  90. data/tests/middlewares/instrumentation_tests.rb +0 -315
  91. data/tests/middlewares/mock_tests.rb +0 -304
  92. data/tests/middlewares/redirect_follower_tests.rb +0 -112
  93. data/tests/pipeline_tests.rb +0 -40
  94. data/tests/proxy_tests.rb +0 -306
  95. data/tests/query_string_tests.rb +0 -87
  96. data/tests/rackups/basic.rb +0 -41
  97. data/tests/rackups/basic.ru +0 -3
  98. data/tests/rackups/basic_auth.ru +0 -14
  99. data/tests/rackups/deflater.ru +0 -4
  100. data/tests/rackups/proxy.ru +0 -18
  101. data/tests/rackups/query_string.ru +0 -13
  102. data/tests/rackups/redirecting.ru +0 -23
  103. data/tests/rackups/redirecting_with_cookie.ru +0 -40
  104. data/tests/rackups/request_headers.ru +0 -15
  105. data/tests/rackups/request_methods.ru +0 -21
  106. data/tests/rackups/response_header.ru +0 -18
  107. data/tests/rackups/ssl.ru +0 -16
  108. data/tests/rackups/ssl_mismatched_cn.ru +0 -15
  109. data/tests/rackups/ssl_verify_peer.ru +0 -16
  110. data/tests/rackups/streaming.ru +0 -30
  111. data/tests/rackups/thread_safety.ru +0 -17
  112. data/tests/rackups/timeout.ru +0 -14
  113. data/tests/rackups/webrick_patch.rb +0 -34
  114. data/tests/request_headers_tests.rb +0 -21
  115. data/tests/request_method_tests.rb +0 -47
  116. data/tests/request_tests.rb +0 -59
  117. data/tests/response_tests.rb +0 -197
  118. data/tests/servers/bad.rb +0 -20
  119. data/tests/servers/eof.rb +0 -17
  120. data/tests/servers/error.rb +0 -20
  121. data/tests/servers/good.rb +0 -350
  122. data/tests/test_helper.rb +0 -306
  123. data/tests/thread_safety_tests.rb +0 -39
  124. data/tests/timeout_tests.rb +0 -12
  125. data/tests/utils_tests.rb +0 -81
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEowIBAAKCAQEAxZ527UceJuBMTm/FwDzbq+2WAMwoRg3s09KSEf5mMPP+dZnt
3
- jsNwNw0ixbc13nc+xQbC9roWcGTSP/YYDCb5A7huMehTMHY7iuR4+yuGsA60ar24
4
- g0qZwBLTL0+2X9lO/VCwpSLiUqMOhqXIdXyYSiGlY2X25Y7Ro35DYo13inRIeaU0
5
- YBmT0GKJG88kmp6dnYPnUxsl0fk7c30WEufAgrp5VpRH9reV/mF2TIZiLf3OkbHj
6
- tUb/qr2KzW35ZcFZpot1TSiYOGUfbzWSr4dpXdqQbqQqHvTEUZdT1hrurBH48D5a
7
- QYk7rPzyrARJGkZl9JIGSWkzT6ohtg4/tlv08wIDAQABAoIBABpFHnocYh2442vp
8
- 39fWPz1zr+UbPp9RapIeA9zwfJU1WjY36CR6RoiK7nxqBnc0UtvOMkyqICGAxZJL
9
- HJdA9wlPkxZ/U8+1Z+Tmyk5ZUuZEjidCYSzS1e16kyhO6GeFc8Ko31KUeJGTq3Kq
10
- xyMXFQeFwX6dJ10Mx0F8n2iSdbmpz6Sfz+L8RwUjlbi3m1iveeMqTk0V8ChTDluC
11
- RWLoUUAqOaV3YpaV4pHmpRJ9uMLbyC72t6JnbLdi5d/EY5vGmMDgsKg/pqW8omFO
12
- 8kWo5riLncUyvEwSPoUyY12WWc3CnroacEJ7GoibuZYZwntwot+cWOkIZmnCbj+H
13
- OiBcDoECgYEA8ZgQmdlxQ5Fwe9sadDA3SYi2V/6bQNQkw54xkfsWd/PijIunVJI8
14
- cj/hVnbZL487DnJAXsLLygw048fSGwFZXmNbQUiXZaEIpa4t9DkgouGPvvuBp6TI
15
- uIjUF4aRKA4a3+MT4SNm74qXx8co5YXnE09KIMswZQ1YHjwIzV0ggJsCgYEA0Wce
16
- 7poL7Xiyu1G1vr8vEbYtqelqHP28SzXkwrTqyOV8MPlw0/OhMDWmPLdE9mxSDwdD
17
- QAlPvvCWXhHEM/St5tN72mzuyodHjNsVnlPAckj6ADTTAmUO0fixHjivZ/6v+PEo
18
- SbjzmsbEExjyLKdScW8ALq3nfCdC9+Z3aTFShokCgYBbmz9gNtT9u94c+J11RPsR
19
- xObvQrl3wXkXO5qsMbr5TN6wUBvos3J8F8DH2lTL9dF8ztGdnNtNB4feftwqJT7P
20
- zXjCrlXJ0V/IAt2l5yt613B8CD3HZXI+lpNlQD82IvMJxb659YSIe9LFi7z0Guvd
21
- pIkFGkaFaqPpAvaLeC5k1QKBgGTqrZ2P3++yG3DrEAu9V5HRmnAobVtLbVNRxc2Q
22
- IxZugkuX6yg6YZQ6RsM8D6Ay09kqRt61nhkHGXB8X3IqmSSFB0tc9DfmujTH4MNM
23
- 2ZI6WUGAM7ETwvCuSa2m4+HafDQdBK2C1OPiptwNSaj7el/wfsYASW8r/Lo795Ba
24
- lMsBAoGBAO8fKeu1cSrgNBG5Bafa5P2uPK1X9GASA1zgG6ay3FGH9m/vt36/DcRq
25
- LQQP1WJUH8AR9/jlUgpS134Ww0AFVVh/ZHZTFnVkS8mn6wzFehxt49uVVcJncRzB
26
- Vnes1S/Zky0RgvfR4rWy9NCYkIkqYAQPacfElxpGItV7V2INKFol
27
- -----END RSA PRIVATE KEY-----
data/tests/data/xs DELETED
@@ -1 +0,0 @@
1
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
data/tests/error_tests.rb DELETED
@@ -1,145 +0,0 @@
1
-
2
-
3
- Shindo.tests('HTTPStatusError request/response debugging') do
4
-
5
- # Regression against e300458f2d9330cb265baeb8973120d08c665d9
6
- tests('Excon::Error knows about pertinent errors') do
7
- expected = [
8
- 100,
9
- 101,
10
- (200..206).to_a,
11
- (300..307).to_a,
12
- (400..417).to_a,
13
- 422,
14
- 429,
15
- (500..504).to_a
16
- ]
17
- expected.flatten == Excon::Error.status_errors.keys
18
- end
19
-
20
- tests('new returns an Error').returns(true) do
21
- Excon::Error.new('bar').class == Excon::Error
22
- end
23
-
24
- tests('new raises errors for bad URIs').returns(true) do
25
- begin
26
- Excon.new('foo')
27
- false
28
- rescue => err
29
- err.to_s.include? 'foo'
30
- end
31
- end
32
-
33
- tests('new raises errors for bad paths').returns(true) do
34
- begin
35
- Excon.new('http://localhost', path: "foo\r\nbar: baz")
36
- false
37
- rescue => err
38
- err.to_s.include? "foo\r\nbar: baz"
39
- end
40
- end
41
-
42
- tests('can raise standard error and catch standard error').returns(true) do
43
- begin
44
- raise Excon::Error::Client.new('foo')
45
- rescue Excon::Error => e
46
- true
47
- end
48
- end
49
-
50
- tests('can raise legacy errors and catch legacy errors').returns(true) do
51
- begin
52
- raise Excon::Errors::Error.new('bar')
53
- rescue Excon::Errors::Error => e
54
- true
55
- end
56
- end
57
-
58
- tests('can raise standard error and catch legacy errors').returns(true) do
59
- begin
60
- raise Excon::Error::NotFound.new('bar')
61
- rescue Excon::Errors::Error => e
62
- true
63
- end
64
- end
65
-
66
- tests('can raise with status_error() and catch with standard error').returns(true) do
67
- begin
68
- raise Excon::Error.status_error({expects: 200}, {status: 400})
69
- rescue Excon::Error
70
- true
71
- end
72
- end
73
-
74
-
75
- tests('can raise with status_error() and catch with legacy error').returns(true) do
76
- begin
77
- raise Excon::Error.status_error({expects: 200}, {status: 400})
78
- rescue Excon::Errors::BadRequest
79
- true
80
- end
81
- end
82
-
83
- tests('can raise with legacy status_error() and catch with legacy').returns(true) do
84
- begin
85
- raise Excon::Errors.status_error({expects: 200}, {status: 400})
86
- rescue Excon::Errors::BadRequest
87
- true
88
- end
89
- end
90
-
91
-
92
- tests('can raise with legacy status_error() and catch with standard').returns(true) do
93
- begin
94
- raise Excon::Errors.status_error({expects: 200}, {status: 400})
95
- rescue Excon::Error
96
- true
97
- end
98
- end
99
-
100
- with_server('error') do
101
-
102
- tests('message does not include response or response info').returns(true) do
103
- begin
104
- Excon.get('http://127.0.0.1:9292/error/not_found', :expects => 200)
105
- rescue Excon::Errors::HTTPStatusError => err
106
- err.message.include?('Expected(200) <=> Actual(404 Not Found)') &&
107
- !err.message.include?('excon.error.request') &&
108
- !err.message.include?('excon.error.response')
109
- end
110
- end
111
-
112
- tests('message includes only request info').returns(true) do
113
- begin
114
- Excon.get('http://127.0.0.1:9292/error/not_found', :expects => 200,
115
- :debug_request => true)
116
- rescue Excon::Errors::HTTPStatusError => err
117
- err.message.include?('Expected(200) <=> Actual(404 Not Found)') &&
118
- err.message.include?('excon.error.request') &&
119
- !err.message.include?('excon.error.response')
120
- end
121
- end
122
-
123
- tests('message includes only response info').returns(true) do
124
- begin
125
- Excon.get('http://127.0.0.1:9292/error/not_found', :expects => 200,
126
- :debug_response => true)
127
- rescue Excon::Errors::HTTPStatusError => err
128
- err.message.include?('Expected(200) <=> Actual(404 Not Found)') &&
129
- !err.message.include?('excon.error.request') &&
130
- err.message.include?('excon.error.response')
131
- end
132
- end
133
-
134
- tests('message include request and response info').returns(true) do
135
- begin
136
- Excon.get('http://127.0.0.1:9292/error/not_found', :expects => 200,
137
- :debug_request => true, :debug_response => true)
138
- rescue Excon::Errors::HTTPStatusError => err
139
- err.message.include?('Expected(200) <=> Actual(404 Not Found)') &&
140
- err.message.include?('excon.error.request') &&
141
- err.message.include?('excon.error.response')
142
- end
143
- end
144
- end
145
- end
@@ -1,119 +0,0 @@
1
- Shindo.tests('Excon response header support') do
2
- env_init
3
-
4
- tests('Excon::Headers storage') do
5
- headers = Excon::Headers.new
6
- headers['Exact-Case'] = 'expected'
7
- headers['Another-Fixture'] = 'another'
8
-
9
- tests('stores and retrieves as received').returns('expected') do
10
- headers['Exact-Case']
11
- end
12
-
13
- tests('enumerates keys as received') do
14
- ks = headers.keys
15
- tests('contains Exact-Case').returns(true) { ks.include? 'Exact-Case' }
16
- tests('contains Another-Fixture').returns(true) { ks.include? 'Another-Fixture' }
17
- end
18
-
19
- tests('supports case-insensitive access').returns('expected') do
20
- headers['EXACT-CASE']
21
- end
22
-
23
- tests('but still returns nil for missing keys').returns(nil) do
24
- headers['Missing-Header']
25
- end
26
-
27
- tests('Hash methods that should support case-insensitive access') do
28
- if {}.respond_to? :assoc
29
- tests('#assoc').returns(%w{exact-case expected}) do
30
- headers.assoc('exact-Case')
31
- end
32
- end
33
-
34
- tests('#delete') do
35
- tests('with just a key').returns('yes') do
36
- headers['Extra'] = 'yes'
37
- headers.delete('extra')
38
- end
39
-
40
- tests('with a proc').returns('called with notpresent') do
41
- headers.delete('notpresent') { |k| "called with #{k}" }
42
- end
43
- end
44
-
45
- tests('#fetch') do
46
- tests('when present').returns('expected') { headers.fetch('exact-CASE') }
47
- tests('with a default value').returns('default') { headers.fetch('missing', 'default') }
48
- tests('with a default proc').returns('got missing') do
49
- headers.fetch('missing') { |k| "got #{k}" }
50
- end
51
- end
52
-
53
- tests('#has_key?') do
54
- tests('when present').returns(true) { headers.has_key?('EXACT-case') }
55
- tests('when absent').returns(false) { headers.has_key?('missing') }
56
- end
57
-
58
- tests('#values_at') do
59
- tests('all present').returns(%w{expected another}) do
60
- headers.values_at('exACT-cASE', 'anotheR-fixturE')
61
- end
62
- tests('some missing').returns(['expected', nil]) do
63
- headers.values_at('exact-case', 'missing-header')
64
- end
65
- end
66
- end
67
- end
68
-
69
- with_rackup('response_header.ru') do
70
-
71
- tests('Response#get_header') do
72
- connection = nil
73
- response = nil
74
-
75
- tests('with variable header capitalization') do
76
-
77
- tests('response.get_header("mixedcase-header")').returns('MixedCase') do
78
- connection = Excon.new('http://foo.com:8080', :proxy => 'http://127.0.0.1:9292')
79
- response = connection.request(:method => :get, :path => '/foo')
80
-
81
- response.get_header("mixedcase-header")
82
- end
83
-
84
- tests('response.get_header("uppercase-header")').returns('UPPERCASE') do
85
- response.get_header("uppercase-header")
86
- end
87
-
88
- tests('response.get_header("lowercase-header")').returns('lowercase') do
89
- response.get_header("lowercase-header")
90
- end
91
-
92
- end
93
-
94
- tests('when provided key capitalization varies') do
95
-
96
- tests('response.get_header("MIXEDCASE-HEADER")').returns('MixedCase') do
97
- response.get_header("MIXEDCASE-HEADER")
98
- end
99
-
100
- tests('response.get_header("MiXeDcAsE-hEaDeR")').returns('MixedCase') do
101
- response.get_header("MiXeDcAsE-hEaDeR")
102
- end
103
-
104
- end
105
-
106
- tests('when header is unavailable') do
107
-
108
- tests('response.get_header("missing")').returns(nil) do
109
- response.get_header("missing")
110
- end
111
-
112
- end
113
-
114
- end
115
-
116
- end
117
-
118
- env_restore
119
- end
@@ -1,34 +0,0 @@
1
- Shindo.tests("Excon support for middlewares that return canned responses") do
2
- the_body = "canned"
3
-
4
- canned_response_middleware = Class.new(Excon::Middleware::Base) do
5
- define_method :request_call do |params|
6
- params[:response] = {
7
- :body => the_body,
8
- :headers => {},
9
- :status => 200
10
- }
11
- super(params)
12
- end
13
- end
14
-
15
- tests('does not mutate the canned response body').returns(the_body) do
16
- Excon.get(
17
- 'http://some-host.com/some-path',
18
- :middlewares => [canned_response_middleware] + Excon.defaults[:middlewares]
19
- ).body
20
- end
21
-
22
- tests('yields non-mutated body to response_block').returns(the_body) do
23
- body = ''
24
- response_block = lambda { |chunk, _, _| body << chunk }
25
- Excon.get(
26
- 'http://some-host.com/some-path',
27
- :middlewares => [canned_response_middleware] + Excon.defaults[:middlewares],
28
- :response_block => response_block
29
- )
30
- body
31
- end
32
-
33
- end
34
-
@@ -1,34 +0,0 @@
1
- Shindo.tests("Excon redirecting with cookie preserved") do
2
- env_init
3
-
4
- with_rackup('redirecting_with_cookie.ru') do
5
- tests('second request will send cookies set by the first').returns('ok') do
6
- Excon.get(
7
- 'http://127.0.0.1:9292',
8
- :path => '/sets_cookie',
9
- :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower]
10
- ).body
11
- end
12
-
13
- tests('second request will send multiple cookies set by the first').returns('ok') do
14
- Excon.get(
15
- 'http://127.0.0.1:9292',
16
- :path => '/sets_multi_cookie',
17
- :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower]
18
- ).body
19
- end
20
- end
21
-
22
- with_rackup('redirecting.ru') do
23
- tests("runs normally when there are no cookies set").returns('ok') do
24
- Excon.post(
25
- 'http://127.0.0.1:9292',
26
- :path => '/first',
27
- :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower],
28
- :body => "a=Some_content"
29
- ).body
30
- end
31
- end
32
-
33
- env_restore
34
- end
@@ -1,157 +0,0 @@
1
- Shindo.tests('Excon Decompress Middleware') do
2
- env_init
3
-
4
- with_server('good') do
5
-
6
- before do
7
- @connection ||= Excon.new(
8
- 'http://127.0.0.1:9292/echo/content-encoded',
9
- :method => :post,
10
- :body => 'hello world',
11
- :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::Decompress]
12
- )
13
- end
14
-
15
- tests('gzip') do
16
- resp = nil
17
-
18
- tests('response body decompressed').returns('hello world') do
19
- resp = @connection.request(
20
- :headers => { 'Accept-Encoding' => 'gzip, deflate;q=0' }
21
- )
22
- resp[:body]
23
- end
24
-
25
- tests('server sent content-encoding').returns('gzip') do
26
- resp[:headers]['Content-Encoding-Sent']
27
- end
28
-
29
- tests('removes processed encoding from header').returns('') do
30
- resp[:headers]['Content-Encoding']
31
- end
32
-
33
- tests('empty response body').returns('') do
34
- resp = @connection.request(:body => '')
35
- resp[:body]
36
- end
37
- end
38
-
39
- tests('deflate') do
40
- resp = nil
41
-
42
- tests('response body decompressed').returns('hello world') do
43
- resp = @connection.request(
44
- :headers => { 'Accept-Encoding' => 'gzip;q=0, deflate' }
45
- )
46
- resp[:body]
47
- end
48
-
49
- tests('server sent content-encoding').returns('deflate') do
50
- resp[:headers]['Content-Encoding-Sent']
51
- end
52
-
53
- tests('removes processed encoding from header').returns('') do
54
- resp[:headers]['Content-Encoding']
55
- end
56
- end
57
-
58
- tests('with pre-encoding') do
59
- resp = nil
60
-
61
- tests('server sent content-encoding').returns('other, gzip') do
62
- resp = @connection.request(
63
- :headers => { 'Accept-Encoding' => 'gzip, deflate;q=0',
64
- 'Content-Encoding-Pre' => 'other' }
65
- )
66
- resp[:headers]['Content-Encoding-Sent']
67
- end
68
-
69
- tests('processed encoding removed from header').returns('other') do
70
- resp[:headers]['Content-Encoding']
71
- end
72
-
73
- tests('response body decompressed').returns('hello world') do
74
- resp[:body]
75
- end
76
-
77
- end
78
-
79
- tests('with post-encoding') do
80
- resp = nil
81
-
82
- tests('server sent content-encoding').returns('gzip, other') do
83
- resp = @connection.request(
84
- :headers => { 'Accept-Encoding' => 'gzip, deflate;q=0',
85
- 'Content-Encoding-Post' => 'other' }
86
- )
87
- resp[:headers]['Content-Encoding-Sent']
88
- end
89
-
90
- tests('unprocessed since last applied is unknown').returns('gzip, other') do
91
- resp[:headers]['Content-Encoding']
92
- end
93
-
94
- tests('response body still compressed').returns('hello world') do
95
- Zlib::GzipReader.new(StringIO.new(resp[:body])).read
96
- end
97
-
98
- end
99
-
100
- tests('with a :response_block') do
101
- captures = nil
102
- resp = nil
103
-
104
- tests('server sent content-encoding').returns('gzip') do
105
- captures = capture_response_block do |block|
106
- resp = @connection.request(
107
- :headers => { 'Accept-Encoding' => 'gzip'},
108
- :response_block => block
109
- )
110
- end
111
- resp[:headers]['Content-Encoding-Sent']
112
- end
113
-
114
- tests('unprocessed since :response_block was used').returns('gzip') do
115
- resp[:headers]['Content-Encoding']
116
- end
117
-
118
- tests(':response_block passed unprocessed data').returns('hello world') do
119
- body = captures.map {|capture| capture[0] }.join
120
- Zlib::GzipReader.new(StringIO.new(body)).read
121
- end
122
-
123
- end
124
-
125
- tests('adds Accept-Encoding if needed') do
126
-
127
- tests('without a :response_block').returns('deflate, gzip') do
128
- resp = Excon.post(
129
- 'http://127.0.0.1:9292/echo/request',
130
- :body => 'hello world',
131
- :middlewares => Excon.defaults[:middlewares] +
132
- [Excon::Middleware::Decompress]
133
- )
134
- request = Marshal.load(resp.body)
135
- request[:headers]['Accept-Encoding']
136
- end
137
-
138
- tests('with a :response_block').returns(nil) do
139
- captures = capture_response_block do |block|
140
- Excon.post(
141
- 'http://127.0.0.1:9292/echo/request',
142
- :body => 'hello world',
143
- :response_block => block,
144
- :middlewares => Excon.defaults[:middlewares] +
145
- [Excon::Middleware::Decompress]
146
- )
147
- end
148
- request = Marshal.load(captures.map {|capture| capture[0] }.join)
149
- request[:headers]['Accept-Encoding']
150
- end
151
-
152
- end
153
-
154
- end
155
-
156
- env_restore
157
- end
@@ -1,36 +0,0 @@
1
- Shindo.tests('Excon Decompress Middleware') do
2
- env_init
3
- with_rackup('basic.ru') do
4
- tests('encoded uri passed to connection') do
5
- tests('GET /echo%20dirty').returns(200) do
6
- connection = Excon::Connection.new({
7
- :host => '127.0.0.1',
8
- :hostname => '127.0.0.1',
9
- :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::EscapePath],
10
- :nonblock => false,
11
- :port => 9292,
12
- :scheme => 'http',
13
- :ssl_verify_peer => false
14
- })
15
- response = connection.request(:method => :get, :path => '/echo%20dirty')
16
- response[:status]
17
- end
18
- end
19
-
20
- tests('unencoded uri passed to connection') do
21
- tests('GET /echo dirty').returns(200) do
22
- connection = Excon::Connection.new({
23
- :host => '127.0.0.1',
24
- :hostname => '127.0.0.1',
25
- :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::EscapePath],
26
- :nonblock => false,
27
- :port => 9292,
28
- :scheme => 'http',
29
- :ssl_verify_peer => false
30
- })
31
- response = connection.request(:method => :get, :path => '/echo dirty')
32
- response[:status]
33
- end
34
- end
35
- end
36
- end