NodeJS container support for alternative entry points.
The container itself was already supporting it. This commit adds tests.
diff --git a/tests/src/actionContainers/ActionContainer.scala b/tests/src/actionContainers/ActionContainer.scala
index c5350a3..1937b3f 100644
--- a/tests/src/actionContainers/ActionContainer.scala
+++ b/tests/src/actionContainers/ActionContainer.scala
@@ -54,7 +54,7 @@
trait ActionProxyContainerTestUtils extends FlatSpec with Matchers {
import ActionContainer.{ filterSentinel, sentinel }
- def initPayload(code: String) = JsObject("value" -> JsObject("code" -> JsString(code)))
+ def initPayload(code: String, main: String = "main") = JsObject("value" -> JsObject("code" -> JsString(code), "main" -> JsString(main)))
def runPayload(args: JsValue, other: Option[JsObject] = None) = {
JsObject(Map("value" -> args) ++ (other map { _.fields } getOrElse Map()))
}
diff --git a/tests/src/actionContainers/JavaActionContainerTests.scala b/tests/src/actionContainers/JavaActionContainerTests.scala
index 876f0b4..c8f6c84 100644
--- a/tests/src/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/actionContainers/JavaActionContainerTests.scala
@@ -33,7 +33,8 @@
// Helpers specific to javaaction
def withJavaContainer(code: ActionContainer => Unit, env: Map[String, String] = Map.empty) = withContainer("javaaction", env)(code)
- def initPayload(mainClass: String, jar64: String) = JsObject(
+
+ override def initPayload(mainClass: String, jar64: String) = JsObject(
"value" -> JsObject(
"name" -> JsString("dummyAction"),
"main" -> JsString(mainClass),
diff --git a/tests/src/actionContainers/NodeJsActionContainerTests.scala b/tests/src/actionContainers/NodeJsActionContainerTests.scala
index f33e3e2..00cbf25 100644
--- a/tests/src/actionContainers/NodeJsActionContainerTests.scala
+++ b/tests/src/actionContainers/NodeJsActionContainerTests.scala
@@ -41,14 +41,14 @@
def exec(code: String): NodeJSAbstractExec = NodeJSExec(code)
- override def initPayload(code: String) = {
+ override def initPayload(code: String, main: String = "main") = {
val e = exec(code)
JsObject(
"value" -> JsObject(
"name" -> JsString("dummyAction"),
"code" -> JsString(e.code),
"binary" -> JsBoolean(e.binary),
- "main" -> JsString("main")))
+ "main" -> JsString(main)))
}
behavior of nodejsContainerImageName
@@ -513,18 +513,20 @@
})
}
+ val examplePackageDotJson: String = """
+ | {
+ | "name": "wskaction",
+ | "version": "1.0.0",
+ | "description": "An OpenWhisk action as an npm package.",
+ | "main": "index.js",
+ | "author": "info@openwhisk.org",
+ | "license": "Apache-2.0"
+ | }
+ """.stripMargin
+
it should "support zip-encoded npm package actions" in {
val srcs = Seq(
- Seq("package.json") -> """
- | {
- | "name": "wskaction",
- | "version": "1.0.0",
- | "description": "An OpenWhisk action as an npm package.",
- | "main": "index.js",
- | "author": "info@openwhisk.org",
- | "license": "Apache-2.0"
- | }
- """.stripMargin,
+ Seq("package.json") -> examplePackageDotJson,
Seq("index.js") -> """
| exports.main = function (args) {
| var name = typeof args["name"] === "string" ? args["name"] : "stranger";
@@ -587,4 +589,37 @@
(o + e).toLowerCase should include("module_not_found")
})
}
+
+ it should "support actions using non-default entry point" in {
+ val (out, err) = withNodeJsContainer { c =>
+ val code = """
+ | function niam(args) {
+ | return { result: "it works" };
+ | }
+ """.stripMargin
+
+ c.init(initPayload(code, main = "niam"))._1 should be(200)
+ val (runCode, runRes) = c.run(runPayload(JsObject()))
+ runRes.get.fields.get("result") shouldBe Some(JsString("it works"))
+ }
+ }
+
+ it should "support zipped actions using non-default entry point" in {
+ val srcs = Seq(
+ Seq("package.json") -> examplePackageDotJson,
+ Seq("index.js") -> """
+ | exports.niam = function (args) {
+ | return { result: "it works" };
+ | }
+ """.stripMargin)
+
+ val code = ZipBuilder.mkBase64Zip(srcs)
+
+ val (out, err) = withNodeJsContainer { c =>
+ c.init(initPayload(code, main = "niam"))._1 should be(200)
+
+ val (runCode, runRes) = c.run(runPayload(JsObject()))
+ runRes.get.fields.get("result") shouldBe Some(JsString("it works"))
+ }
+ }
}