summaryrefslogtreecommitdiff
path: root/example
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-08-13 14:23:08 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-08-13 14:42:19 +0800
commit3ff5a5079080de524375cd43425c1515bf128274 (patch)
tree8f7829875430cf5363bb01d7de74acadeba9b876 /example
parent9b3ef949fdfe40e2ca0ad1305e2d6728ef6a4e07 (diff)
downloadcask-3ff5a5079080de524375cd43425c1515bf128274.tar.gz
cask-3ff5a5079080de524375cd43425c1515bf128274.tar.bz2
cask-3ff5a5079080de524375cd43425c1515bf128274.zip
Add test case for 1000 concurrent websocket connections (can't go higher due to client limitations)
Diffstat (limited to 'example')
-rw-r--r--example/websockets/app/test/src/ExampleTests.scala108
-rw-r--r--example/websockets/build.sc2
2 files changed, 90 insertions, 20 deletions
diff --git a/example/websockets/app/test/src/ExampleTests.scala b/example/websockets/app/test/src/ExampleTests.scala
index 01863e8..403fde0 100644
--- a/example/websockets/app/test/src/ExampleTests.scala
+++ b/example/websockets/app/test/src/ExampleTests.scala
@@ -1,8 +1,11 @@
package app
-import com.github.andyglow.websocket.WebsocketClient
+
+import org.asynchttpclient.ws.{WebSocket, WebSocketListener, WebSocketUpgradeHandler}
import utest._
object ExampleTests extends TestSuite{
+
+
def test[T](example: cask.main.BaseMain)(f: String => T): T = {
val server = io.undertow.Undertow.builder
.addHttpListener(8080, "localhost")
@@ -16,31 +19,98 @@ object ExampleTests extends TestSuite{
}
val tests = Tests{
- 'VariableRoutes - test(Websockets){ host =>
+ 'Websockets - test(Websockets){ host =>
@volatile var out = List.empty[String]
- val cli = WebsocketClient[String]("ws://localhost:8080/connect/haoyi") {
- case str => out = str :: out
- }
+ 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() {
- // 4. open websocket
- val ws = cli.open()
+ def onOpen(websocket: WebSocket) = ()
- // 5. send messages
- ws ! "hello"
- ws ! "world"
- ws ! ""
- Thread.sleep(100)
- out ==> List("haoyi world", "haoyi hello")
+ def onClose(websocket: WebSocket, code: Int, reason: String) = ()
- val cli2 = WebsocketClient[String]("ws://localhost:8080/connect/nobody") {
- case str => out = str :: out
+ def onError(t: Throwable) = {
+ error = t.toString
+ }
+ }).build()
+ ).get()
+
+ assert(error.contains("403"))
+
+ } finally{
+ client.close()
}
+ }
+
+ 'Websockets1000 - test(Websockets){ host =>
+ @volatile var out = List.empty[String]
+ val client = org.asynchttpclient.Dsl.asyncHttpClient();
+ val ws = Seq.fill(1000)(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
+ }
- val error =
- try cli2.open()
- catch{case e: Throwable => e.getMessage}
+ def onOpen(websocket: WebSocket) = ()
- assert(error.toString.contains("Invalid handshake response getStatus: 403 Forbidden"))
+ def onClose(websocket: WebSocket, code: Int, reason: String) = ()
+
+ def onError(t: Throwable) = ()
+ }).build()
+ ).get())
+
+ try{
+ // 4. open websocket
+
+ // 5. send messages
+ ws.foreach{ w =>
+ w.sendTextFrame("hello")
+ Thread.sleep(1)
+ }
+ ws.foreach { w =>
+ w.sendTextFrame("world")
+ Thread.sleep(1)
+ }
+ ws.foreach { w =>
+ w.sendTextFrame("")
+ Thread.sleep(1)
+ }
+ Thread.sleep(1500)
+ out.length ==> 2000
+
+ }finally{
+ client.close()
+ }
}
}
diff --git a/example/websockets/build.sc b/example/websockets/build.sc
index bc8cf26..9030281 100644
--- a/example/websockets/build.sc
+++ b/example/websockets/build.sc
@@ -13,7 +13,7 @@ trait AppModule extends ScalaModule{
def ivyDeps = Agg(
ivy"com.lihaoyi::utest::0.6.3",
ivy"com.lihaoyi::requests::0.1.2",
- ivy"com.github.andyglow::websocket-scala-client:0.2.4"
+ ivy"org.asynchttpclient:async-http-client:2.5.2"
)
}
} \ No newline at end of file