package io.vertx.lang.scala.http import io.vertx.core.file.OpenOptions import io.vertx.scala.core.Vertx import io.vertx.scala.core.streams.Pump import org.junit.runner.RunWith import org.scalatest.concurrent.AsyncAssertions import org.scalatest.junit.JUnitRunner import org.scalatest.{FlatSpec, Matchers} /** * @author Joern Bernhardt */ @RunWith(classOf[JUnitRunner]) class HttpDownloadTest extends FlatSpec with Matchers with AsyncAssertions { "A HttpClient" should "be able to download something" in { val w = new Waiter val vertx = Vertx.vertx() val httpServer = vertx.createHttpServer() val client = vertx.createHttpClient() val fs = vertx.fileSystem() val testFile = fs.openBlocking("testfile.txt", new OpenOptions()) val outFile = fs.openBlocking("testfile.out", new OpenOptions().setCreate(true)) println("hello") httpServer.requestHandler({ req => println("got a request") req.response().setChunked(true) Pump.pump(testFile, req.response()).start() println("pumping!") testFile.endHandler({() => println("pumped testFile into request") req.response().end() }) }) httpServer.listen(14432, { ar => assert(ar.succeeded()) println("server listens, sending a request") client.getNow(14432, "localhost", "/testfile", { response => println("client gets response") Pump.pump(response, outFile).start() response.endHandler({ () => println("response done") w.dismiss() }) }) }) w.await() } }