Skip to content
This repository was archived by the owner on Nov 23, 2021. It is now read-only.

Commit f8516cc

Browse files
authored
TestResponseResolver logic match HTTPStreamingParser (#58)
1 parent 811940b commit f8516cc

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

Tests/HTTPTests/Helpers/TestResponseResolver.swift

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,26 @@ class TestResponseResolver: HTTPResponseWriter {
1717

1818
var response: (status: HTTPResponseStatus, headers: HTTPHeaders)?
1919
var responseBody: HTTPResponseBody?
20+
21+
///Flag to track whether our handler has told us not to call it anymore
22+
private let _shouldStopProcessingBodyLock = DispatchSemaphore(value: 1)
23+
private var _shouldStopProcessingBody: Bool = false
24+
private var shouldStopProcessingBody: Bool {
25+
get {
26+
_shouldStopProcessingBodyLock.wait()
27+
defer {
28+
_shouldStopProcessingBodyLock.signal()
29+
}
30+
return _shouldStopProcessingBody
31+
}
32+
set {
33+
_shouldStopProcessingBodyLock.wait()
34+
defer {
35+
_shouldStopProcessingBodyLock.signal()
36+
}
37+
_shouldStopProcessingBody = newValue
38+
}
39+
}
2040

2141
init(request: HTTPRequest, requestBody: Data) {
2242
self.request = request
@@ -31,18 +51,17 @@ class TestResponseResolver: HTTPResponseWriter {
3151

3252
func resolveHandler(_ handler: HTTPRequestHandler) {
3353
let chunkHandler = handler(request, self)
34-
var stop = false
35-
var finished = false
36-
while !stop && !finished {
37-
switch chunkHandler {
54+
if shouldStopProcessingBody {
55+
return
56+
}
57+
switch chunkHandler {
3858
case .processBody(let handler):
39-
handler(.chunk(data: self.requestBody, finishedProcessing: {
40-
finished = true
41-
}), &stop)
42-
handler(.end, &stop)
59+
_shouldStopProcessingBodyLock.wait()
60+
handler(.chunk(data: self.requestBody, finishedProcessing: {self._shouldStopProcessingBodyLock.signal()}), &_shouldStopProcessingBody)
61+
var dummy = false
62+
handler(.end, &dummy)
4363
case .discardBody:
44-
finished = true
45-
}
64+
break
4665
}
4766
}
4867

0 commit comments

Comments
 (0)