mirror of https://github.com/tootsuite/mastodon
Consume up to 1 MB of remaining response
parent
390cf34816
commit
b07e6d2f5d
|
@ -113,6 +113,7 @@ class Request
|
||||||
begin
|
begin
|
||||||
yield response if block_given?
|
yield response if block_given?
|
||||||
ensure
|
ensure
|
||||||
|
response.truncated_body if http_client.persistent? && !response.connection.finished_request?
|
||||||
http_client.close unless http_client.persistent? && response.connection.finished_request?
|
http_client.close unless http_client.persistent? && response.connection.finished_request?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,30 +99,38 @@ RSpec.describe Request do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with persistent connection' do
|
context 'with persistent connection' do
|
||||||
before { stub_request(:get, 'http://example.com').to_return(body: SecureRandom.random_bytes(100.kilobytes)) }
|
before { stub_request(:get, 'http://example.com').to_return(body: SecureRandom.random_bytes(2.megabytes)) }
|
||||||
|
|
||||||
let(:http_client) { described_class.http_client.persistent('http://example.com') }
|
let(:http_client) { described_class.http_client.persistent('http://example.com') }
|
||||||
let(:options) { { http_client: http_client } }
|
let(:options) { { http_client: http_client } }
|
||||||
|
|
||||||
it 'leaves connection open after complete response' do
|
it 'leaves connection open after completely consumed response' do
|
||||||
allow(http_client).to receive(:close)
|
allow(http_client).to receive(:close)
|
||||||
|
|
||||||
subject.perform(&:truncated_body)
|
subject.perform { |response| response.truncated_body(3.megabytes) }
|
||||||
|
|
||||||
expect(http_client).to_not have_received(:close)
|
expect(http_client).to_not have_received(:close)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'closes connection after aborted response' do
|
it 'leaves connection open after nearly consumed response' do
|
||||||
allow(http_client).to receive(:close)
|
allow(http_client).to receive(:close)
|
||||||
|
|
||||||
subject.perform { |response| response.truncated_body(1.kilobyte) }
|
subject.perform { |response| response.truncated_body(1.8.megabytes) }
|
||||||
|
|
||||||
|
expect(http_client).to_not have_received(:close)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'closes connection after unconsumed response' do
|
||||||
|
allow(http_client).to receive(:close)
|
||||||
|
|
||||||
|
subject.perform
|
||||||
|
|
||||||
expect(http_client).to have_received(:close)
|
expect(http_client).to have_received(:close)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'yields response' do
|
it 'yields response' do
|
||||||
subject.perform do |response|
|
subject.perform do |response|
|
||||||
expect(response.body_with_limit.size).to eq 100.kilobytes
|
expect(response.body_with_limit(2.megabytes).size).to eq 2.megabytes
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue