@@ -127,6 +127,7 @@ final class RequestBagTests: XCTestCase {
127127 XCTAssertNoThrow ( try executor. receiveEndOfStream ( ) )
128128 XCTAssertEqual ( receivedBytes, bytesToSent, " We have sent all request bytes... " )
129129
130+ XCTAssertTrue ( delegate. history. isEmpty)
130131 XCTAssertNil ( delegate. receivedHead, " Expected not to have a response head, before `receiveResponseHead` " )
131132 let responseHead = HTTPResponseHead (
132133 version: . http1_1,
@@ -140,6 +141,10 @@ final class RequestBagTests: XCTestCase {
140141 XCTAssertEqual ( responseHead, delegate. receivedHead)
141142 XCTAssertNoThrow ( try XCTUnwrap ( delegate. backpressurePromise) . succeed ( ( ) ) )
142143 XCTAssertTrue ( executor. signalledDemandForResponseBody)
144+
145+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
146+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
147+
143148 executor. resetResponseStreamDemandSignal ( )
144149
145150 // we will receive 20 chunks with each 10 byteBuffers and 32 bytes
@@ -747,13 +752,15 @@ final class RequestBagTests: XCTestCase {
747752 let executor = MockRequestExecutor ( eventLoop: embeddedEventLoop)
748753 executor. runRequest ( bag)
749754 XCTAssertFalse ( executor. signalledDemandForResponseBody)
750- bag. receiveResponseHead (
751- . init(
752- version: . http1_1,
753- status: . permanentRedirect,
754- headers: [ " content-length " : " \( 3 * 1024 ) " , " location " : " https://swift.org/sswg " ]
755- )
755+ XCTAssertTrue ( delegate. history. isEmpty)
756+ let responseHead = HTTPResponseHead (
757+ version: . http1_1,
758+ status: . permanentRedirect,
759+ headers: [ " content-length " : " \( 3 * 1024 ) " , " location " : " https://swift.org/sswg " ]
756760 )
761+ bag. receiveResponseHead ( responseHead)
762+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
763+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
757764 XCTAssertNil ( delegate. backpressurePromise)
758765 XCTAssertTrue ( executor. signalledDemandForResponseBody)
759766 executor. resetResponseStreamDemandSignal ( )
@@ -833,13 +840,15 @@ final class RequestBagTests: XCTestCase {
833840 let executor = MockRequestExecutor ( eventLoop: embeddedEventLoop)
834841 executor. runRequest ( bag)
835842 XCTAssertFalse ( executor. signalledDemandForResponseBody)
836- bag. receiveResponseHead (
837- . init(
838- version: . http1_1,
839- status: . permanentRedirect,
840- headers: [ " content-length " : " \( 4 * 1024 ) " , " location " : " https://swift.org/sswg " ]
841- )
843+ XCTAssertTrue ( delegate. history. isEmpty)
844+ let responseHead = HTTPResponseHead (
845+ version: . http1_1,
846+ status: . permanentRedirect,
847+ headers: [ " content-length " : " \( 4 * 1024 ) " , " location " : " https://swift.org/sswg " ]
842848 )
849+ bag. receiveResponseHead ( responseHead)
850+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
851+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
843852 XCTAssertNil ( delegate. backpressurePromise)
844853 XCTAssertFalse ( executor. signalledDemandForResponseBody)
845854 XCTAssertTrue ( executor. isCancelled)
@@ -893,13 +902,15 @@ final class RequestBagTests: XCTestCase {
893902 let executor = MockRequestExecutor ( eventLoop: embeddedEventLoop)
894903 executor. runRequest ( bag)
895904 XCTAssertFalse ( executor. signalledDemandForResponseBody)
896- bag. receiveResponseHead (
897- . init(
898- version: . http1_1,
899- status: . permanentRedirect,
900- headers: [ " content-length " : " \( 3 * 1024 ) " , " location " : " https://swift.org/sswg " ]
901- )
905+ XCTAssertTrue ( delegate. history. isEmpty)
906+ let responseHead = HTTPResponseHead (
907+ version: . http1_1,
908+ status: . permanentRedirect,
909+ headers: [ " content-length " : " \( 3 * 1024 ) " , " location " : " https://swift.org/sswg " ]
902910 )
911+ bag. receiveResponseHead ( responseHead)
912+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
913+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
903914 XCTAssertNil ( delegate. backpressurePromise)
904915 XCTAssertTrue ( executor. signalledDemandForResponseBody)
905916 executor. resetResponseStreamDemandSignal ( )
@@ -1001,6 +1012,7 @@ class UploadCountingDelegate: HTTPClientResponseDelegate {
10011012 private( set) var hitDidReceiveBodyPart = 0
10021013 private( set) var hitDidReceiveError = 0
10031014
1015+ private( set) var history : [ ( request: HTTPClient . Request , response: HTTPResponseHead ) ] = [ ]
10041016 private( set) var receivedHead : HTTPResponseHead ?
10051017 private( set) var lastBodyPart : ByteBuffer ?
10061018 private( set) var backpressurePromise : EventLoopPromise < Void > ?
@@ -1022,6 +1034,10 @@ class UploadCountingDelegate: HTTPClientResponseDelegate {
10221034 self . hitDidSendRequest += 1
10231035 }
10241036
1037+ func didVisitURL( task: HTTPClient . Task < Void > , _ request: HTTPClient . Request , _ head: HTTPResponseHead ) {
1038+ self . history. append ( ( request, head) )
1039+ }
1040+
10251041 func didReceiveHead( task: HTTPClient . Task < Void > , _ head: HTTPResponseHead ) -> EventLoopFuture < Void > {
10261042 self . receivedHead = head
10271043 return self . createBackpressurePromise ( )
0 commit comments