summaryrefslogtreecommitdiff
path: root/example/websockets3/app
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2019-09-16 12:21:10 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2019-09-16 12:21:33 +0800
commitb83eec01c8db8a8aa499d6c498ff85987005fe83 (patch)
tree6ec439541ac8636f9a138253f413e26b35c2c194 /example/websockets3/app
parent84ea971b1261919aca7b31635ddc7d0dca830fea (diff)
downloadcask-b83eec01c8db8a8aa499d6c498ff85987005fe83.tar.gz
cask-b83eec01c8db8a8aa499d6c498ff85987005fe83.tar.bz2
cask-b83eec01c8db8a8aa499d6c498ff85987005fe83.zip
0.2.80.2.8
Diffstat (limited to 'example/websockets3/app')
-rw-r--r--example/websockets3/app/src/Websockets3.scala21
-rw-r--r--example/websockets3/app/test/src/ExampleTests.scala75
2 files changed, 96 insertions, 0 deletions
diff --git a/example/websockets3/app/src/Websockets3.scala b/example/websockets3/app/src/Websockets3.scala
new file mode 100644
index 0000000..8368e0d
--- /dev/null
+++ b/example/websockets3/app/src/Websockets3.scala
@@ -0,0 +1,21 @@
+package app
+
+case class Websockets3()(implicit val log: cask.Logger) extends cask.Routes{
+ @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.WsActor.Text("") => channel.send(cask.WsActor.Close())
+ case cask.WsActor.Text(data) =>
+ channel.send(cask.WsActor.Text(userName + " " + data))
+ }
+ }
+ }
+
+ initialize()
+}
+
+object Websockets3Main extends cask.Main{
+ val allRoutes = Seq(Websockets3())
+}
diff --git a/example/websockets3/app/test/src/ExampleTests.scala b/example/websockets3/app/test/src/ExampleTests.scala
new file mode 100644
index 0000000..a595c4c
--- /dev/null
+++ b/example/websockets3/app/test/src/ExampleTests.scala
@@ -0,0 +1,75 @@
+package app
+
+import java.util.concurrent.atomic.AtomicInteger
+
+import org.asynchttpclient.ws.{WebSocket, WebSocketListener, WebSocketUpgradeHandler}
+import utest._
+
+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(Websockets3Main){ host =>
+ @volatile var out = List.empty[String]
+ val client = org.asynchttpclient.Dsl.asyncHttpClient();
+ try{
+
+ // 4. open websocket
+ val ws: WebSocket = client.prepareGet("ws://localhost:8080/connect/haoyi")
+ .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
+ new WebSocketListener() {
+
+ override def onTextFrame(payload: String, finalFragment: Boolean, rsv: Int) {
+ out = payload :: out
+ }
+
+ def onOpen(websocket: WebSocket) = ()
+
+ def onClose(websocket: WebSocket, code: Int, reason: String) = ()
+
+ def onError(t: Throwable) = ()
+ }).build()
+ ).get()
+
+ // 5. send messages
+ ws.sendTextFrame("hello")
+ ws.sendTextFrame("world")
+ ws.sendTextFrame("")
+ Thread.sleep(100)
+ out ==> List("haoyi world", "haoyi hello")
+
+ var error: String = ""
+ val cli2 = client.prepareGet("ws://localhost:8080/connect/nobody")
+ .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
+ new WebSocketListener() {
+
+ def onOpen(websocket: WebSocket) = ()
+
+ def onClose(websocket: WebSocket, code: Int, reason: String) = ()
+
+ def onError(t: Throwable) = {
+ error = t.toString
+ }
+ }).build()
+ ).get()
+
+ assert(error.contains("403"))
+
+ } finally{
+ client.close()
+ }
+ }
+ }
+}