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 2018/12/03 21:13:14 UTC

[incubator-openwhisk-cli] branch master updated: Save Code Associated with Blackbox Actions (#388)

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-cli.git


The following commit(s) were added to refs/heads/master by this push:
     new ca2e413  Save Code Associated with Blackbox Actions (#388)
ca2e413 is described below

commit ca2e41326164a544c3a4ebeb2145256d3b0c1610
Author: James Dubee <jw...@us.ibm.com>
AuthorDate: Mon Dec 3 16:13:10 2018 -0500

    Save Code Associated with Blackbox Actions (#388)
    
    * Save Code Associated with Blackbox Actions
    
    * Scala formatting
    
    * Update Fake Blackbox Name
    
    * Update Test
    
    * Update Test
---
 commands/action.go                                 |  2 +-
 .../core/cli/test/WskCliBasicUsageTests.scala      | 94 +++++++++++-----------
 2 files changed, 50 insertions(+), 46 deletions(-)

diff --git a/commands/action.go b/commands/action.go
index e6429bc..d8dad83 100644
--- a/commands/action.go
+++ b/commands/action.go
@@ -692,7 +692,7 @@ func saveCode(action whisk.Action, filename string) (err error) {
 	exec = *action.Exec
 	runtime = strings.Split(exec.Kind, ":")[0]
 
-	if strings.ToLower(runtime) == BLACKBOX {
+	if strings.ToLower(runtime) == BLACKBOX && exec.Code == nil && *exec.Binary == false {
 		return cannotSaveImageError()
 	} else if strings.ToLower(runtime) == SEQUENCE {
 		return cannotSaveSequenceError()
diff --git a/tests/src/test/scala/org/apache/openwhisk/core/cli/test/WskCliBasicUsageTests.scala b/tests/src/test/scala/org/apache/openwhisk/core/cli/test/WskCliBasicUsageTests.scala
index c7681eb..ab4b4f6 100644
--- a/tests/src/test/scala/org/apache/openwhisk/core/cli/test/WskCliBasicUsageTests.scala
+++ b/tests/src/test/scala/org/apache/openwhisk/core/cli/test/WskCliBasicUsageTests.scala
@@ -1078,61 +1078,65 @@ class WskCliBasicUsageTests extends TestHelpers with WskTestHelpers {
   }
 
   it should "save action code to file" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
-    val name = "saveAction"
     val seqName = "seqName"
     val dockerName = "dockerName"
     val containerName =
       s"bogus${Random.alphanumeric.take(16).mkString.toLowerCase}"
-    val saveName = s"save-as-$name.js"
-    val badSaveName = s"bad-directory${File.separator}$saveName"
-
-    // Test for successful --save
-    assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, defaultAction)
-    }
-
-    val saveMsg = wsk.action.get(name, save = Some(true)).stdout
-
-    saveMsg should include(s"saved action code to ")
-
-    val savePath = saveMsg.split("ok: saved action code to ")(1).trim()
-    val saveFile = new File(savePath);
-
-    try {
-      saveFile.exists shouldBe true
+    val badSaveName = s"bad-directory${File.separator}action"
+
+    Seq(
+      ("saveAction", true, false, false),
+      ("saveAsAction", false, true, false),
+      ("dockerSaveAction", true, false, true),
+      ("dockerSaveAsAction", true, true, false)).foreach {
+      case (actionName, save, saveAs, blackbox) =>
+        assetHelper.withCleaner(wsk.action, actionName) { (action, _) =>
+          blackbox match {
+            case false => action.create(actionName, defaultAction, update = true)
+            case true  => action.create(actionName, defaultAction, update = true, docker = Some("bogus"))
+          }
+        }
 
-      // Test for failure saving file when it already exist
-      wsk.action
-        .get(name, save = Some(true), expectedExitCode = MISUSE_EXIT)
-        .stderr should include(s"The file '$name.js' already exists")
-    } finally {
-      saveFile.delete()
-    }
+        val saveMsg: String = if (save) {
+          wsk.action.get(actionName, save = Some(true)).stdout
+        } else {
+          wsk.action.get(actionName, saveAs = Some(s"save-as-$actionName")).stdout
+        }
 
-    // Test for successful --save-as
-    val saveAsMsg = wsk.action.get(name, saveAs = Some(saveName)).stdout
+        saveMsg should include(s"saved action code to ")
 
-    saveAsMsg should include(s"saved action code to ")
+        val savePath = saveMsg.split("ok: saved action code to ")(1).trim()
+        val saveFile = new File(savePath)
 
-    val saveAsPath = saveAsMsg.split("ok: saved action code to ")(1).trim()
-    val saveAsFile = new File(saveAsPath);
+        try {
+          saveFile.exists shouldBe true
 
-    try {
-      saveAsFile.exists shouldBe true
+          // Test for failure saving file when it already exist
+          if (save) {
+            if (blackbox) {
+              wsk.action
+                .get(actionName, save = Some(true), expectedExitCode = MISUSE_EXIT)
+                .stderr should include(s"The file '$actionName' already exists")
+            } else {
+              wsk.action
+                .get(actionName, save = Some(true), expectedExitCode = MISUSE_EXIT)
+                .stderr should include(s"The file '$actionName.js' already exists")
+            }
+          } else {
+            wsk.action
+              .get(actionName, saveAs = Some(s"save-as-$actionName"), expectedExitCode = MISUSE_EXIT)
+              .stderr should include(s"The file 'save-as-$actionName' already exists")
+          }
+        } finally {
+          saveFile.delete()
+        }
 
-      // Test for failure saving file when it already exist
-      wsk.action
-        .get(name, saveAs = Some(saveName), expectedExitCode = MISUSE_EXIT)
-        .stderr should include(s"The file '$saveName' already exists")
-    } finally {
-      saveAsFile.delete()
+        // Test for failure when using an invalid filename
+        wsk.action
+          .get(actionName, saveAs = Some(badSaveName), expectedExitCode = MISUSE_EXIT)
+          .stderr should include(s"Cannot create file '$badSaveName'")
     }
 
-    // Test for failure when using an invalid filename
-    wsk.action
-      .get(name, saveAs = Some(badSaveName), expectedExitCode = MISUSE_EXIT)
-      .stderr should include(s"Cannot create file '$badSaveName'")
-
     // Test for failure saving Docker images
     assetHelper.withCleaner(wsk.action, dockerName) { (action, _) =>
       action.create(dockerName, None, docker = Some(containerName))
@@ -1146,9 +1150,9 @@ class WskCliBasicUsageTests extends TestHelpers with WskTestHelpers {
       .get(dockerName, saveAs = Some(dockerName), expectedExitCode = MISUSE_EXIT)
       .stderr should include("Cannot save Docker images")
 
-    // Tes for failure saving sequences
+    // Test for failure saving sequences
     assetHelper.withCleaner(wsk.action, seqName) { (action, _) =>
-      action.create(seqName, Some(name), kind = Some("sequence"))
+      action.create(seqName, Some(dockerName), kind = Some("sequence"))
     }
 
     wsk.action