You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by du...@apache.org on 2017/12/09 06:23:04 UTC

[incubator-openwhisk-catalog] branch master updated: Update websocket test to use local websocket server (#250)

This is an automated email from the ASF dual-hosted git repository.

dubeejw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-catalog.git


The following commit(s) were added to refs/heads/master by this push:
     new ad24d4c  Update websocket test to use local websocket server (#250)
ad24d4c is described below

commit ad24d4ca7c8985122b9c93b2279065b0b25a6ef1
Author: Carlos Santana <cs...@gmail.com>
AuthorDate: Sat Dec 9 01:23:02 2017 -0500

    Update websocket test to use local websocket server (#250)
    
    * Update websocket test to use local websocket server
    
    * scala version is selected by gradle not travis
---
 .gitignore                                         |   7 +
 .scalafmt.conf                                     |   6 +
 .travis.yml                                        |   2 -
 settings.gradle                                    |   2 +-
 .../scala/packages/websocket/WebSocketTests.scala  | 174 ++++++++++++++-------
 5 files changed, 131 insertions(+), 60 deletions(-)

diff --git a/.gitignore b/.gitignore
index 879f234..b3c6415 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,10 @@ tests/.classpath
 tests/.gitignore
 tests/.project
 tests/.settings/
+
+# NodeJS
+node_modules/
+
+# IntelliJ
+.idea
+out/
\ No newline at end of file
diff --git a/.scalafmt.conf b/.scalafmt.conf
new file mode 100644
index 0000000..0dc41ec
--- /dev/null
+++ b/.scalafmt.conf
@@ -0,0 +1,6 @@
+style = intellij
+danglingParentheses = false
+maxColumn = 120
+docstrings = JavaDoc
+rewrite.rules = [SortImports]
+project.git = true
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index a15e4c4..edb2a67 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,6 @@
 sudo: required
 
 language: scala
-scala:
-   - 2.11.6
 
 services:
   - docker
diff --git a/settings.gradle b/settings.gradle
index 81f4288..093728f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -11,6 +11,6 @@ include 'tests'
 rootProject.name = 'openwhisk-catalog'
 
 gradle.ext.scala = [
-    version: '2.11.8',
+    version: '2.11.11',
     compileFlags: ['-feature', '-unchecked', '-deprecation', '-Xfatal-warnings', '-Ywarn-unused-import']
 ]
diff --git a/tests/src/test/scala/packages/websocket/WebSocketTests.scala b/tests/src/test/scala/packages/websocket/WebSocketTests.scala
index a9a1767..54353eb 100644
--- a/tests/src/test/scala/packages/websocket/WebSocketTests.scala
+++ b/tests/src/test/scala/packages/websocket/WebSocketTests.scala
@@ -17,81 +17,141 @@
 
 package packages.websocket
 
+import java.io.File
 import java.net.URI
 
 import scala.concurrent.duration.DurationInt
 import scala.language.postfixOps
-
 import org.junit.runner.RunWith
 import org.scalatest.BeforeAndAfterAll
 import org.scalatest.junit.JUnitRunner
-
-import common.TestHelpers
-import common.Wsk
-import common.WskProps
-import common.WskTestHelpers
+import common._
 import spray.json._
 import spray.json.DefaultJsonProtocol._
 
 @RunWith(classOf[JUnitRunner])
-class WebSocketTests
-    extends TestHelpers
-    with WskTestHelpers
-    with BeforeAndAfterAll {
-
-    implicit val wskprops = WskProps()
-    val wsk = new Wsk()
-
-    val websocketSendAction = "/whisk.system/websocket/send"
-
-    behavior of "Websocket action"
-
-    /**
-     * This test requires a websocket server running on the given URI.
-     */
-    var serverURI: URI = new URI("ws://169.46.21.246:80")
-
-    ignore should "Use the websocket action to send a payload" in {
-        val uniquePayload = s"The cow says ${System.currentTimeMillis()}".toJson
-        val run = wsk.action.invoke(websocketSendAction, Map("uri" -> serverURI.toString.toJson, "payload" -> uniquePayload))
-        withActivation(wsk.activation, run, 1 second, 1 second, 180 seconds) {
-            activation =>
-                activation.response.success shouldBe true
-                activation.response.result shouldBe Some(JsObject(
-                    "payload" -> uniquePayload))
-        }
+class WebSocketTests extends TestHelpers with WskTestHelpers with BeforeAndAfterAll {
+
+  implicit val wskprops: WskProps = WskProps()
+  val wsk = new Wsk()
+
+  val websocketSendAction = "/whisk.system/websocket/send"
+
+  val containerName = "websocketServerOW"
+  val userDir: String = System.getProperty("user.dir")
+  val websocketDir: String = userDir + "/dat/websocket"
+  val websocketHost: String = wskprops.apihost
+  val websocketPort = "20002"
+
+  behavior of "Websocket action"
+
+  /**
+   * This test requires a websocket server running on the given URI.
+   */
+  val serverURI: URI = new URI(s"ws://$websocketHost:$websocketPort")
+
+  it should "Use the websocket action to send a payload" in {
+    val uniquePayload = s"The cow says ${System.currentTimeMillis()}".toJson
+    val run =
+      wsk.action.invoke(websocketSendAction, Map("uri" -> serverURI.toString.toJson, "payload" -> uniquePayload))
+    withActivation(wsk.activation, run, 1 second, 1 second, 180 seconds) { activation =>
+      activation.response.success shouldBe true
+      activation.response.result shouldBe Some(JsObject("payload" -> uniquePayload))
     }
+  }
 
-    it should "Return an error due to a malformed URI" in {
-        val badURI = new URI("ws://localhost:80")
+  it should "Return an error due to a malformed URI" in {
+    val badURI = new URI("ws://localhost:80")
 
-        val run = wsk.action.invoke(websocketSendAction, Map("uri" -> badURI.toString.toJson, "payload" -> "This is the message to send".toJson))
-        withActivation(wsk.activation, run) {
-            activation =>
-                activation.response.success shouldBe false
+    val run = wsk.action.invoke(
+      websocketSendAction,
+      Map("uri" -> badURI.toString.toJson, "payload" -> "This is the message to send".toJson))
+    withActivation(wsk.activation, run) { activation =>
+      activation.response.success shouldBe false
 
-                // the exact error content comes from the ws Node module
-                activation.response.result.get.fields.get("error") shouldBe defined
-        }
+      // the exact error content comes from the ws Node module
+      activation.response.result.get.fields.get("error") shouldBe defined
     }
+  }
 
-    it should "Require a payload parameter" in {
-        val run = wsk.action.invoke(websocketSendAction, Map("uri" -> serverURI.toString.toJson))
-        withActivation(wsk.activation, run) {
-            activation =>
-                activation.response.success shouldBe false
-                activation.response.result shouldBe Some(JsObject(
-                    "error" -> "You must specify a payload parameter.".toJson))
-        }
+  it should "Require a payload parameter" in {
+    val run = wsk.action.invoke(websocketSendAction, Map("uri" -> serverURI.toString.toJson))
+    withActivation(wsk.activation, run) { activation =>
+      activation.response.success shouldBe false
+      activation.response.result shouldBe Some(JsObject("error" -> "You must specify a payload parameter.".toJson))
     }
+  }
 
-    it should "Require a uri parameter" in {
-        val run = wsk.action.invoke(websocketSendAction, Map("payload" -> "This is the message to send".toJson))
-        withActivation(wsk.activation, run) {
-            activation =>
-                activation.response.success shouldBe false
-                activation.response.result shouldBe Some(JsObject(
-                    "error" -> "You must specify a uri parameter.".toJson))
-        }
+  it should "Require a uri parameter" in {
+    val run = wsk.action.invoke(websocketSendAction, Map("payload" -> "This is the message to send".toJson))
+    withActivation(wsk.activation, run) { activation =>
+      activation.response.success shouldBe false
+      activation.response.result shouldBe Some(JsObject("error" -> "You must specify a uri parameter.".toJson))
     }
+  }
+
+  override def beforeAll() {
+
+    val websocketServer =
+      """
+         | const WebSocket = require("ws");
+         | const wss = new WebSocket.Server({ port: 8080 });
+         | wss.on("connection", function connection(ws) {
+         |  ws.on("message", function incoming(message) {
+         |    ws.send(message);
+         |  });
+         | });
+         """.replace("\r", "").stripMargin.lines.mkString
+    TestUtils.runCmd(TestUtils.DONTCARE_EXIT, new File("."), "docker", "kill", containerName)
+    TestUtils.runCmd(TestUtils.DONTCARE_EXIT, new File("."), "docker", "rm", containerName)
+    TestUtils.runCmd(
+      0,
+      new File("."),
+      "docker",
+      "run",
+      "-d",
+      "-p",
+      "20002:8080",
+      "--name",
+      containerName,
+      "node",
+      "sh",
+      "-c",
+      s"npm install ws; echo '$websocketServer' | node")
+    sleepUntilContainerRunning()
+
+  }
+
+  def sleepUntilContainerRunning() {
+    var counter = 12
+    var running = false
+    do {
+      counter = counter - 1
+      val isdb2Running = TestUtils
+        .runCmd(
+          TestUtils.DONTCARE_EXIT,
+          new File("."),
+          "docker",
+          "exec",
+          "-t",
+          containerName,
+          "curl",
+          "http://localhost:8080",
+          "--connect-timeout",
+          "5")
+
+      if (isdb2Running.exitCode != 0) {
+        println("sleeping 5 seconds to wait for websocket server")
+        Thread.sleep(5000)
+      } else {
+        running = true
+      }
+    } while (counter > 0 && !running)
+    running shouldBe true
+  }
+
+  override def afterAll() {
+    TestUtils.runCmd(TestUtils.DONTCARE_EXIT, new File("."), "docker", "kill", containerName)
+    TestUtils.runCmd(TestUtils.DONTCARE_EXIT, new File("."), "docker", "rm", containerName)
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>'].