diff --git a/tests/src/actionContainers/ActionContainer.scala b/tests/src/actionContainers/ActionContainer.scala index 4366c5ddd58b61693440629c1e4f421850668aa3..d8bc7bf8150a48bf247b8fe7d3f63d301cd967d9 100644 --- a/tests/src/actionContainers/ActionContainer.scala +++ b/tests/src/actionContainers/ActionContainer.scala @@ -34,6 +34,7 @@ import scala.util.Try import org.scalatest.FlatSpec import org.scalatest.Matchers +import akka.actor.ActorSystem import common.WhiskProperties import spray.json.JsObject @@ -118,7 +119,7 @@ object ActionContainer { def filterSentinel(str: String) = str.replaceAll(sentinel, "").trim def withContainer(imageName: String, environment: Map[String, String] = Map.empty)( - code: ActionContainer => Unit): (String, String) = { + code: ActionContainer => Unit)(implicit actorSystem: ActorSystem): (String, String) = { val rand = { val r = Random.nextInt; if (r < 0) -r else r } val name = imageName.toLowerCase.replaceAll("""[^a-z]""", "") + rand val envArgs = environment.toSeq.map { @@ -136,8 +137,8 @@ object ActionContainer { // ...we create an instance of the mock container interface... val mock = new ActionContainer { - def init(value: JsValue) = syncPost(s"$ip:8080", "/init", value) - def run(value: JsValue) = syncPost(s"$ip:8080", "/run", value) + def init(value: JsValue) = syncPost(ip, 8080, "/init", value) + def run(value: JsValue) = syncPost(ip, 8080, "/run", value) } try { @@ -153,14 +154,31 @@ object ActionContainer { } } - private def syncPost(host: String, endPoint: String, content: JsValue): (Int, Option[JsObject]) = { - import whisk.common.HttpUtils - val connection = HttpUtils.makeHttpClient(30000, true) - val (code, bytes) = new HttpUtils(connection, host).dopost(endPoint, content, Map.empty) - val str = new java.lang.String(bytes) - val json = Try(str.parseJson.asJsObject).toOption - Try { connection.close() } - (code, json) + private def syncPost(host: String, port: Int, endPoint: String, content: JsValue)( + implicit actorSystem: ActorSystem): (Int, Option[JsObject]) = { + import whisk.common.NewHttpUtils + + import akka.http.scaladsl.model._ + import akka.http.scaladsl.marshalling._ + import akka.http.scaladsl.unmarshalling._ + import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ + import akka.stream.ActorMaterializer + + implicit val materializer = ActorMaterializer() + + val uri = Uri( + scheme = "http", + authority = Uri.Authority(host = Uri.Host(host), port = port), + path = Uri.Path(endPoint)) + + val f = for ( + entity <- Marshal(content).to[MessageEntity]; + request = HttpRequest(method = HttpMethods.POST, uri = uri, entity = entity); + response <- NewHttpUtils.singleRequest(request, 30.seconds, retryOnTCPErrors = true); + responseBody <- Unmarshal(response.entity).to[String] + ) yield (response.status.intValue, Try(responseBody.parseJson.asJsObject).toOption) + + Await.result(f, 1.minute) } private class ActionContainerImpl() extends ActionContainer { diff --git a/tests/src/actionContainers/ActionProxyContainerTests.scala b/tests/src/actionContainers/ActionProxyContainerTests.scala index 7b32a716e00c99c58d9a593a5bd33cfb327e50b7..ba0fd3b79476f0002157f03c13d6d1b6b5765196 100644 --- a/tests/src/actionContainers/ActionProxyContainerTests.scala +++ b/tests/src/actionContainers/ActionProxyContainerTests.scala @@ -26,8 +26,10 @@ import spray.json.JsObject import spray.json.JsString import spray.json.JsArray +import common.WskActorSystem + @RunWith(classOf[JUnitRunner]) -class ActionProxyContainerTests extends BasicActionRunnerTests { +class ActionProxyContainerTests extends BasicActionRunnerTests with WskActorSystem { override def withActionContainer(env: Map[String, String] = Map.empty)(code: ActionContainer => Unit) = { withContainer("openwhisk/dockerskeleton", env)(code) diff --git a/tests/src/actionContainers/DockerExampleContainerTests.scala b/tests/src/actionContainers/DockerExampleContainerTests.scala index d4ac399e6c8693edf97f9fa3547b48c1266a2d38..1dbcf7eff6359e87a6c8ecfa76234d0cf5f5e53b 100644 --- a/tests/src/actionContainers/DockerExampleContainerTests.scala +++ b/tests/src/actionContainers/DockerExampleContainerTests.scala @@ -24,8 +24,10 @@ import spray.json.JsNumber import spray.json.JsObject import spray.json.JsString +import common.WskActorSystem + @RunWith(classOf[JUnitRunner]) -class DockerExampleContainerTests extends ActionProxyContainerTestUtils { +class DockerExampleContainerTests extends ActionProxyContainerTestUtils with WskActorSystem { def withPythonContainer(code: ActionContainer => Unit) = withContainer("openwhisk/example")(code) diff --git a/tests/src/actionContainers/JavaActionContainerTests.scala b/tests/src/actionContainers/JavaActionContainerTests.scala index 101a420a8f268df72a5cc96fafdba009688dbfec..086fbc6ed0cb0839870ae9b3d71fe711a3bf8743 100644 --- a/tests/src/actionContainers/JavaActionContainerTests.scala +++ b/tests/src/actionContainers/JavaActionContainerTests.scala @@ -23,11 +23,12 @@ import org.scalatest.junit.JUnitRunner import spray.json._ import ActionContainer.withContainer +import common.WskActorSystem import collection.JavaConverters._ @RunWith(classOf[JUnitRunner]) -class JavaActionContainerTests extends FlatSpec with Matchers { +class JavaActionContainerTests extends FlatSpec with Matchers with WskActorSystem { // Helpers specific to javaaction def withJavaContainer(code: ActionContainer => Unit) = withContainer("whisk/javaaction")(code) diff --git a/tests/src/actionContainers/NodeJsActionContainerTests.scala b/tests/src/actionContainers/NodeJsActionContainerTests.scala index 5cf3c8c438663eab2ba18759031da817b178cff0..4ed7a8d99850f42b6428631272499801190ade30 100644 --- a/tests/src/actionContainers/NodeJsActionContainerTests.scala +++ b/tests/src/actionContainers/NodeJsActionContainerTests.scala @@ -19,10 +19,11 @@ import org.junit.runner.RunWith import org.scalatest.junit.JUnitRunner import ActionContainer.withContainer +import common.WskActorSystem import spray.json._ @RunWith(classOf[JUnitRunner]) -class NodeJsActionContainerTests extends BasicActionRunnerTests { +class NodeJsActionContainerTests extends BasicActionRunnerTests with WskActorSystem { lazy val nodejsContainerImageName = "whisk/nodejsaction" diff --git a/tests/src/actionContainers/PythonActionContainerTests.scala b/tests/src/actionContainers/PythonActionContainerTests.scala index 3ce9d742cf0fc23e4c7419447052d28b13beab8a..32f3b6d21bd9c2149fa8a14a60977193b63a26fc 100644 --- a/tests/src/actionContainers/PythonActionContainerTests.scala +++ b/tests/src/actionContainers/PythonActionContainerTests.scala @@ -22,9 +22,10 @@ import org.scalatest.junit.JUnitRunner import ActionContainer.withContainer import spray.json.JsObject import spray.json.JsString +import common.WskActorSystem @RunWith(classOf[JUnitRunner]) -class PythonActionContainerTests extends BasicActionRunnerTests { +class PythonActionContainerTests extends BasicActionRunnerTests with WskActorSystem { override def withActionContainer(env: Map[String, String] = Map.empty)(code: ActionContainer => Unit) = { withContainer("whisk/pythonaction", env)(code) diff --git a/tests/src/actionContainers/SwiftActionContainerTests.scala b/tests/src/actionContainers/SwiftActionContainerTests.scala index b586cd0d86edcc85b348caaf0be248beccf50947..44b15f5caf135dc04d1ea2b733e40350ee624320 100644 --- a/tests/src/actionContainers/SwiftActionContainerTests.scala +++ b/tests/src/actionContainers/SwiftActionContainerTests.scala @@ -23,8 +23,10 @@ import ActionContainer.withContainer import spray.json.JsObject import spray.json.JsString +import common.WskActorSystem + @RunWith(classOf[JUnitRunner]) -class SwiftActionContainerTests extends BasicActionRunnerTests { +class SwiftActionContainerTests extends BasicActionRunnerTests with WskActorSystem { // note: "out" will likely not be empty in some swift build as the compiler // prints status messages and there doesn't seem to be a way to quiet them