@@ -127,6 +127,7 @@ final class RequestBagTests: XCTestCase {
127
127
XCTAssertNoThrow ( try executor. receiveEndOfStream ( ) )
128
128
XCTAssertEqual ( receivedBytes, bytesToSent, " We have sent all request bytes... " )
129
129
130
+ XCTAssertTrue ( delegate. history. isEmpty)
130
131
XCTAssertNil ( delegate. receivedHead, " Expected not to have a response head, before `receiveResponseHead` " )
131
132
let responseHead = HTTPResponseHead (
132
133
version: . http1_1,
@@ -140,6 +141,10 @@ final class RequestBagTests: XCTestCase {
140
141
XCTAssertEqual ( responseHead, delegate. receivedHead)
141
142
XCTAssertNoThrow ( try XCTUnwrap ( delegate. backpressurePromise) . succeed ( ( ) ) )
142
143
XCTAssertTrue ( executor. signalledDemandForResponseBody)
144
+
145
+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
146
+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
147
+
143
148
executor. resetResponseStreamDemandSignal ( )
144
149
145
150
// we will receive 20 chunks with each 10 byteBuffers and 32 bytes
@@ -747,13 +752,15 @@ final class RequestBagTests: XCTestCase {
747
752
let executor = MockRequestExecutor ( eventLoop: embeddedEventLoop)
748
753
executor. runRequest ( bag)
749
754
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 " ]
756
760
)
761
+ bag. receiveResponseHead ( responseHead)
762
+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
763
+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
757
764
XCTAssertNil ( delegate. backpressurePromise)
758
765
XCTAssertTrue ( executor. signalledDemandForResponseBody)
759
766
executor. resetResponseStreamDemandSignal ( )
@@ -833,13 +840,15 @@ final class RequestBagTests: XCTestCase {
833
840
let executor = MockRequestExecutor ( eventLoop: embeddedEventLoop)
834
841
executor. runRequest ( bag)
835
842
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 " ]
842
848
)
849
+ bag. receiveResponseHead ( responseHead)
850
+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
851
+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
843
852
XCTAssertNil ( delegate. backpressurePromise)
844
853
XCTAssertFalse ( executor. signalledDemandForResponseBody)
845
854
XCTAssertTrue ( executor. isCancelled)
@@ -893,13 +902,15 @@ final class RequestBagTests: XCTestCase {
893
902
let executor = MockRequestExecutor ( eventLoop: embeddedEventLoop)
894
903
executor. runRequest ( bag)
895
904
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 " ]
902
910
)
911
+ bag. receiveResponseHead ( responseHead)
912
+ XCTAssertEqual ( delegate. history. map ( \. request. url) , [ request. url] )
913
+ XCTAssertEqual ( delegate. history. map ( \. response) , [ responseHead] )
903
914
XCTAssertNil ( delegate. backpressurePromise)
904
915
XCTAssertTrue ( executor. signalledDemandForResponseBody)
905
916
executor. resetResponseStreamDemandSignal ( )
@@ -1001,6 +1012,7 @@ class UploadCountingDelegate: HTTPClientResponseDelegate {
1001
1012
private( set) var hitDidReceiveBodyPart = 0
1002
1013
private( set) var hitDidReceiveError = 0
1003
1014
1015
+ private( set) var history : [ ( request: HTTPClient . Request , response: HTTPResponseHead ) ] = [ ]
1004
1016
private( set) var receivedHead : HTTPResponseHead ?
1005
1017
private( set) var lastBodyPart : ByteBuffer ?
1006
1018
private( set) var backpressurePromise : EventLoopPromise < Void > ?
@@ -1022,6 +1034,10 @@ class UploadCountingDelegate: HTTPClientResponseDelegate {
1022
1034
self . hitDidSendRequest += 1
1023
1035
}
1024
1036
1037
+ func didVisitURL( task: HTTPClient . Task < Void > , _ request: HTTPClient . Request , _ head: HTTPResponseHead ) {
1038
+ self . history. append ( ( request, head) )
1039
+ }
1040
+
1025
1041
func didReceiveHead( task: HTTPClient . Task < Void > , _ head: HTTPResponseHead ) -> EventLoopFuture < Void > {
1026
1042
self . receivedHead = head
1027
1043
return self . createBackpressurePromise ( )
0 commit comments