+str #18906 add Sink.headOption

This commit is contained in:
Konrad Malawski 2015-11-10 15:15:59 +01:00
parent 985e3b1c2f
commit 8650d0c473
8 changed files with 92 additions and 33 deletions

View file

@ -82,26 +82,19 @@ trait RouteTestResultComponent {
case s: HttpEntity.Strict () s
case HttpEntity.Default(contentType, contentLength, data)
val dataChunks = awaitAllElements(data);
{ () HttpEntity.Default(contentType, contentLength, Source(dataChunks)) }
val dataChunks = awaitAllElements(data); { () HttpEntity.Default(contentType, contentLength, Source(dataChunks)) }
case HttpEntity.CloseDelimited(contentType, data)
val dataChunks = awaitAllElements(data);
{ () HttpEntity.CloseDelimited(contentType, Source(dataChunks)) }
val dataChunks = awaitAllElements(data); { () HttpEntity.CloseDelimited(contentType, Source(dataChunks)) }
case HttpEntity.Chunked(contentType, chunks)
val dataChunks = awaitAllElements(chunks);
{ () HttpEntity.Chunked(contentType, Source(dataChunks)) }
case HttpEntity.Chunked(contentType, data)
val dataChunks = awaitAllElements(data); { () HttpEntity.Chunked(contentType, Source(dataChunks)) }
}
private def failNeitherCompletedNorRejected(): Nothing =
failTest("Request was neither completed nor rejected within " + timeout)
private def awaitAllElements[T](data: Source[T, _]): immutable.Seq[T] = {
data.grouped(100000).runWith(Sink.head).recover({
case e: NoSuchElementException Nil
})(ExecutionContexts.sameThreadExecutionContext)
.awaitResult(timeout)
}
private def awaitAllElements[T](data: Source[T, _]): immutable.Seq[T] =
data.grouped(100000).runWith(Sink.headOption).awaitResult(timeout).getOrElse(Nil)
}
}