diff --git a/s3/src/main/scala/akka/stream/alpakka/s3/impl/S3Stream.scala b/s3/src/main/scala/akka/stream/alpakka/s3/impl/S3Stream.scala index 3aa66ef89e..73ca63be55 100644 --- a/s3/src/main/scala/akka/stream/alpakka/s3/impl/S3Stream.scala +++ b/s3/src/main/scala/akka/stream/alpakka/s3/impl/S3Stream.scala @@ -95,11 +95,14 @@ private[alpakka] final class S3Stream(settings: S3Settings)(implicit system: Act val s3Headers = S3Headers(sse.fold[Seq[HttpHeader]](Seq.empty) { _.headersFor(GetObject) }) val future = request(s3Location, rangeOption = range, versionId = versionId, s3Headers = s3Headers) .map(response => response.withEntity(response.entity.withoutSizeLimit)) + .flatMap(entityForSuccess) val source = Source - .fromFuture(future.flatMap(entityForSuccess).map(_._1)) + .fromFuture(future.map(_._1)) .map(_.dataBytes) .flatMapConcat(identity) - val meta = future.map(resp ⇒ computeMetaData(resp.headers, resp.entity)) + val meta = future.map { + case (entity, headers) ⇒ computeMetaData(headers, entity) + } (source, meta) } diff --git a/s3/src/test/scala/akka/stream/alpakka/s3/scaladsl/S3SourceSpec.scala b/s3/src/test/scala/akka/stream/alpakka/s3/scaladsl/S3SourceSpec.scala index eb204a9ace..99cd7138d9 100644 --- a/s3/src/test/scala/akka/stream/alpakka/s3/scaladsl/S3SourceSpec.scala +++ b/s3/src/test/scala/akka/stream/alpakka/s3/scaladsl/S3SourceSpec.scala @@ -139,9 +139,9 @@ class S3SourceSpec extends S3WireMockBase with S3ClientIntegrationSpec { mock404s() - val result = s3Client + val (s3Strm, objMtdF) = s3Client .download("nonexisting_bucket", "nonexisting_file.xml") - ._1 + val result = s3Strm .map(_.utf8String) .runWith(Sink.head) @@ -149,6 +149,12 @@ class S3SourceSpec extends S3WireMockBase with S3ClientIntegrationSpec { e shouldBe a[S3Exception] e.asInstanceOf[S3Exception].code should equal("NoSuchKey") } + + whenReady(objMtdF.failed) { e => + e.printStackTrace() + e shouldBe a[S3Exception] + e.asInstanceOf[S3Exception].code should equal("NoSuchKey") + } } it should "fail if download using server side encryption returns 'Invalid Request'" in {