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

Commit

Permalink
TestResponseResolver logic match HTTPStreamingParser (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
seabaylea authored Oct 2, 2017
1 parent 811940b commit f8516cc
Showing 1 changed file with 29 additions and 10 deletions.
39 changes: 29 additions & 10 deletions Tests/HTTPTests/Helpers/TestResponseResolver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,26 @@ class TestResponseResolver: HTTPResponseWriter {

var response: (status: HTTPResponseStatus, headers: HTTPHeaders)?
var responseBody: HTTPResponseBody?

///Flag to track whether our handler has told us not to call it anymore
private let _shouldStopProcessingBodyLock = DispatchSemaphore(value: 1)
private var _shouldStopProcessingBody: Bool = false
private var shouldStopProcessingBody: Bool {
get {
_shouldStopProcessingBodyLock.wait()
defer {
_shouldStopProcessingBodyLock.signal()
}
return _shouldStopProcessingBody
}
set {
_shouldStopProcessingBodyLock.wait()
defer {
_shouldStopProcessingBodyLock.signal()
}
_shouldStopProcessingBody = newValue
}
}

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

func resolveHandler(_ handler: HTTPRequestHandler) {
let chunkHandler = handler(request, self)
var stop = false
var finished = false
while !stop && !finished {
switch chunkHandler {
if shouldStopProcessingBody {
return
}
switch chunkHandler {
case .processBody(let handler):
handler(.chunk(data: self.requestBody, finishedProcessing: {
finished = true
}), &stop)
handler(.end, &stop)
_shouldStopProcessingBodyLock.wait()
handler(.chunk(data: self.requestBody, finishedProcessing: {self._shouldStopProcessingBodyLock.signal()}), &_shouldStopProcessingBody)
var dummy = false
handler(.end, &dummy)
case .discardBody:
finished = true
}
break
}
}

Expand Down

0 comments on commit f8516cc

Please sign in to comment.