Skip to content

Commit 4f01d55

Browse files
committed
Require rewindable retry bodies
1 parent 0d7b6d5 commit 4f01d55

2 files changed

Lines changed: 46 additions & 6 deletions

File tree

‎lib/protocol/http/request.rb‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,7 @@ def idempotent?
158158
def rewind!
159159
# Requests without a body can be sent again immediately.
160160
if body = @body
161-
# Empty, non-rewindable bodies have nothing left to send.
162-
if body.empty? && !body.rewindable?
163-
return true
164-
end
165-
166-
# Non-empty bodies must be rewindable so the same data can be sent again.
161+
# Bodies must be rewindable so the same data can be sent again.
167162
if !body.rewindable?
168163
return false
169164
end

‎test/protocol/http/request.rb‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,51 @@
184184
expect(request.rewind!).to be == false
185185
end
186186
end
187+
188+
with "request with a consumed non-rewindable body" do
189+
let(:body) do
190+
Class.new(Protocol::HTTP::Body::Readable) do
191+
def initialize
192+
@chunk = "content"
193+
end
194+
195+
def read
196+
chunk = @chunk
197+
@chunk = nil
198+
return chunk
199+
end
200+
201+
def empty?
202+
@chunk.nil?
203+
end
204+
end.new
205+
end
206+
207+
let(:request) {subject.new(nil, nil, "PUT", "/resource", nil, headers, body)}
208+
209+
it "does not treat empty as rewindable" do
210+
expect(request.body.read).to be == "content"
211+
expect(request.body).to be(:empty?)
212+
213+
expect(request.rewind!).to be == false
214+
end
215+
end
216+
217+
with "request with an empty non-rewindable body" do
218+
let(:body) do
219+
Class.new(Protocol::HTTP::Body::Readable) do
220+
def empty?
221+
true
222+
end
223+
end.new
224+
end
225+
226+
let(:request) {subject.new(nil, nil, "PUT", "/resource", nil, headers, body)}
227+
228+
it "does not rewind" do
229+
expect(request.rewind!).to be == false
230+
end
231+
end
187232
end
188233

189234
with "#retry!" do

0 commit comments

Comments
 (0)