Normalize initializer for all execs. (#1938)
* Normalize initializer for all execs.
* Handle empty code for blackbox.
* Do not include code if null.
diff --git a/core/javaAction/proxy/src/main/java/openwhisk/java/action/Proxy.java b/core/javaAction/proxy/src/main/java/openwhisk/java/action/Proxy.java
index 3dc9542..bdcbcab 100644
--- a/core/javaAction/proxy/src/main/java/openwhisk/java/action/Proxy.java
+++ b/core/javaAction/proxy/src/main/java/openwhisk/java/action/Proxy.java
@@ -80,7 +80,7 @@
JsonObject message = inputObject.getAsJsonObject("value");
String mainClass = message.getAsJsonPrimitive("main").getAsString();
- String base64Jar = message.getAsJsonPrimitive("jar").getAsString();
+ String base64Jar = message.getAsJsonPrimitive("code").getAsString();
// FIXME: this is obviously not very useful. The idea is that we
// will implement/use
diff --git a/tests/src/actionContainers/ActionContainer.scala b/tests/src/actionContainers/ActionContainer.scala
index fe68ff8..d2f2f76 100644
--- a/tests/src/actionContainers/ActionContainer.scala
+++ b/tests/src/actionContainers/ActionContainer.scala
@@ -54,7 +54,7 @@
def initPayload(code: String, main: String = "main") = {
JsObject("value" -> JsObject(
- "code" -> JsString(code),
+ "code" -> { if (code != null) JsString(code) else JsNull },
"main" -> JsString(main),
"binary" -> JsBoolean(Exec.isBinaryCode(code))))
}
diff --git a/tests/src/actionContainers/ActionProxyContainerTests.scala b/tests/src/actionContainers/ActionProxyContainerTests.scala
index 8584b85..7c1e5a2 100644
--- a/tests/src/actionContainers/ActionProxyContainerTests.scala
+++ b/tests/src/actionContainers/ActionProxyContainerTests.scala
@@ -122,6 +122,21 @@
})
}
+ it should "run sample with 'null' init" in {
+ val (out, err) = withActionContainer() { c =>
+ val (initCode, _) = c.init(initPayload(null))
+ initCode should be(200)
+
+ val (runCode, out) = c.run(JsObject())
+ runCode should be(200)
+ out should be(Some(JsObject("error" -> JsString("This is a stub action. Replace it with custom logic."))))
+ }
+
+ checkStreams(out, err, {
+ case (o, _) => o should include("This is a stub action")
+ })
+ }
+
it should "run sample with init that does nothing" in {
val (out, err) = withActionContainer() { c =>
val (initCode, _) = c.init(JsObject())
diff --git a/tests/src/actionContainers/JavaActionContainerTests.scala b/tests/src/actionContainers/JavaActionContainerTests.scala
index 5125b4c..1eba705 100644
--- a/tests/src/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/actionContainers/JavaActionContainerTests.scala
@@ -38,7 +38,7 @@
"value" -> JsObject(
"name" -> JsString("dummyAction"),
"main" -> JsString(mainClass),
- "jar" -> JsString(jar64)))
+ "code" -> JsString(jar64)))
behavior of "Java action"
diff --git a/tests/src/whisk/core/entity/test/SchemaTests.scala b/tests/src/whisk/core/entity/test/SchemaTests.scala
index 4cb0c7d..d250c58 100644
--- a/tests/src/whisk/core/entity/test/SchemaTests.scala
+++ b/tests/src/whisk/core/entity/test/SchemaTests.scala
@@ -337,14 +337,33 @@
val contents = b64.encodeToString("tarball".getBytes)
val json = Seq[JsObject](
JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> false.toJson),
- JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> true.toJson, "code" -> contents.toJson))
+ JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> true.toJson, "code" -> contents.toJson),
+ JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> true.toJson, "code" -> contents.toJson, "main" -> "naim".toJson))
val execs = json.map { e => Exec.serdes.read(e) }
- assert(execs(0) == Exec.bb("container1") && json(0).compactPrint == Exec.bb("container1").toString)
- assert(execs(1) == Exec.bb("container1", contents) && json(1).compactPrint == Exec.bb("container1", contents).toString)
- assert(execs(0) == Exec.serdes.read(JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> false.toJson, "code" -> " ".toJson)))
- assert(execs(0) == Exec.serdes.read(JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> false.toJson, "code" -> "".toJson)))
+ execs(0) shouldBe Exec.bb("container1")
+ execs(1) shouldBe Exec.bb("container1", contents)
+ execs(2) shouldBe Exec.bb("container1", contents, Some("naim"))
+
+ json(0).compactPrint shouldBe Exec.bb("container1").toString
+ json(1).compactPrint shouldBe Exec.bb("container1", contents).toString
+ json(2).compactPrint shouldBe Exec.bb("container1", contents, Some("naim")).toString
+
+ execs(0) shouldBe Exec.serdes.read(JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> false.toJson, "code" -> " ".toJson))
+ execs(0) shouldBe Exec.serdes.read(JsObject("kind" -> "blackbox".toJson, "image" -> "container1".toJson, "binary" -> false.toJson, "code" -> "".toJson))
+ }
+
+ it should "exclude undefined code in whisk action initializer" in {
+ WhiskAction(EntityPath("a"), EntityName("b"), Exec.bb("container1")).containerInitializer shouldBe {
+ Some(JsObject("name" -> "b".toJson, "binary" -> false.toJson, "main" -> "main".toJson))
+ }
+ WhiskAction(EntityPath("a"), EntityName("b"), Exec.bb("container1", "xyz")).containerInitializer shouldBe {
+ Some(JsObject("name" -> "b".toJson, "binary" -> false.toJson, "main" -> "main".toJson, "code" -> "xyz".toJson))
+ }
+ WhiskAction(EntityPath("a"), EntityName("b"), Exec.bb("container1", "", Some("naim"))).containerInitializer shouldBe {
+ Some(JsObject("name" -> "b".toJson, "binary" -> false.toJson, "main" -> "naim".toJson))
+ }
}
it should "reject malformed JSON" in {