ethon 0.16.0 → 0.17.0
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/CHANGELOG.md +26 -1
- data/README.md +1 -1
- data/ethon.gemspec +6 -3
- data/lib/ethon/curls/codes.rb +3 -2
- data/lib/ethon/version.rb +1 -1
- metadata +6 -85
- data/.github/workflows/ruby.yml +0 -41
- data/.gitignore +0 -8
- data/.rspec +0 -3
- data/Gemfile +0 -43
- data/Guardfile +0 -10
- data/Rakefile +0 -40
- data/profile/benchmarks.rb +0 -104
- data/profile/memory_leaks.rb +0 -114
- data/profile/perf_spec_helper.rb +0 -37
- data/profile/support/memory_test_helpers.rb +0 -76
- data/profile/support/os_memory_leak_tracker.rb +0 -48
- data/profile/support/ruby_object_leak_tracker.rb +0 -49
- data/spec/ethon/curl_spec.rb +0 -38
- data/spec/ethon/easy/callbacks_spec.rb +0 -81
- data/spec/ethon/easy/debug_info_spec.rb +0 -54
- data/spec/ethon/easy/features_spec.rb +0 -24
- data/spec/ethon/easy/form_spec.rb +0 -104
- data/spec/ethon/easy/header_spec.rb +0 -79
- data/spec/ethon/easy/http/custom_spec.rb +0 -177
- data/spec/ethon/easy/http/delete_spec.rb +0 -21
- data/spec/ethon/easy/http/get_spec.rb +0 -126
- data/spec/ethon/easy/http/head_spec.rb +0 -80
- data/spec/ethon/easy/http/options_spec.rb +0 -51
- data/spec/ethon/easy/http/patch_spec.rb +0 -51
- data/spec/ethon/easy/http/post_spec.rb +0 -317
- data/spec/ethon/easy/http/put_spec.rb +0 -168
- data/spec/ethon/easy/http_spec.rb +0 -64
- data/spec/ethon/easy/informations_spec.rb +0 -126
- data/spec/ethon/easy/mirror_spec.rb +0 -47
- data/spec/ethon/easy/operations_spec.rb +0 -271
- data/spec/ethon/easy/options_spec.rb +0 -193
- data/spec/ethon/easy/queryable_spec.rb +0 -235
- data/spec/ethon/easy/response_callbacks_spec.rb +0 -152
- data/spec/ethon/easy/util_spec.rb +0 -28
- data/spec/ethon/easy_spec.rb +0 -203
- data/spec/ethon/libc_spec.rb +0 -14
- data/spec/ethon/loggable_spec.rb +0 -22
- data/spec/ethon/multi/operations_spec.rb +0 -298
- data/spec/ethon/multi/options_spec.rb +0 -182
- data/spec/ethon/multi/stack_spec.rb +0 -80
- data/spec/ethon/multi_spec.rb +0 -152
- data/spec/spec_helper.rb +0 -28
- data/spec/support/localhost_server.rb +0 -95
- data/spec/support/server.rb +0 -115
@@ -1,317 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Ethon::Easy::Http::Post do
|
5
|
-
let(:easy) { Ethon::Easy.new }
|
6
|
-
let(:url) { "http://localhost:3001/" }
|
7
|
-
let(:params) { nil }
|
8
|
-
let(:form) { nil }
|
9
|
-
let(:options) { Hash.new }
|
10
|
-
let(:post) { described_class.new(url, options.merge({:params => params, :body => form})) }
|
11
|
-
|
12
|
-
describe "#setup" do
|
13
|
-
context "when nothing" do
|
14
|
-
it "sets url" do
|
15
|
-
post.setup(easy)
|
16
|
-
expect(easy.url).to eq(url)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "sets postfield_size" do
|
20
|
-
expect(easy).to receive(:postfieldsize=).with(0)
|
21
|
-
post.setup(easy)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "sets copy_postfields" do
|
25
|
-
expect(easy).to receive(:copypostfields=).with("")
|
26
|
-
post.setup(easy)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "makes a post request" do
|
30
|
-
post.setup(easy)
|
31
|
-
easy.perform
|
32
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"POST"')
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "when params" do
|
37
|
-
let(:params) { {:a => "1&"} }
|
38
|
-
|
39
|
-
it "attaches escaped to url" do
|
40
|
-
post.setup(easy)
|
41
|
-
expect(easy.url).to eq("#{url}?a=1%26")
|
42
|
-
end
|
43
|
-
|
44
|
-
context "with arrays" do
|
45
|
-
let(:params) { {:a => %w( foo bar )} }
|
46
|
-
|
47
|
-
context "by default" do
|
48
|
-
it "encodes them with indexes" do
|
49
|
-
post.setup(easy)
|
50
|
-
expect(easy.url).to eq("#{url}?a%5B0%5D=foo&a%5B1%5D=bar")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
context "when params_encoding is :rack" do
|
55
|
-
let(:options) { {:params_encoding => :rack} }
|
56
|
-
it "encodes them without indexes" do
|
57
|
-
post.setup(easy)
|
58
|
-
expect(easy.url).to eq("#{url}?a%5B%5D=foo&a%5B%5D=bar")
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "with :escape" do
|
64
|
-
context 'missing' do
|
65
|
-
it "escapes values" do
|
66
|
-
post.setup(easy)
|
67
|
-
expect(easy.url).to eq("#{url}?a=1%26")
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'nil' do
|
72
|
-
let(:options) { {:escape => nil} }
|
73
|
-
|
74
|
-
it "escapes values" do
|
75
|
-
post.setup(easy)
|
76
|
-
expect(easy.url).to eq("#{url}?a=1%26")
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'true' do
|
81
|
-
let(:options) { {:escape => true} }
|
82
|
-
|
83
|
-
it "escapes values" do
|
84
|
-
post.setup(easy)
|
85
|
-
expect(easy.url).to eq("#{url}?a=1%26")
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'false' do
|
90
|
-
let(:options) { {:escape => false} }
|
91
|
-
|
92
|
-
it "sends raw values" do
|
93
|
-
post.setup(easy)
|
94
|
-
expect(easy.url).to eq("#{url}?a=1&")
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
it "sets postfieldsize" do
|
100
|
-
expect(easy).to receive(:postfieldsize=).with(0)
|
101
|
-
post.setup(easy)
|
102
|
-
end
|
103
|
-
|
104
|
-
it "sets copypostfields" do
|
105
|
-
expect(easy).to receive(:copypostfields=).with("")
|
106
|
-
post.setup(easy)
|
107
|
-
end
|
108
|
-
|
109
|
-
context "when requesting" do
|
110
|
-
let(:postredir) { nil }
|
111
|
-
|
112
|
-
before do
|
113
|
-
easy.headers = { 'Expect' => '' }
|
114
|
-
post.setup(easy)
|
115
|
-
easy.postredir = postredir
|
116
|
-
easy.followlocation = true
|
117
|
-
easy.perform
|
118
|
-
end
|
119
|
-
|
120
|
-
it "is a post" do
|
121
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"POST"')
|
122
|
-
end
|
123
|
-
|
124
|
-
it "uses application/x-www-form-urlencoded content type" do
|
125
|
-
expect(easy.response_body).to include('"CONTENT_TYPE":"application/x-www-form-urlencoded"')
|
126
|
-
end
|
127
|
-
|
128
|
-
it "requests parameterized url" do
|
129
|
-
expect(easy.response_body).to include('"REQUEST_URI":"http://localhost:3001/?a=1%26"')
|
130
|
-
end
|
131
|
-
|
132
|
-
context "when redirection" do
|
133
|
-
let(:url) { "localhost:3001/redirect" }
|
134
|
-
|
135
|
-
context "when no postredirs" do
|
136
|
-
it "is a get" do
|
137
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"GET"')
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
unless ENV['TRAVIS']
|
142
|
-
context "when postredirs" do
|
143
|
-
let(:postredir) { :post_all }
|
144
|
-
|
145
|
-
it "is a post" do
|
146
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"POST"')
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context "when body" do
|
155
|
-
context "when multipart" do
|
156
|
-
let(:form) { {:a => File.open(__FILE__, 'r')} }
|
157
|
-
|
158
|
-
it "sets httppost" do
|
159
|
-
expect(easy).to receive(:httppost=)
|
160
|
-
post.setup(easy)
|
161
|
-
end
|
162
|
-
|
163
|
-
context "when requesting" do
|
164
|
-
before do
|
165
|
-
easy.headers = { 'Expect' => '' }
|
166
|
-
post.setup(easy)
|
167
|
-
easy.perform
|
168
|
-
end
|
169
|
-
|
170
|
-
it "returns ok" do
|
171
|
-
expect(easy.return_code).to eq(:ok)
|
172
|
-
end
|
173
|
-
|
174
|
-
it "is a post" do
|
175
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"POST"')
|
176
|
-
end
|
177
|
-
|
178
|
-
it "uses multipart/form-data content type" do
|
179
|
-
expect(easy.response_body).to include('"CONTENT_TYPE":"multipart/form-data')
|
180
|
-
end
|
181
|
-
|
182
|
-
it "submits a body" do
|
183
|
-
expect(easy.response_body).to match('"body":".+"')
|
184
|
-
end
|
185
|
-
|
186
|
-
it "submits the data" do
|
187
|
-
expect(easy.response_body).to include('"filename":"post_spec.rb"')
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
context "when not multipart" do
|
193
|
-
let(:form) { {:a => "1&b=2"} }
|
194
|
-
let(:encoded) { "a=1%26b%3D2" }
|
195
|
-
|
196
|
-
it "sets escaped copypostfields" do
|
197
|
-
expect(easy).to receive(:copypostfields=).with(encoded)
|
198
|
-
post.setup(easy)
|
199
|
-
end
|
200
|
-
|
201
|
-
it "sets postfieldsize" do
|
202
|
-
expect(easy).to receive(:postfieldsize=).with(encoded.bytesize)
|
203
|
-
post.setup(easy)
|
204
|
-
end
|
205
|
-
|
206
|
-
context "when requesting" do
|
207
|
-
before do
|
208
|
-
easy.headers = { 'Expect' => '' }
|
209
|
-
post.setup(easy)
|
210
|
-
easy.perform
|
211
|
-
end
|
212
|
-
|
213
|
-
it "returns ok" do
|
214
|
-
expect(easy.return_code).to eq(:ok)
|
215
|
-
end
|
216
|
-
|
217
|
-
it "is a post" do
|
218
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"POST"')
|
219
|
-
end
|
220
|
-
|
221
|
-
it "uses multipart/form-data content type" do
|
222
|
-
expect(easy.response_body).to include('"CONTENT_TYPE":"application/x-www-form-urlencoded')
|
223
|
-
end
|
224
|
-
|
225
|
-
it "submits a body" do
|
226
|
-
expect(easy.response_body).to match('"body":"a=1%26b%3D2"')
|
227
|
-
end
|
228
|
-
|
229
|
-
it "submits the data" do
|
230
|
-
expect(easy.response_body).to include('"rack.request.form_hash":{"a":"1&b=2"}')
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
context "when string" do
|
236
|
-
let(:form) { "{a: 1}" }
|
237
|
-
|
238
|
-
context "when requesting" do
|
239
|
-
before do
|
240
|
-
easy.headers = { 'Expect' => '' }
|
241
|
-
post.setup(easy)
|
242
|
-
easy.perform
|
243
|
-
end
|
244
|
-
|
245
|
-
it "returns ok" do
|
246
|
-
expect(easy.return_code).to eq(:ok)
|
247
|
-
end
|
248
|
-
|
249
|
-
it "sends string" do
|
250
|
-
expect(easy.response_body).to include('"body":"{a: 1}"')
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
context "when binary with null bytes" do
|
256
|
-
let(:form) { [1, 0, 1].pack('c*') }
|
257
|
-
|
258
|
-
context "when requesting" do
|
259
|
-
before do
|
260
|
-
easy.headers = { 'Expect' => '' }
|
261
|
-
post.setup(easy)
|
262
|
-
easy.perform
|
263
|
-
end
|
264
|
-
|
265
|
-
it "returns ok" do
|
266
|
-
expect(easy.return_code).to eq(:ok)
|
267
|
-
end
|
268
|
-
|
269
|
-
it "sends binary data" do
|
270
|
-
expect(easy.response_body).to include('"body":"\\u0001\\u0000\\u0001"')
|
271
|
-
end
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
context "when arrays" do
|
276
|
-
let(:form) { {:a => %w( foo bar )} }
|
277
|
-
|
278
|
-
context "by default" do
|
279
|
-
it "sets copypostfields with indexed, escaped representation" do
|
280
|
-
expect(easy).to receive(:copypostfields=).with('a%5B0%5D=foo&a%5B1%5D=bar')
|
281
|
-
post.setup(easy)
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
context "when params_encoding is :rack" do
|
286
|
-
let(:options) { {:params_encoding => :rack} }
|
287
|
-
|
288
|
-
it "sets copypostfields with non-indexed, escaped representation" do
|
289
|
-
expect(easy).to receive(:copypostfields=).with('a%5B%5D=foo&a%5B%5D=bar')
|
290
|
-
post.setup(easy)
|
291
|
-
end
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
context "when params and body" do
|
297
|
-
let(:form) { {:a => "1"} }
|
298
|
-
let(:params) { {:b => "2"} }
|
299
|
-
|
300
|
-
context "when requesting" do
|
301
|
-
before do
|
302
|
-
easy.headers = { 'Expect' => '' }
|
303
|
-
post.setup(easy)
|
304
|
-
easy.perform
|
305
|
-
end
|
306
|
-
|
307
|
-
it "url contains params" do
|
308
|
-
expect(easy.response_body).to include('"REQUEST_URI":"http://localhost:3001/?b=2"')
|
309
|
-
end
|
310
|
-
|
311
|
-
it "body contains form" do
|
312
|
-
expect(easy.response_body).to include('"body":"a=1"')
|
313
|
-
end
|
314
|
-
end
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|
@@ -1,168 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Ethon::Easy::Http::Put do
|
5
|
-
let(:easy) { Ethon::Easy.new }
|
6
|
-
let(:url) { "http://localhost:3001/" }
|
7
|
-
let(:params) { nil }
|
8
|
-
let(:form) { nil }
|
9
|
-
let(:options) { Hash.new }
|
10
|
-
let(:put) { described_class.new(url, options.merge({:params => params, :body => form})) }
|
11
|
-
|
12
|
-
describe "#setup" do
|
13
|
-
context "when nothing" do
|
14
|
-
it "sets url" do
|
15
|
-
put.setup(easy)
|
16
|
-
expect(easy.url).to eq(url)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "sets upload" do
|
20
|
-
expect(easy).to receive(:upload=).with(true)
|
21
|
-
put.setup(easy)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "sets infilesize" do
|
25
|
-
expect(easy).to receive(:infilesize=).with(0)
|
26
|
-
put.setup(easy)
|
27
|
-
end
|
28
|
-
|
29
|
-
context "when requesting" do
|
30
|
-
it "makes a put request" do
|
31
|
-
put.setup(easy)
|
32
|
-
easy.perform
|
33
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"PUT"')
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "when params" do
|
39
|
-
let(:params) { {:a => "1&"} }
|
40
|
-
|
41
|
-
it "attaches escaped to url" do
|
42
|
-
put.setup(easy)
|
43
|
-
expect(easy.url).to eq("#{url}?a=1%26")
|
44
|
-
end
|
45
|
-
|
46
|
-
context "with arrays" do
|
47
|
-
let(:params) { {:a => %w( foo bar )} }
|
48
|
-
|
49
|
-
context "by default" do
|
50
|
-
it "encodes them with indexes" do
|
51
|
-
put.setup(easy)
|
52
|
-
expect(easy.url).to eq("#{url}?a%5B0%5D=foo&a%5B1%5D=bar")
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context "when params_encoding is :rack" do
|
57
|
-
let(:options) { {:params_encoding => :rack} }
|
58
|
-
it "encodes them without indexes" do
|
59
|
-
put.setup(easy)
|
60
|
-
expect(easy.url).to eq("#{url}?a%5B%5D=foo&a%5B%5D=bar")
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
it "sets upload" do
|
66
|
-
expect(easy).to receive(:upload=).with(true)
|
67
|
-
put.setup(easy)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "sets infilesize" do
|
71
|
-
expect(easy).to receive(:infilesize=).with(0)
|
72
|
-
put.setup(easy)
|
73
|
-
end
|
74
|
-
|
75
|
-
context "when requesting" do
|
76
|
-
before do
|
77
|
-
put.setup(easy)
|
78
|
-
easy.perform
|
79
|
-
end
|
80
|
-
|
81
|
-
it "makes a put request" do
|
82
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"PUT"')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context "when body" do
|
88
|
-
let(:form) { {:a => "1&b=2"} }
|
89
|
-
|
90
|
-
it "sets infilesize" do
|
91
|
-
expect(easy).to receive(:infilesize=).with(11)
|
92
|
-
put.setup(easy)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "sets readfunction" do
|
96
|
-
expect(easy).to receive(:readfunction)
|
97
|
-
put.setup(easy)
|
98
|
-
end
|
99
|
-
|
100
|
-
it "sets upload" do
|
101
|
-
expect(easy).to receive(:upload=).with(true)
|
102
|
-
put.setup(easy)
|
103
|
-
end
|
104
|
-
|
105
|
-
context "when requesting" do
|
106
|
-
context "sending string body" do
|
107
|
-
before do
|
108
|
-
easy.headers = { 'Expect' => '' }
|
109
|
-
put.setup(easy)
|
110
|
-
easy.perform
|
111
|
-
end
|
112
|
-
|
113
|
-
it "makes a put request" do
|
114
|
-
expect(easy.response_body).to include('"REQUEST_METHOD":"PUT"')
|
115
|
-
end
|
116
|
-
|
117
|
-
it "submits a body" do
|
118
|
-
expect(easy.response_body).to include('"body":"a=1%26b%3D2"')
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
context "when injecting a file as body" do
|
123
|
-
let(:file) { File.open(__FILE__) }
|
124
|
-
let(:easy) do
|
125
|
-
e = Ethon::Easy.new(:url => url, :upload => true)
|
126
|
-
e.set_read_callback(file)
|
127
|
-
e.infilesize = File.size(file.path)
|
128
|
-
e
|
129
|
-
end
|
130
|
-
|
131
|
-
before do
|
132
|
-
easy.headers = { 'Expect' => '' }
|
133
|
-
easy.perform
|
134
|
-
end
|
135
|
-
|
136
|
-
it "submits file" do
|
137
|
-
expect(easy.response_body).to include("injecting")
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
context "when arrays" do
|
143
|
-
let(:form) { {:a => %w( foo bar )} }
|
144
|
-
|
145
|
-
before do
|
146
|
-
put.setup(easy)
|
147
|
-
easy.perform
|
148
|
-
end
|
149
|
-
|
150
|
-
context "by default" do
|
151
|
-
it "submits an indexed, escaped representation" do
|
152
|
-
expect(easy.response_body).to include('"body":"a%5B0%5D=foo&a%5B1%5D=bar"')
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context "when params_encoding is :rack" do
|
157
|
-
let(:options) { {:params_encoding => :rack} }
|
158
|
-
|
159
|
-
it "submits an non-indexed, escaped representation" do
|
160
|
-
expect(easy.response_body).to include('"body":"a%5B%5D=foo&a%5B%5D=bar"')
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
context "when params and body"
|
167
|
-
end
|
168
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Ethon::Easy::Http do
|
5
|
-
let(:easy) { Ethon::Easy.new }
|
6
|
-
|
7
|
-
describe "#http_request" do
|
8
|
-
let(:url) { "http://localhost:3001/" }
|
9
|
-
let(:action_name) { :get }
|
10
|
-
let(:options) { {} }
|
11
|
-
|
12
|
-
let(:get) { double(:setup) }
|
13
|
-
let(:get_class) { Ethon::Easy::Http::Get }
|
14
|
-
|
15
|
-
it "instanciates action" do
|
16
|
-
expect(get).to receive(:setup)
|
17
|
-
expect(get_class).to receive(:new).and_return(get)
|
18
|
-
easy.http_request(url, action_name, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
context "when requesting" do
|
22
|
-
[ :get, :post, :put, :delete, :head, :patch, :options ].map do |action|
|
23
|
-
it "returns ok" do
|
24
|
-
easy.http_request(url, action, options)
|
25
|
-
easy.perform
|
26
|
-
expect(easy.return_code).to be(:ok)
|
27
|
-
end
|
28
|
-
|
29
|
-
unless action == :head
|
30
|
-
it "makes a #{action.to_s.upcase} request" do
|
31
|
-
easy.http_request(url, action, options)
|
32
|
-
easy.perform
|
33
|
-
expect(easy.response_body).to include("\"REQUEST_METHOD\":\"#{action.to_s.upcase}\"")
|
34
|
-
end
|
35
|
-
|
36
|
-
it "streams the response body from the #{action.to_s.upcase} request" do
|
37
|
-
bytes_read = 0
|
38
|
-
easy.on_body { |chunk, response| bytes_read += chunk.bytesize }
|
39
|
-
easy.http_request(url, action, options)
|
40
|
-
easy.perform
|
41
|
-
content_length = ((easy.response_headers =~ /Content-Length: (\d+)/) && $1.to_i)
|
42
|
-
expect(bytes_read).to eq(content_length)
|
43
|
-
expect(easy.response_body).to eq("")
|
44
|
-
end
|
45
|
-
|
46
|
-
it "notifies when headers are ready" do
|
47
|
-
headers = []
|
48
|
-
easy.on_headers { |r| headers << r.response_headers }
|
49
|
-
easy.http_request(url, action, options)
|
50
|
-
easy.perform
|
51
|
-
expect(headers).to eq([easy.response_headers])
|
52
|
-
expect(headers.first).to match(/Content-Length: (\d+)/)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
it "makes requests with custom HTTP verbs" do
|
58
|
-
easy.http_request(url, :purge, options)
|
59
|
-
easy.perform
|
60
|
-
expect(easy.response_body).to include(%{"REQUEST_METHOD":"PURGE"})
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Ethon::Easy::Informations do
|
5
|
-
let(:easy) { Ethon::Easy.new }
|
6
|
-
|
7
|
-
before do
|
8
|
-
easy.url = "http://localhost:3001"
|
9
|
-
easy.perform
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "#httpauth_avail" do
|
13
|
-
it "returns" do
|
14
|
-
expect(easy.httpauth_avail).to be
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#total_time" do
|
19
|
-
it "returns float" do
|
20
|
-
expect(easy.total_time).to be_a(Float)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "#starttransfer_time" do
|
25
|
-
it "returns float" do
|
26
|
-
expect(easy.starttransfer_time).to be_a(Float)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#appconnect_time" do
|
31
|
-
it "returns float" do
|
32
|
-
expect(easy.appconnect_time).to be_a(Float)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "#pretransfer_time" do
|
37
|
-
it "returns float" do
|
38
|
-
expect(easy.pretransfer_time).to be_a(Float)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#connect_time" do
|
43
|
-
it "returns float" do
|
44
|
-
expect(easy.connect_time).to be_a(Float)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#namelookup_time" do
|
49
|
-
it "returns float" do
|
50
|
-
expect(easy.namelookup_time).to be_a(Float)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#redirect_time" do
|
55
|
-
it "returns float" do
|
56
|
-
expect(easy.redirect_time).to be_a(Float)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "#effective_url" do
|
61
|
-
it "returns url" do
|
62
|
-
expect(easy.effective_url).to match(/^http:\/\/localhost:3001\/?/)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "#primary_ip" do
|
67
|
-
it "returns localhost" do
|
68
|
-
expect(easy.primary_ip).to match(/::1|127\.0\.0\.1/)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "#response_code" do
|
73
|
-
it "returns 200" do
|
74
|
-
expect(easy.response_code).to eq(200)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "#redirect_count" do
|
79
|
-
it "returns 0" do
|
80
|
-
expect(easy.redirect_count).to eq(0)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "#redirect_url" do
|
85
|
-
it "returns nil as there is no redirect" do
|
86
|
-
expect(easy.redirect_url).to be(nil)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "#request_size" do
|
91
|
-
it "returns 53" do
|
92
|
-
expect(easy.request_size).to eq(53)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "#supports_zlib?" do
|
97
|
-
it "returns true" do
|
98
|
-
expect(Kernel).to receive(:warn)
|
99
|
-
expect(easy.supports_zlib?).to be_truthy
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "#size_upload" do
|
104
|
-
it "returns float" do
|
105
|
-
expect(easy.size_upload).to be_a(Float)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe "#size_download" do
|
110
|
-
it "returns float" do
|
111
|
-
expect(easy.size_download).to be_a(Float)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "#speed_upload" do
|
116
|
-
it "returns float" do
|
117
|
-
expect(easy.speed_upload).to be_a(Float)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe "#speed_download" do
|
122
|
-
it "returns float" do
|
123
|
-
expect(easy.speed_download).to be_a(Float)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|