diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2019-10-09 10:44:14 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2019-10-09 10:47:20 +0800 |
commit | 0f0f945abd365c9f6f83b3d315cea30eacb6ed51 (patch) | |
tree | 4b812b4f6650a42056aa31c2f712b3d7e4125925 /example | |
parent | e21d5ab3526937619c59dd01114b48521eee9d26 (diff) | |
download | cask-0f0f945abd365c9f6f83b3d315cea30eacb6ed51.tar.gz cask-0f0f945abd365c9f6f83b3d315cea30eacb6ed51.tar.bz2 cask-0f0f945abd365c9f6f83b3d315cea30eacb6ed51.zip |
Add test to verify `compress` decorator is properly passing through irrelevant results
Diffstat (limited to 'example')
-rw-r--r-- | example/websockets4/app/src/Websockets4.scala | 22 | ||||
-rw-r--r-- | example/websockets4/app/test/src/ExampleTests.scala | 51 | ||||
-rw-r--r-- | example/websockets4/build.sc | 17 |
3 files changed, 90 insertions, 0 deletions
diff --git a/example/websockets4/app/src/Websockets4.scala b/example/websockets4/app/src/Websockets4.scala new file mode 100644 index 0000000..f275746 --- /dev/null +++ b/example/websockets4/app/src/Websockets4.scala @@ -0,0 +1,22 @@ +package app + +case class Websockets4()(implicit val log: cask.Logger) extends cask.Routes{ + @cask.decorators.compress // make sure compress decorator passes non-requests through correctly + @cask.websocket("/connect/:userName") + def showUserProfile(userName: String): cask.WebsocketResult = { + if (userName != "haoyi") cask.Response("", statusCode = 403) + else cask.WsHandler { channel => + cask.WsActor { + case cask.Ws.Text("") => channel.send(cask.Ws.Close()) + case cask.Ws.Text(data) => + channel.send(cask.Ws.Text(userName + " " + data)) + } + } + } + + initialize() +} + +object Websockets4Main extends cask.Main{ + val allRoutes = Seq(Websockets4()) +} diff --git a/example/websockets4/app/test/src/ExampleTests.scala b/example/websockets4/app/test/src/ExampleTests.scala new file mode 100644 index 0000000..cd33bb4 --- /dev/null +++ b/example/websockets4/app/test/src/ExampleTests.scala @@ -0,0 +1,51 @@ +package app + +import java.util.concurrent.atomic.AtomicInteger + +import org.asynchttpclient.ws.{WebSocket, WebSocketListener, WebSocketUpgradeHandler} +import utest._ +import concurrent.ExecutionContext.Implicits.global +import cask.Logger.Console.globalLogger +object ExampleTests extends TestSuite{ + + + def withServer[T](example: cask.main.Main)(f: String => T): T = { + val server = io.undertow.Undertow.builder + .addHttpListener(8080, "localhost") + .setHandler(example.defaultHandler) + .build + server.start() + val res = + try f("http://localhost:8080") + finally server.stop() + res + } + + val tests = Tests{ + test("Websockets") - withServer(Websockets4Main){ host => + @volatile var out = List.empty[String] + // 4. open websocket + val ws = cask.WsClient.connect("ws://localhost:8080/connect/haoyi"){ + case cask.Ws.Text(s) => out = s :: out + } + + try { + // 5. send messages + ws.send(cask.Ws.Text("hello")) + ws.send(cask.Ws.Text("world")) + ws.send(cask.Ws.Text("")) + Thread.sleep(100) + out ==> List("haoyi world", "haoyi hello") + + var error: String = "" + val ws2 = cask.WsClient.connect("ws://localhost:8080/connect/nobody") { + case cask.Ws.Text(s) => out = s :: out + case cask.Ws.Error(t) => error += t.toString + case cask.Ws.Close(code, reason) => error += reason + } + + assert(error.contains("403")) + }finally ws.close() + } + } +} diff --git a/example/websockets4/build.sc b/example/websockets4/build.sc new file mode 100644 index 0000000..197e285 --- /dev/null +++ b/example/websockets4/build.sc @@ -0,0 +1,17 @@ +import mill._, scalalib._ + + +trait AppModule extends ScalaModule{ + def scalaVersion = "2.13.0" + def ivyDeps = Agg[Dep]( + ) + object test extends Tests{ + def testFrameworks = Seq("utest.runner.Framework") + + def ivyDeps = Agg( + ivy"com.lihaoyi::utest::0.7.1", + ivy"com.lihaoyi::requests::0.2.0", + ivy"org.asynchttpclient:async-http-client:2.5.2" + ) + } +}
\ No newline at end of file |