You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by cs...@apache.org on 2017/09/18 14:55:44 UTC

[incubator-openwhisk-cli] 16/16: Add activation logs strip option. (#2620)

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

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

commit 2fc6865e26572128bda251b9dc131ac184ae1e5d
Author: David Liu <no...@126.com>
AuthorDate: Sat Sep 16 00:10:47 2017 +0800

    Add activation logs strip option. (#2620)
    
    * Add activation logs strip option.
    
    * Add proper test for strip option.
    
    * Remove dead code.
---
 .travis.yml                                        |   1 +
 Godeps/Godeps.json                                 |   2 +-
 commands/commands.go                               |   8 +
 commands/util.go                                   |   2 +-
 tests/dat/actions/corsHeaderMod.js                 |   2 +-
 tests/dat/actions/log.js                           |   7 +
 tests/dat/actions/multipleHeaders.js               |   2 +-
 tests/dat/actions/pngWeb.js                        |  13 ++
 tests/src/integration/common/wsk.go                |   8 +-
 tests/src/integration/common/wskprops.go           |  55 -------
 tests/src/integration/integration_test.go          |   8 +-
 .../apigw/healthtests/ApiGwEndToEndTests.scala     |   2 +-
 .../test/scala/system/basic/WskActionTests.scala   |  30 ++--
 .../test/scala/system/basic/WskBasicTests.scala    |  28 ++--
 .../test/scala/system/basic/WskConsoleTests.scala  |   4 +-
 .../test/scala/system/basic/WskPackageTests.scala  |   2 +-
 .../test/scala/system/basic/WskSequenceTests.scala |  25 ++-
 .../scala/whisk/core/cli/test/ApiGwTests.scala     |  46 +++---
 .../core/cli/test/WskActionSequenceTests.scala     |   4 +-
 .../whisk/core/cli/test/WskBasicUsageTests.scala   | 169 ++++++++-------------
 .../whisk/core/cli/test/WskEntitlementTests.scala  |  20 +--
 .../whisk/core/cli/test/WskWebActionsTests.scala   |  32 ++--
 wski18n/i18n_resources.go                          |  20 +--
 23 files changed, 214 insertions(+), 276 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index fe4ffe1..7864831 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,7 @@ matrix:
     include:
         - os: linux
           sudo: required
+          group: deprecated-2017Q3
           go: 1.8
           env:
             secure: "Br0fD9CAKm8gqyEuwmltNJd4dGJCxPpj6feugHlO+CFFwfE/+kJKkpTlsDuRfrUzUDlWiETNPf0XGSjvPFqZExnLCE9XQh2+XF6u+S3YBWfM+rbbyRVAK6BlTwmt0u3jRJ2JP7spedTGZA+qfIWI+UkwoOexo7NcqtMPLahiZzheaaad8y3J+crHQCrB/kPrhLqKVMEOkIbveFdfV2QLfCOWgqP8e1LGZhPZ2N4QcNo0iB5uI4ZyYszTZDniXFKxz7kBs4tl4ZQDqRHqL02qKPsjbvjrZp83ql+PbC2dpgXi9YpaDuBEqKKX1rTQP5ppcwbobot5U3ItHWzpXbLCdsWxvbde/0enjMmOF1wwl71hPYIf7PkQmNAWXRtL2Z1TguO/dKCeXBLDER4YDQ79GYpikAMqnrRLou4rsyZrNUzg8aHbELzAHppDSpqEJN8ymGgWgmWBT8yPaWVwN5CjPFO [...]
diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json
index eb1b09c..998bfb4 100644
--- a/Godeps/Godeps.json
+++ b/Godeps/Godeps.json
@@ -64,7 +64,7 @@
 			"Rev": "0ca9ea5df5451ffdf184b4428c902747c2c11cd7"
 		},
         {
-            "ImportPath": "github.com/apache/incubator-openwhisk-client-go/...",
+            "ImportPath": "github.com/apache/incubator-openwhisk-client-go/whisk",
             "Rev": "d9d11f0b21f8c32b3d78cd632d41a69a818be200"
         }
 	]
diff --git a/commands/commands.go b/commands/commands.go
index d15eae5..0914a73 100644
--- a/commands/commands.go
+++ b/commands/commands.go
@@ -64,6 +64,14 @@ func setupClientConfig(cmd *cobra.Command, args []string) (error){
         UserAgent:  UserAgent + "/1.0 (" + Properties.CLIVersion + ")",
     }
 
+    if len(clientConfig.Host) == 0 {
+        config, _ := whisk.GetDefaultConfig()
+        clientConfig.Host = config.Host
+        if len(clientConfig.Host) == 0 {
+            clientConfig.Host = "openwhisk.ng.bluemix.net"
+        }
+    }
+
     // Setup client
     client, err = whisk.NewClient(http.DefaultClient, clientConfig)
 
diff --git a/commands/util.go b/commands/util.go
index e148470..96511c0 100644
--- a/commands/util.go
+++ b/commands/util.go
@@ -274,7 +274,7 @@ func printFullActivationList(activations []whisk.Activation) {
 
 func printActivationLogs(logs []string) {
     for _, log := range logs {
-        if (flags.activation.strip){
+        if (Flags.activation.strip){
             fmt.Printf("%s\n", log[39:])
         } else {
             fmt.Printf("%s\n", log)
diff --git a/tests/dat/actions/corsHeaderMod.js b/tests/dat/actions/corsHeaderMod.js
index a658160..df9b704 100644
--- a/tests/dat/actions/corsHeaderMod.js
+++ b/tests/dat/actions/corsHeaderMod.js
@@ -7,6 +7,6 @@ function main() {
             "Location": "openwhisk.org",
             "Set-Cookie": "cookie-cookie-cookie"
         },
-        code: 200
+        statusCode: 200
     }
 }
diff --git a/tests/dat/actions/log.js b/tests/dat/actions/log.js
new file mode 100644
index 0000000..bfbd513
--- /dev/null
+++ b/tests/dat/actions/log.js
@@ -0,0 +1,7 @@
+/**
+ * Emit strings to stdout/stderr.
+ */
+function main() {
+    console.log("this is stdout");
+    console.error("this is stderr");
+}
diff --git a/tests/dat/actions/multipleHeaders.js b/tests/dat/actions/multipleHeaders.js
index 06712c1..f19e236 100644
--- a/tests/dat/actions/multipleHeaders.js
+++ b/tests/dat/actions/multipleHeaders.js
@@ -3,6 +3,6 @@ function main() {
         headers: {
             "Set-Cookie": ["a=b", "c=d"]
         },
-        code: 200
+        statusCode: 200
     }
 }
diff --git a/tests/dat/actions/pngWeb.js b/tests/dat/actions/pngWeb.js
new file mode 100644
index 0000000..3a644b0
--- /dev/null
+++ b/tests/dat/actions/pngWeb.js
@@ -0,0 +1,13 @@
+function main() {
+    var png = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAA/klEQVQYGWNgAAEHBxaG//+ZQMyyn581Pfas+cRQnf1LfF" +
+        "Ljf+62smUgcUbt0FA2Zh7drf/ffMy9vLn3RurrW9e5hCU11i2azfD4zu1/DHz8TAy/foUxsXBrFzHzC7r8+M9S1vn1qxQT07" +
+        "dDjL9fdemrqKxlYGT6z8AIMo6hgeUfA0PUvy9fGFh5GWK3z7vNxSWt++jX99+8SoyiGQwsW38w8PJEM7x5v5SJ8f+/xv8MDA" +
+        "zffv9hevfkWjiXBGMpMx+j2awovjcMjFztDO8+7GF49LkbZDCDeXLTWnZO7qDfn1/+5jbw/8pjYWS4wZLztXnuEuYTk2M+Mz" +
+        "Iw/AcA36VewaD6fzsAAAAASUVORK5CYII="
+
+    return {
+        statusCode: 200,
+        headers: {'content-type': 'image/png'},
+        body: png
+    }
+}
diff --git a/tests/src/integration/common/wsk.go b/tests/src/integration/common/wsk.go
index aa7d87f..d0323c3 100644
--- a/tests/src/integration/common/wsk.go
+++ b/tests/src/integration/common/wsk.go
@@ -19,6 +19,7 @@ package common
 import (
     "os"
     "os/exec"
+    "github.com/apache/incubator-openwhisk-client-go/whisk"
 )
 
 const cmd = "wsk"
@@ -28,7 +29,7 @@ type Wsk struct {
     Path string
     Arg []string
     Dir string
-    Wskprops *Wskprops
+    Wskprops *whisk.Wskprops
 }
 
 func NewWsk() *Wsk {
@@ -40,7 +41,10 @@ func NewWskWithPath(path string) *Wsk {
     dep.Path = cmd
     dep.Arg = []string{arg}
     dep.Dir = path
-    dep.Wskprops = GetWskprops()
+    pi := whisk.PropertiesImp{
+        OsPackage: whisk.OSPackageImp{},
+    }
+    dep.Wskprops, _ = whisk.GetDefaultWskProp(pi)
     return &dep
 }
 
diff --git a/tests/src/integration/common/wskprops.go b/tests/src/integration/common/wskprops.go
deleted file mode 100644
index ab6a728..0000000
--- a/tests/src/integration/common/wskprops.go
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package common
-
-import (
-    "github.com/spf13/viper"
-    "io/ioutil"
-    "os"
-)
-
-type Wskprops struct {
-    APIHost string
-    APIVersion string
-    AuthKey string
-    ControllerHost string
-    ControllerPort string
-}
-
-func GetWskprops() *Wskprops {
-    var dep Wskprops
-    dep.APIHost = ""
-    dep.AuthKey = ""
-    dep.APIVersion = "v1"
-
-    viper.SetConfigName("whisk")
-    viper.AddConfigPath(os.Getenv("OPENWHISK_HOME"))
-
-    err := viper.ReadInConfig()
-    if err == nil {
-        authPath := viper.GetString("testing.auth")
-
-        b, err := ioutil.ReadFile(authPath)
-        if err == nil {
-            dep.AuthKey = string(b)
-        }
-        dep.APIHost = viper.GetString("controller.hosts")
-        dep.ControllerHost = viper.GetString("controller.hosts")
-        dep.ControllerPort = viper.GetString("controller.host.basePort")
-    }
-    return &dep
-}
diff --git a/tests/src/integration/integration_test.go b/tests/src/integration/integration_test.go
index f2edbcb..7c377b9 100644
--- a/tests/src/integration/integration_test.go
+++ b/tests/src/integration/integration_test.go
@@ -25,6 +25,7 @@ import (
     "github.com/apache/incubator-openwhisk-cli/tests/src/integration/common"
     "os"
     "strings"
+    "fmt"
 )
 
 var invalidArgs []common.InvalidArg
@@ -341,6 +342,7 @@ func TestSetAPIHostAuthNamespace(t *testing.T) {
     namespace, _ := wsk.ListNamespaces()
     namespaces := strings.Split(strings.TrimSpace(string(namespace)), "\n")
     expectedNamespace := string(namespaces[len(namespaces) - 1])
+    fmt.Println(wsk.Wskprops.APIHost)
     if (wsk.Wskprops.APIHost != "" && wsk.Wskprops.APIHost != "") {
         stdout, err := wsk.RunCommand("property", "set", "--apihost", wsk.Wskprops.APIHost,
             "--auth", wsk.Wskprops.AuthKey, "--namespace", expectedNamespace)
@@ -364,7 +366,7 @@ func TestShowAPIBuildVersion(t *testing.T) {
     assert.Equal(t, os.Getenv("WSK_CONFIG_FILE"), tmpProp, "The environment variable WSK_CONFIG_FILE has not been set.")
 
     stdout, err := wsk.RunCommand("property", "set", "--apihost", wsk.Wskprops.APIHost,
-        "--apiversion", wsk.Wskprops.APIVersion)
+        "--apiversion", wsk.Wskprops.Apiversion)
     assert.Equal(t, nil, err, "The command property set --apihost --apiversion failed to run.")
     stdout, err = wsk.RunCommand("property", "get", "-i", "--apibuild")
     assert.Equal(t, nil, err, "The command property get -i --apibuild failed to run.")
@@ -402,7 +404,7 @@ func TestShowAPIBuildVersionHTTP(t *testing.T) {
     os.Setenv("WSK_CONFIG_FILE", tmpProp)
     assert.Equal(t, os.Getenv("WSK_CONFIG_FILE"), tmpProp, "The environment variable WSK_CONFIG_FILE has not been set.")
 
-    apihost := "http://" + wsk.Wskprops.ControllerHost + ":" + wsk.Wskprops.ControllerPort
+    apihost := wsk.Wskprops.APIHost
     stdout, err := wsk.RunCommand("property", "set", "--apihost", apihost)
     assert.Equal(t, nil, err, "The command property set --apihost failed to run.")
     stdout, err = wsk.RunCommand("property", "get", "-i", "--apibuild")
@@ -425,7 +427,7 @@ func TestRejectAuthCommNoKey(t *testing.T) {
     assert.Equal(t, os.Getenv("WSK_CONFIG_FILE"), tmpProp, "The environment variable WSK_CONFIG_FILE has not been set.")
 
     stdout, err := wsk.RunCommand("list", "--apihost", wsk.Wskprops.APIHost,
-        "--apiversion", wsk.Wskprops.APIVersion)
+        "--apiversion", wsk.Wskprops.Apiversion)
     assert.NotEqual(t, nil, err, "The command list should fail to run.")
     assert.Contains(t, common.RemoveRedundentSpaces(string(stdout)), "usage.",
         "The output of the command does not contain \"usage.\".")
diff --git a/tests/src/test/scala/apigw/healthtests/ApiGwEndToEndTests.scala b/tests/src/test/scala/apigw/healthtests/ApiGwEndToEndTests.scala
index 4c95bf5..d9a94b4 100644
--- a/tests/src/test/scala/apigw/healthtests/ApiGwEndToEndTests.scala
+++ b/tests/src/test/scala/apigw/healthtests/ApiGwEndToEndTests.scala
@@ -86,7 +86,7 @@ class ApiGwEndToEndTests
       println("cli namespace: " + clinamespace)
 
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo-web-http.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo-web-http.js")
       wsk.action.create(
         name = actionName,
         artifact = Some(file),
diff --git a/tests/src/test/scala/system/basic/WskActionTests.scala b/tests/src/test/scala/system/basic/WskActionTests.scala
index fb65f2c..519f50b 100644
--- a/tests/src/test/scala/system/basic/WskActionTests.scala
+++ b/tests/src/test/scala/system/basic/WskActionTests.scala
@@ -48,7 +48,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "invoke an action returning a promise" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "hello promise"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("helloPromise.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("helloPromise.js")))
     }
 
     val run = wsk.action.invoke(name)
@@ -62,7 +62,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "invoke an action with a space in the name" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "hello Async"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("helloAsync.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("helloAsync.js")))
     }
 
     val run = wsk.action.invoke(name, Map("payload" -> testString.toJson))
@@ -80,7 +80,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
       action.create(
         name,
-        Some(TestUtils.getTestActionFilename("printParams.js")),
+        Some(TestCLIUtils.getTestActionFilename("printParams.js")),
         parameters = params.mapValues(_.toJson))
     }
 
@@ -107,7 +107,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
     }
 
     assetHelper.withCleaner(wsk.action, fullQualifiedName) {
-      val file = Some(TestUtils.getTestActionFilename("wc.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("wc.js"))
       (action, _) =>
         action.create(fullQualifiedName, file)
     }
@@ -132,7 +132,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
       val annots = Map("b" -> "B".toJson)
 
       assetHelper.withCleaner(wsk.action, origActionName) {
-        val file = Some(TestUtils.getTestActionFilename("wc.js"))
+        val file = Some(TestCLIUtils.getTestActionFilename("wc.js"))
         (action, _) =>
           action.create(origActionName, file, parameters = params, annotations = annots)
       }
@@ -171,7 +171,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
         JsObject("key" -> JsString("exec"), "value" -> JsString("nodejs:6")))
 
       assetHelper.withCleaner(wsk.action, origName) {
-        val file = Some(TestUtils.getTestActionFilename("echo.js"))
+        val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
         (action, _) =>
           action.create(origName, file, parameters = origParams, annotations = origAnnots)
       }
@@ -190,7 +190,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "recreate and invoke a new action with different code" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "recreatedAction"
     assetHelper.withCleaner(wsk.action, name, false) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("wc.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("wc.js")))
     }
 
     val run1 = wsk.action.invoke(name, Map("payload" -> testString.toJson))
@@ -201,7 +201,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
 
     wsk.action.delete(name)
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("hello.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("hello.js")))
     }
 
     val run2 = wsk.action.invoke(name, Map("payload" -> testString.toJson))
@@ -214,7 +214,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "fail to invoke an action with an empty file" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "empty"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("empty.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("empty.js")))
     }
     val run = wsk.action.invoke(name)
     withActivation(wsk.activation, run) { activation =>
@@ -226,7 +226,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "create an action with an empty file" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "empty"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("empty.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("empty.js")))
     }
     val rr = wsk.action.get(name)
     wsk.parseJsonString(rr.stdout).getFieldPath("exec", "code") shouldBe Some(JsString(""))
@@ -237,10 +237,10 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
     val child = "wc"
 
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("wcbin.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("wcbin.js")))
     }
     assetHelper.withCleaner(wsk.action, child) { (action, _) =>
-      action.create(child, Some(TestUtils.getTestActionFilename("wc.js")))
+      action.create(child, Some(TestCLIUtils.getTestActionFilename("wc.js")))
     }
 
     val run = wsk.action.invoke(name, Map("payload" -> testString.toJson), blocking = true)
@@ -255,7 +255,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "blocking invoke an asynchronous action" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "helloAsync"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("helloAsync.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("helloAsync.js")))
     }
 
     val run = wsk.action.invoke(name, Map("payload" -> testString.toJson), blocking = true)
@@ -281,7 +281,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   it should "not be able to use 'ping' in an action" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "ping"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("ping.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("ping.js")))
     }
 
     val run = wsk.action.invoke(name, Map("payload" -> "google.com".toJson))
@@ -294,7 +294,7 @@ class WskActionTests extends TestHelpers with WskTestHelpers with JsHelpers {
   ignore should "support UTF-8 as input and output format" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "utf8Test"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("hello.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("hello.js")))
     }
 
     val utf8 = "«ταБЬℓσö»: 1<2 & 4+1>³, now 20%€§$ off!"
diff --git a/tests/src/test/scala/system/basic/WskBasicTests.scala b/tests/src/test/scala/system/basic/WskBasicTests.scala
index 4ee00cb..f206e64 100644
--- a/tests/src/test/scala/system/basic/WskBasicTests.scala
+++ b/tests/src/test/scala/system/basic/WskBasicTests.scala
@@ -41,7 +41,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
 
   implicit val wskprops = WskProps()
   val wsk = new Wsk
-  val defaultAction = Some(TestUtils.getTestActionFilename("hello.js"))
+  val defaultAction = Some(TestCLIUtils.getTestActionFilename("hello.js"))
 
   behavior of "Wsk CLI"
 
@@ -185,7 +185,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
 
   it should "create, update, get and list an action" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "createAndUpdate"
-    val file = Some(TestUtils.getTestActionFilename("hello.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
     val params = Map("a" -> "A".toJson)
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
       action.create(name, file, parameters = params)
@@ -204,7 +204,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
 
   it should "reject create of an action that already exists" in withAssetCleaner(wskprops) {
     val name = "dupeAction"
-    val file = Some(TestUtils.getTestActionFilename("echo.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
 
     (wp, assetHelper) =>
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
@@ -256,7 +256,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
       assetHelper.withCleaner(wsk.action, name) {
         // this docker image will be need to be pulled from dockerhub and hence has to be published there first
         (action, _) =>
-          action.create(name, Some(TestUtils.getTestActionFilename("blackbox.zip")), kind = Some("native"))
+          action.create(name, Some(TestCLIUtils.getTestActionFilename("blackbox.zip")), kind = Some("native"))
       }
 
       val run = wsk.action.invoke(name, Map())
@@ -271,8 +271,8 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
 
   it should "create, and invoke an action using a parameter file" in withAssetCleaner(wskprops) {
     val name = "paramFileAction"
-    val file = Some(TestUtils.getTestActionFilename("argCheck.js"))
-    val argInput = Some(TestUtils.getTestActionFilename("validInput2.json"))
+    val file = Some(TestCLIUtils.getTestActionFilename("argCheck.js"))
+    val argInput = Some(TestCLIUtils.getTestActionFilename("validInput2.json"))
 
     (wp, assetHelper) =>
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
@@ -332,7 +332,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "MALFORMED"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("malformed.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("malformed.js")))
       }
 
       val run = wsk.action.invoke(name, Map("payload" -> "whatever".toJson))
@@ -351,7 +351,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
     val boolErrInput = Map("error" -> true.toJson)
 
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("echo.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("echo.js")))
     }
 
     Seq(strErrInput, numErrInput, boolErrInput) foreach { input =>
@@ -374,7 +374,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "errorResponseObject"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("asyncError.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("asyncError.js")))
       }
 
       val stderr = wsk.action.invoke(name, blocking = true, expectedExitCode = 246).stderr
@@ -386,7 +386,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
   it should "invoke a blocking action and get only the result" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "basicInvoke"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("wc.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("wc.js")))
     }
 
     wsk.action
@@ -427,7 +427,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
       val name = "emptyJSONAction"
 
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("emptyJSONResult.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("emptyJSONResult.js")))
       }
 
       val stdout = wsk.action.invoke(name, result = true).stdout
@@ -440,7 +440,7 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
     val params = Map("payload" -> "100000".toJson)
     val allowedActionDuration = 120 seconds
     val res = assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("timeout.js")), timeout = Some(allowedActionDuration))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("timeout.js")), timeout = Some(allowedActionDuration))
       action.invoke(name, parameters = params, result = true, expectedExitCode = ACCEPTED)
     }
 
@@ -520,8 +520,8 @@ class WskBasicTests extends TestHelpers with WskTestHelpers {
 
   it should "create, and fire a trigger using a parameter file" in withAssetCleaner(wskprops) {
     val name = "paramFileTrigger"
-    val file = Some(TestUtils.getTestActionFilename("argCheck.js"))
-    val argInput = Some(TestUtils.getTestActionFilename("validInput2.json"))
+    val file = Some(TestCLIUtils.getTestActionFilename("argCheck.js"))
+    val argInput = Some(TestCLIUtils.getTestActionFilename("validInput2.json"))
 
     (wp, assetHelper) =>
       assetHelper.withCleaner(wsk.trigger, name) { (trigger, _) =>
diff --git a/tests/src/test/scala/system/basic/WskConsoleTests.scala b/tests/src/test/scala/system/basic/WskConsoleTests.scala
index 7abbeeb..5252d0a 100644
--- a/tests/src/test/scala/system/basic/WskConsoleTests.scala
+++ b/tests/src/test/scala/system/basic/WskConsoleTests.scala
@@ -58,7 +58,7 @@ class WskConsoleTests extends TestHelpers with WskTestHelpers {
     }
 
     assetHelper.withCleaner(wsk.action, fullActionName) { (action, _) =>
-      action.create(fullActionName, Some(TestUtils.getTestActionFilename("hello.js")))
+      action.create(fullActionName, Some(TestCLIUtils.getTestActionFilename("hello.js")))
     }
 
     val duration = Some(30 seconds)
@@ -73,7 +73,7 @@ class WskConsoleTests extends TestHelpers with WskTestHelpers {
   it should "show repeated activations" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "countdown"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("countdown.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("countdown.js")))
     }
 
     val start = Instant.now(Clock.systemUTC())
diff --git a/tests/src/test/scala/system/basic/WskPackageTests.scala b/tests/src/test/scala/system/basic/WskPackageTests.scala
index 1fae059..40c93e6 100644
--- a/tests/src/test/scala/system/basic/WskPackageTests.scala
+++ b/tests/src/test/scala/system/basic/WskPackageTests.scala
@@ -87,7 +87,7 @@ class WskPackageTests extends TestHelpers with WskTestHelpers {
     val packageParams = Map("key1a" -> "value1a".toJson, "key1b" -> "value1b".toJson)
     val bindParams = Map("key2a" -> "value2a".toJson, "key1b" -> "value2b".toJson)
     val actionParams = Map("key0" -> "value0".toJson)
-    val file = TestUtils.getTestActionFilename("printParams.js")
+    val file = TestCLIUtils.getTestActionFilename("printParams.js")
     assetHelper.withCleaner(wsk.pkg, packageName) { (pkg, _) =>
       pkg.create(packageName, packageParams)
     }
diff --git a/tests/src/test/scala/system/basic/WskSequenceTests.scala b/tests/src/test/scala/system/basic/WskSequenceTests.scala
index 1b90b6d..9ec21a7 100644
--- a/tests/src/test/scala/system/basic/WskSequenceTests.scala
+++ b/tests/src/test/scala/system/basic/WskSequenceTests.scala
@@ -32,8 +32,8 @@ import common.StreamLogging
 import common.TestHelpers
 import common.TestCLIUtils
 import common.TestUtils._
-import common.Wsk
 import common.WhiskProperties
+import common.Wsk
 import common.WskProps
 import common.WskTestHelpers
 
@@ -56,9 +56,6 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
   val allowedActionDuration = 120 seconds
   val shortDuration = 10 seconds
 
-  val whiskConfig = new WhiskConfig(Map(WhiskConfig.actionSequenceMaxLimit -> null))
-  assert(whiskConfig.isValid)
-
   behavior of "Wsk Sequence"
 
   it should "invoke a sequence with normal payload and payload with error field" in withAssetCleaner(wskprops) {
@@ -66,7 +63,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       val name = "sequence"
       val actions = Seq("split", "sort", "head", "cat")
       for (actionName <- actions) {
-        val file = TestUtils.getTestActionFilename(s"$actionName.js")
+        val file = TestCLIUtils.getTestActionFilename(s"$actionName.js")
         assetHelper.withCleaner(wsk.action, actionName) { (action, _) =>
           action.create(name = actionName, artifact = Some(file), timeout = Some(allowedActionDuration))
         }
@@ -126,7 +123,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
     val actions = Seq("split") ++ inner_actions ++ Seq("cat")
     // create atomic actions
     for (actionName <- actions) {
-      val file = TestUtils.getTestActionFilename(s"$actionName.js")
+      val file = TestCLIUtils.getTestActionFilename(s"$actionName.js")
       assetHelper.withCleaner(wsk.action, actionName) { (action, _) =>
         action.create(name = actionName, artifact = Some(file), timeout = Some(allowedActionDuration))
       }
@@ -176,7 +173,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
     val echo = "echo"
 
     // create echo action
-    val file = TestUtils.getTestActionFilename(s"$echo.js")
+    val file = TestCLIUtils.getTestActionFilename(s"$echo.js")
     assetHelper.withCleaner(wsk.action, echo) { (action, actionName) =>
       action.create(name = actionName, artifact = Some(file), timeout = Some(allowedActionDuration))
     }
@@ -201,7 +198,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       result.fields.get("payload") shouldBe Some(argsJson)
     }
     // update x with limit echo
-    val limit = whiskConfig.actionSequenceLimit.toInt
+    val limit = WhiskProperties.getProperty("limits.actions.sequence.maxLength").toInt
     val manyEcho = for (i <- 1 to limit) yield echo
 
     wsk.action.create(xName, Some(manyEcho.mkString(",")), kind = Some("sequence"), update = true)
@@ -236,7 +233,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       val helloWithPkg = s"$pkgName/$helloName"
 
       // create hello action in package
-      val file = TestUtils.getTestActionFilename(s"$helloName.js")
+      val file = TestCLIUtils.getTestActionFilename(s"$helloName.js")
       val actionStr = "AtomicAction"
       assetHelper.withCleaner(wsk.action, helloWithPkg) { (action, actionName) =>
         action.create(
@@ -282,7 +279,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       val packageParams = Map("key1a" -> "value1a".toJson, "key1b" -> "value1b".toJson)
       val bindParams = Map("key2a" -> "value2a".toJson, "key1b" -> "value2b".toJson)
       val actionParams = Map("key0" -> "value0".toJson)
-      val file = TestUtils.getTestActionFilename("printParams.js")
+      val file = TestCLIUtils.getTestActionFilename("printParams.js")
       assetHelper.withCleaner(wsk.pkg, packageName) { (pkg, _) =>
         pkg.create(packageName, packageParams)
       }
@@ -320,7 +317,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       // create actions
       val actions = Seq(apperror, echo)
       for (actionName <- actions) {
-        val file = TestUtils.getTestActionFilename(s"$actionName.js")
+        val file = TestCLIUtils.getTestActionFilename(s"$actionName.js")
         assetHelper.withCleaner(wsk.action, actionName) { (action, actionName) =>
           action.create(name = actionName, artifact = Some(file), timeout = Some(allowedActionDuration))
         }
@@ -357,7 +354,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       // timeouts for the action; make the one for initforever short
       val timeout = Map(echo -> allowedActionDuration, initforever -> shortDuration)
       for (actionName <- actions) {
-        val file = TestUtils.getTestActionFilename(s"$actionName.js")
+        val file = TestCLIUtils.getTestActionFilename(s"$actionName.js")
         assetHelper.withCleaner(wsk.action, actionName) { (action, actionName) =>
           action.create(name = actionName, artifact = Some(file), timeout = Some(timeout(actionName)))
         }
@@ -394,7 +391,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
     // create actions
     val actions = Seq(echo, sleep)
     for (actionName <- actions) {
-      val file = TestUtils.getTestActionFilename(s"$actionName.js")
+      val file = TestCLIUtils.getTestActionFilename(s"$actionName.js")
       assetHelper.withCleaner(wsk.action, actionName) { (action, actionName) =>
         action.create(name = actionName, artifact = Some(file), timeout = Some(allowedActionDuration))
       }
@@ -442,7 +439,7 @@ class WskSequenceTests extends TestHelpers with ScalatestRouteTest with WskTestH
       trigger.create(name, parameters = triggerPayload)
     }
     // action
-    val file = TestUtils.getTestActionFilename(s"$actionName.js")
+    val file = TestCLIUtils.getTestActionFilename(s"$actionName.js")
     assetHelper.withCleaner(wsk.action, actionName) { (action, actionName) =>
       action.create(name = actionName, artifact = Some(file), timeout = Some(allowedActionDuration))
     }
diff --git a/tests/src/test/scala/whisk/core/cli/test/ApiGwTests.scala b/tests/src/test/scala/whisk/core/cli/test/ApiGwTests.scala
index 5b7c304..0d4b268 100644
--- a/tests/src/test/scala/whisk/core/cli/test/ApiGwTests.scala
+++ b/tests/src/test/scala/whisk/core/cli/test/ApiGwTests.scala
@@ -275,7 +275,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     try {
       println("cli namespace: " + clinamespace)
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -318,7 +318,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
       println("cli namespace: " + clinamespace)
 
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -352,7 +352,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -383,7 +383,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -411,7 +411,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -440,7 +440,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val newEndpoint = "/newEndpoint"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -476,7 +476,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val testurlop = "get"
     val testapiname = testName + " API Name"
     val actionName = testName + "_action"
-    val swaggerPath = TestUtils.getTestApiGwFilename("testswaggerdoc1")
+    val swaggerPath = TestCLIUtils.getTestApiGwFilename("testswaggerdoc1")
     try {
       var rr = apiCreate(swagger = Some(swaggerPath))
       rr.stdout should include("ok: created API")
@@ -505,7 +505,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val newEndpoint = "/newEndpoint"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -569,7 +569,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
       println("cli namespace: " + clinamespace)
 
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -599,7 +599,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val testurlop = "get"
     val testapiname = testName + " API Name"
     val actionName = testName + "_action"
-    val swaggerPath = TestUtils.getTestApiGwFilename(s"testswaggerdocinvalid")
+    val swaggerPath = TestCLIUtils.getTestApiGwFilename(s"testswaggerdocinvalid")
     try {
       val rr = apiCreate(swagger = Some(swaggerPath), expectedExitCode = ANY_ERROR_EXIT)
       println("api create stdout: " + rr.stdout)
@@ -620,7 +620,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -660,7 +660,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -699,7 +699,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val testurlop = "get"
     val testapiname = testName + " API Name"
     val actionName = "test1a"
-    val swaggerPath = TestUtils.getTestApiGwFilename(s"testswaggerdoc2")
+    val swaggerPath = TestCLIUtils.getTestApiGwFilename(s"testswaggerdoc2")
     try {
       var rr = apiCreate(swagger = Some(swaggerPath))
       println("api create stdout: " + rr.stdout)
@@ -728,7 +728,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       var rr = apiCreate(
@@ -800,7 +800,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val actionName = testName + "_action"
     try {
       // Create the action for the API.  It must NOT be a "web-action" action for this test
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT)
 
       val rr = apiCreate(
@@ -828,7 +828,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val responseType = "http"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       apiCreate(
@@ -868,7 +868,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val responseType = "http"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       apiCreate(
@@ -898,7 +898,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val responseType = "http"
     try {
       // Create the action for the API.  It must be a "web-action" action.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       apiCreate(
@@ -926,7 +926,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val testurlop = "get"
     val testapiname = testbasepath
     val actionName = "webhttpecho"
-    val swaggerPath = TestUtils.getTestApiGwFilename(s"local.api.yaml")
+    val swaggerPath = TestCLIUtils.getTestApiGwFilename(s"local.api.yaml")
     try {
       var rr = apiCreate(swagger = Some(swaggerPath))
       println("api create stdout: " + rr.stdout)
@@ -945,7 +945,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
   it should "reject creation of an API from invalid YAML formatted API configuration file" in {
     val testName = "CLI_APIGWTEST22"
     val testbasepath = "/" + testName + "_bp"
-    val swaggerPath = TestUtils.getTestApiGwFilename(s"local.api.bad.yaml")
+    val swaggerPath = TestCLIUtils.getTestApiGwFilename(s"local.api.bad.yaml")
     try {
       val rr = apiCreate(swagger = Some(swaggerPath), expectedExitCode = ANY_ERROR_EXIT)
       println("api create stdout: " + rr.stdout)
@@ -969,7 +969,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
     val testbasepath = "/NoActions"
     val testrelpath = "/"
     val testops: Seq[String] = Seq("put", "delete", "get", "head", "options", "patch", "post")
-    val swaggerPath = TestUtils.getTestApiGwFilename(s"endpoints.without.action.swagger.json")
+    val swaggerPath = TestCLIUtils.getTestApiGwFilename(s"endpoints.without.action.swagger.json")
 
     try {
       var rr = apiCreate(swagger = Some(swaggerPath))
@@ -1006,7 +1006,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
 
     try {
       // Create the action for the API.
-      val file = TestUtils.getTestActionFilename(s"echo.js")
+      val file = TestCLIUtils.getTestActionFilename(s"echo.js")
       wsk.action.create(name = actionName, artifact = Some(file), expectedExitCode = SUCCESS_EXIT, web = Some("true"))
 
       // Set an invalid auth key
@@ -1028,7 +1028,7 @@ class ApiGwTests extends TestHelpers with WskTestHelpers with BeforeAndAfterEach
   it should "list api alphabetically by Base/Rel/Verb" in {
     val baseName = "/BaseTestPathApiList"
     val actionName = "actionName"
-    val file = TestUtils.getTestActionFilename(s"echo-web-http.js")
+    val file = TestCLIUtils.getTestActionFilename(s"echo-web-http.js")
     try {
       // Create Action for apis
       var action =
diff --git a/tests/src/test/scala/whisk/core/cli/test/WskActionSequenceTests.scala b/tests/src/test/scala/whisk/core/cli/test/WskActionSequenceTests.scala
index f48d0ac..012dc01 100644
--- a/tests/src/test/scala/whisk/core/cli/test/WskActionSequenceTests.scala
+++ b/tests/src/test/scala/whisk/core/cli/test/WskActionSequenceTests.scala
@@ -54,13 +54,13 @@ class WskActionSequenceTests extends TestHelpers with WskTestHelpers {
     }
 
     assetHelper.withCleaner(wsk.action, fullHelloActionName) {
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
       (action, _) =>
         action.create(fullHelloActionName, file)(wp)
     }
 
     assetHelper.withCleaner(wsk.action, fullCatActionName) {
-      val file = Some(TestUtils.getTestActionFilename("cat.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("cat.js"))
       (action, _) =>
         action.create(fullCatActionName, file)(wp)
     }
diff --git a/tests/src/test/scala/whisk/core/cli/test/WskBasicUsageTests.scala b/tests/src/test/scala/whisk/core/cli/test/WskBasicUsageTests.scala
index 6514963..ba2f865 100644
--- a/tests/src/test/scala/whisk/core/cli/test/WskBasicUsageTests.scala
+++ b/tests/src/test/scala/whisk/core/cli/test/WskBasicUsageTests.scala
@@ -57,7 +57,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   implicit val wskprops = WskProps()
   val wsk = new Wsk
-  val defaultAction = Some(TestUtils.getTestActionFilename("hello.js"))
+  val defaultAction = Some(TestCLIUtils.getTestActionFilename("hello.js"))
   val usrAgentHeaderRegEx = """\bUser-Agent\b": \[\s+"OpenWhisk\-CLI/1.\d+.*"""
 
   behavior of "Wsk CLI usage"
@@ -150,7 +150,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "reject action update when specified file is missing" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     // Create dummy action to update
     val name = "updateMissingFile"
-    val file = Some(TestUtils.getTestActionFilename("hello.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
     assetHelper.withCleaner(wsk.action, name) { (action, name) =>
       action.create(name, file)
     }
@@ -160,7 +160,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   it should "reject action update for sequence with no components" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "updateMissingComponents"
-    val file = Some(TestUtils.getTestActionFilename("hello.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
     assetHelper.withCleaner(wsk.action, name) { (action, name) =>
       action.create(name, file)
     }
@@ -170,7 +170,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "create, and get an action to verify parameter and annotation parsing" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "actionAnnotations"
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
 
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
         action.create(name, file, annotations = getValidJSONTestArgInput, parameters = getValidJSONTestArgInput)
@@ -192,8 +192,8 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "create, and get an action to verify file parameter and annotation parsing" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "actionAnnotAndParamParsing"
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
-      val argInput = Some(TestUtils.getTestActionFilename("validInput1.json"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
+      val argInput = Some(TestCLIUtils.getTestActionFilename("validInput1.json"))
 
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
         action.create(name, file, annotationFile = argInput, parameterFile = argInput)
@@ -215,7 +215,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "create an action with the proper parameter and annotation escapes" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "actionEscapes"
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
 
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
         action.create(name, file, parameters = getEscapedJSONTestArgInput, annotations = getEscapedJSONTestArgInput)
@@ -238,7 +238,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "abort init"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("initexit.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("initexit.js")))
       }
 
       withActivation(wsk.activation, wsk.action.invoke(name)) { activation =>
@@ -252,7 +252,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "hang init"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("initforever.js")), timeout = Some(3 seconds))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("initforever.js")), timeout = Some(3 seconds))
       }
 
       withActivation(wsk.activation, wsk.action.invoke(name)) { activation =>
@@ -266,7 +266,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "abort run"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("runexit.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("runexit.js")))
       }
 
       withActivation(wsk.activation, wsk.action.invoke(name)) { activation =>
@@ -308,12 +308,28 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
       N = 5)
   }
 
+  it should "ensure timestamp and stream are stripped from log lines" in withAssetCleaner(wskprops) {
+    val name = "activationLogStripTest"
+    val auth: Seq[String] = Seq("--auth", wskprops.authKey)
+
+    (wp, assetHelper) =>
+      assetHelper.withCleaner(wsk.action, name) { (action, _) =>
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("log.js")))
+      }
+
+      withActivation(wsk.activation, wsk.action.invoke(name)) { activation =>
+        val cmd = Seq("activation", "logs", "--strip", activation.activationId)
+        val run = wsk.cli(cmd ++ wskprops.overrides ++ auth, expectedExitCode = SUCCESS_EXIT)
+        run.stdout shouldBe "this is stdout\nthis is stderr\n"
+      }
+  }
+
   it should "ensure keys are not omitted from activation record" in withAssetCleaner(wskprops) {
     val name = "activationRecordTest"
 
     (wp, assetHelper) =>
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("argCheck.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("argCheck.js")))
       }
 
       val run = wsk.action.invoke(name)
@@ -338,7 +354,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
         action.create(
           name,
-          Some(TestUtils.getTestActionFilename("helloAsync.js")),
+          Some(TestCLIUtils.getTestActionFilename("helloAsync.js")),
           memory = Some(memoryLimit),
           timeout = Some(timeLimit),
           logsize = Some(logLimit))
@@ -353,7 +369,9 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
           "key" -> JsString("limits"),
           "value" -> ActionLimits(TimeLimit(timeLimit), MemoryLimit(memoryLimit), LogLimit(logLimit)).toJson)
 
-        val path = annotations.find { _.fields("key").convertTo[String] == "path" }.get
+        val path = annotations.find {
+          _.fields("key").convertTo[String] == "path"
+        }.get
 
         path.fields("value").convertTo[String] should fullyMatch regex (s""".*/$name""")
         annotations should contain(limitsObj)
@@ -365,7 +383,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
       val rr = assetHelper.withCleaner(wsk.action, "invalid kind", confirmDelete = false) { (action, name) =>
         action.create(
           name,
-          Some(TestUtils.getTestActionFilename("echo.js")),
+          Some(TestCLIUtils.getTestActionFilename("echo.js")),
           kind = Some("foobar"),
           expectedExitCode = BAD_REQUEST)
       }
@@ -375,7 +393,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "report error when creating an action with zip but without kind" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "zipWithNoKind"
-      val zippedPythonAction = Some(TestUtils.getTestActionFilename("python.zip"))
+      val zippedPythonAction = Some(TestCLIUtils.getTestActionFilename("python.zip"))
       val createResult = assetHelper.withCleaner(wsk.action, name, confirmDelete = false) { (action, _) =>
         action.create(name, zippedPythonAction, expectedExitCode = ANY_ERROR_EXIT)
       }
@@ -406,69 +424,13 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
           limits.length should be > 0
           limits(0).fields("value") should not be JsNull
         }
-<<<<<<< HEAD
-    }
-
-    it should "reject commands that are executed with a missing or invalid parameter or annotation file" in {
-        val emptyFile = TestCLIUtils.getTestActionFilename("emtpy.js")
-        val missingFile = "notafile"
-        val emptyFileMsg = s"File '$emptyFile' is not a valid file or it does not exist"
-        val missingFileMsg = s"File '$missingFile' is not a valid file or it does not exist"
-        val invalidArgs = Seq(
-            (Seq("action", "create", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-P", emptyFile),
-                emptyFileMsg),
-            (Seq("action", "update", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-P", emptyFile),
-                emptyFileMsg),
-            (Seq("action", "invoke", "actionName", "-P", emptyFile), emptyFileMsg),
-            (Seq("action", "create", "actionName", "-P", emptyFile), emptyFileMsg),
-            (Seq("action", "update", "actionName", "-P", emptyFile), emptyFileMsg),
-            (Seq("action", "invoke", "actionName", "-P", emptyFile), emptyFileMsg),
-            (Seq("package", "create", "packageName", "-P", emptyFile), emptyFileMsg),
-            (Seq("package", "update", "packageName", "-P", emptyFile), emptyFileMsg),
-            (Seq("package", "bind", "packageName", "boundPackageName", "-P", emptyFile), emptyFileMsg),
-            (Seq("package", "create", "packageName", "-P", emptyFile), emptyFileMsg),
-            (Seq("package", "update", "packageName", "-P", emptyFile), emptyFileMsg),
-            (Seq("package", "bind", "packageName", "boundPackageName", "-P", emptyFile), emptyFileMsg),
-            (Seq("trigger", "create", "triggerName", "-P", emptyFile), emptyFileMsg),
-            (Seq("trigger", "update", "triggerName", "-P", emptyFile), emptyFileMsg),
-            (Seq("trigger", "fire", "triggerName", "-P", emptyFile), emptyFileMsg),
-            (Seq("trigger", "create", "triggerName", "-P", emptyFile), emptyFileMsg),
-            (Seq("trigger", "update", "triggerName", "-P", emptyFile), emptyFileMsg),
-            (Seq("trigger", "fire", "triggerName", "-P", emptyFile), emptyFileMsg),
-            (Seq("action", "create", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-A", missingFile),
-                missingFileMsg),
-            (Seq("action", "update", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-A", missingFile),
-                missingFileMsg),
-            (Seq("action", "invoke", "actionName", "-A", missingFile), missingFileMsg),
-            (Seq("action", "create", "actionName", "-A", missingFile), missingFileMsg),
-            (Seq("action", "update", "actionName", "-A", missingFile), missingFileMsg),
-            (Seq("action", "invoke", "actionName", "-A", missingFile), missingFileMsg),
-            (Seq("package", "create", "packageName", "-A", missingFile), missingFileMsg),
-            (Seq("package", "update", "packageName", "-A", missingFile), missingFileMsg),
-            (Seq("package", "bind", "packageName", "boundPackageName", "-A", missingFile), missingFileMsg),
-            (Seq("package", "create", "packageName", "-A", missingFile), missingFileMsg),
-            (Seq("package", "update", "packageName", "-A", missingFile), missingFileMsg),
-            (Seq("package", "bind", "packageName", "boundPackageName", "-A", missingFile), missingFileMsg),
-            (Seq("trigger", "create", "triggerName", "-A", missingFile), missingFileMsg),
-            (Seq("trigger", "update", "triggerName", "-A", missingFile), missingFileMsg),
-            (Seq("trigger", "fire", "triggerName", "-A", missingFile), missingFileMsg),
-            (Seq("trigger", "create", "triggerName", "-A", missingFile), missingFileMsg),
-            (Seq("trigger", "update", "triggerName", "-A", missingFile), missingFileMsg),
-            (Seq("trigger", "fire", "triggerName", "-A", missingFile), missingFileMsg))
-
-        invalidArgs foreach {
-            case (cmd, err) =>
-                val stderr = wsk.cli(cmd, expectedExitCode = MISUSE_EXIT).stderr
-                stderr should include(err)
-                stderr should include("Run 'wsk --help' for usage.")
-=======
       }
   }
 
   it should "invoke an action using npm openwhisk" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "hello npm openwhisk"
     assetHelper.withCleaner(wsk.action, name, confirmDelete = false) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("helloOpenwhiskPackage.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("helloOpenwhiskPackage.js")))
     }
 
     val run = wsk.action.invoke(name, Map("ignore_certs" -> true.toJson, "name" -> name.toJson))
@@ -485,7 +447,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     val namespace = wsk.namespace.whois()
     val name = "context"
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-      action.create(name, Some(TestUtils.getTestActionFilename("helloContext.js")))
+      action.create(name, Some(TestCLIUtils.getTestActionFilename("helloContext.js")))
     }
 
     val start = Instant.now(Clock.systemUTC()).toEpochMilli
@@ -506,7 +468,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "invokeResult"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("echo.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("echo.js")))
       }
       val args = Map("hello" -> "Robert".toJson)
       val run = wsk.action.invoke(name, args, blocking = true, result = true)
@@ -517,7 +479,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "deadline"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("helloDeadline.js")), timeout = Some(3 seconds))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("helloDeadline.js")), timeout = Some(3 seconds))
       }
 
       val run = wsk.action.invoke(name)
@@ -536,7 +498,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
     (wp, assetHelper) =>
       val name = "timeout"
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("helloDeadline.js")), timeout = Some(3 seconds))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("helloDeadline.js")), timeout = Some(3 seconds))
       }
 
       val start = Instant.now(Clock.systemUTC()).toEpochMilli
@@ -560,7 +522,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   it should "ensure --web flags set the proper annotations" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "webaction"
-    val file = Some(TestUtils.getTestActionFilename("echo.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
 
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
       action.create(name, file)
@@ -585,7 +547,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "ensure action update with --web flag only copies existing annotations when new annotations are not provided" in withAssetCleaner(
     wskprops) { (wp, assetHelper) =>
     val name = "webaction"
-    val file = Some(TestUtils.getTestActionFilename("echo.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
     val createKey = "createKey"
     val createValue = JsString("createValue")
     val updateKey = "updateKey"
@@ -628,7 +590,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "ensure action update creates an action with --web flag" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "webaction"
-      val file = Some(TestUtils.getTestActionFilename("echo.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
 
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
         action.create(name, file, web = Some("true"), update = true)
@@ -646,7 +608,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "reject action create and update with invalid web flag input" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "webaction"
-      val file = Some(TestUtils.getTestActionFilename("echo.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
       val invalidInput = "bogus"
       val errorMsg =
         s"Invalid argument '$invalidInput' for --web flag. Valid input consist of 'yes', 'true', 'raw', 'false', or 'no'."
@@ -659,7 +621,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   it should "invoke action while not encoding &, <, > characters" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "nonescape"
-    val file = Some(TestUtils.getTestActionFilename("hello.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
     val nonescape = "&<>"
     val input = Map("payload" -> nonescape.toJson)
     val output = JsObject("payload" -> JsString(s"hello, $nonescape!"))
@@ -740,7 +702,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
       val params = Seq("-p", "bigValue", "a" * 1000)
 
       assetHelper.withCleaner(wsk.action, name) { (action, _) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("echo.js")))
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("echo.js")))
       }
 
       val truncated = wsk
@@ -851,8 +813,8 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "create, and get a package to verify file parameter and annotation parsing" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "packageAnnotAndParamFileParsing"
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
-      val argInput = Some(TestUtils.getTestActionFilename("validInput1.json"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
+      val argInput = Some(TestCLIUtils.getTestActionFilename("validInput1.json"))
 
       assetHelper.withCleaner(wsk.pkg, name) { (pkg, _) =>
         pkg.create(name, annotationFile = argInput, parameterFile = argInput)
@@ -894,7 +856,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   it should "report conformance error accessing action as package" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "aAsP"
-    val file = Some(TestUtils.getTestActionFilename("hello.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
       action.create(name, file)
     }
@@ -991,8 +953,8 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "create, and get a trigger to verify file parameter and annotation parsing" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "triggerAnnotAndParamFileParsing"
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
-      val argInput = Some(TestUtils.getTestActionFilename("validInput1.json"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
+      val argInput = Some(TestCLIUtils.getTestActionFilename("validInput1.json"))
 
       assetHelper.withCleaner(wsk.trigger, name) { (trigger, _) =>
         trigger.create(name, annotationFile = argInput, parameterFile = argInput)
@@ -1127,7 +1089,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   it should "create, and list an action with a long name" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "x" * 70
-    val file = Some(TestUtils.getTestActionFilename("hello.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
     assetHelper.withCleaner(wsk.action, name) { (action, _) =>
       action.create(name, file)
     }
@@ -1200,7 +1162,6 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
         val name = s"${packageName}/${actionName}$i"
         assetHelper.withCleaner(wsk.action, name) { (action, name) =>
           action.create(name, defaultAction)
->>>>>>> c10e681... Apply standard scala formatting. (#2650)
         }
       }
       retry(
@@ -1301,14 +1262,14 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   it should "reject commands that are executed with invalid JSON for annotations and parameters" in {
     val invalidJSONInputs = getInvalidJSONInput
     val invalidJSONFiles = Seq(
-      TestUtils.getTestActionFilename("malformed.js"),
-      TestUtils.getTestActionFilename("invalidInput1.json"),
-      TestUtils.getTestActionFilename("invalidInput2.json"),
-      TestUtils.getTestActionFilename("invalidInput3.json"),
-      TestUtils.getTestActionFilename("invalidInput4.json"))
+      TestCLIUtils.getTestActionFilename("malformed.js"),
+      TestCLIUtils.getTestActionFilename("invalidInput1.json"),
+      TestCLIUtils.getTestActionFilename("invalidInput2.json"),
+      TestCLIUtils.getTestActionFilename("invalidInput3.json"),
+      TestCLIUtils.getTestActionFilename("invalidInput4.json"))
     val paramCmds = Seq(
-      Seq("action", "create", "actionName", TestUtils.getTestActionFilename("hello.js")),
-      Seq("action", "update", "actionName", TestUtils.getTestActionFilename("hello.js")),
+      Seq("action", "create", "actionName", TestCLIUtils.getTestActionFilename("hello.js")),
+      Seq("action", "update", "actionName", TestCLIUtils.getTestActionFilename("hello.js")),
       Seq("action", "invoke", "actionName"),
       Seq("package", "create", "packageName"),
       Seq("package", "update", "packageName"),
@@ -1317,8 +1278,8 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
       Seq("trigger", "update", "triggerName"),
       Seq("trigger", "fire", "triggerName"))
     val annotCmds = Seq(
-      Seq("action", "create", "actionName", TestUtils.getTestActionFilename("hello.js")),
-      Seq("action", "update", "actionName", TestUtils.getTestActionFilename("hello.js")),
+      Seq("action", "create", "actionName", TestCLIUtils.getTestActionFilename("hello.js")),
+      Seq("action", "update", "actionName", TestCLIUtils.getTestActionFilename("hello.js")),
       Seq("package", "create", "packageName"),
       Seq("package", "update", "packageName"),
       Seq("package", "bind", "packageName", "boundPackageName"),
@@ -1354,16 +1315,16 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
   }
 
   it should "reject commands that are executed with a missing or invalid parameter or annotation file" in {
-    val emptyFile = TestUtils.getTestActionFilename("emtpy.js")
+    val emptyFile = TestCLIUtils.getTestActionFilename("emtpy.js")
     val missingFile = "notafile"
     val emptyFileMsg = s"File '$emptyFile' is not a valid file or it does not exist"
     val missingFileMsg = s"File '$missingFile' is not a valid file or it does not exist"
     val invalidArgs = Seq(
       (
-        Seq("action", "create", "actionName", TestUtils.getTestActionFilename("hello.js"), "-P", emptyFile),
+        Seq("action", "create", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-P", emptyFile),
         emptyFileMsg),
       (
-        Seq("action", "update", "actionName", TestUtils.getTestActionFilename("hello.js"), "-P", emptyFile),
+        Seq("action", "update", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-P", emptyFile),
         emptyFileMsg),
       (Seq("action", "invoke", "actionName", "-P", emptyFile), emptyFileMsg),
       (Seq("action", "create", "actionName", "-P", emptyFile), emptyFileMsg),
@@ -1382,10 +1343,10 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
       (Seq("trigger", "update", "triggerName", "-P", emptyFile), emptyFileMsg),
       (Seq("trigger", "fire", "triggerName", "-P", emptyFile), emptyFileMsg),
       (
-        Seq("action", "create", "actionName", TestUtils.getTestActionFilename("hello.js"), "-A", missingFile),
+        Seq("action", "create", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-A", missingFile),
         missingFileMsg),
       (
-        Seq("action", "update", "actionName", TestUtils.getTestActionFilename("hello.js"), "-A", missingFile),
+        Seq("action", "update", "actionName", TestCLIUtils.getTestActionFilename("hello.js"), "-A", missingFile),
         missingFileMsg),
       (Seq("action", "invoke", "actionName", "-A", missingFile), missingFileMsg),
       (Seq("action", "create", "actionName", "-A", missingFile), missingFileMsg),
@@ -1614,7 +1575,7 @@ class WskBasicUsageTests extends TestHelpers with WskTestHelpers {
 
   it should "create an action with different permutations of limits" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
 
       def testLimit(timeout: Option[Duration] = None,
                     memory: Option[ByteSize] = None,
diff --git a/tests/src/test/scala/whisk/core/cli/test/WskEntitlementTests.scala b/tests/src/test/scala/whisk/core/cli/test/WskEntitlementTests.scala
index 8140cb4..27310aa 100644
--- a/tests/src/test/scala/whisk/core/cli/test/WskEntitlementTests.scala
+++ b/tests/src/test/scala/whisk/core/cli/test/WskEntitlementTests.scala
@@ -57,7 +57,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
       val privateAction = "privateAction"
 
       assetHelper.withCleaner(wsk.action, privateAction) { (action, name) =>
-        action.create(name, Some(TestUtils.getTestActionFilename("hello.js")))(wp)
+        action.create(name, Some(TestCLIUtils.getTestActionFilename("hello.js")))(wp)
       }
 
       val fullyQualifiedActionName = s"/$guestNamespace/$privateAction"
@@ -96,7 +96,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
       }
 
       assetHelper.withCleaner(wsk.action, fullSampleActionName) {
-        val file = Some(TestUtils.getTestActionFilename("empty.js"))
+        val file = Some(TestCLIUtils.getTestActionFilename("empty.js"))
         (action, _) =>
           action.create(fullSampleActionName, file)(wp)
       }
@@ -113,7 +113,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
       }
 
       val fullyQualifiedActionName = s"/$guestNamespace/notallowed"
-      val file = Some(TestUtils.getTestActionFilename("empty.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("empty.js"))
 
       withAssetCleaner(defaultWskProps) { (wp, assetHelper) =>
         assetHelper.withCleaner(wsk.action, fullyQualifiedActionName, confirmDelete = false) { (action, name) =>
@@ -129,7 +129,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
       }
 
       assetHelper.withCleaner(wsk.action, fullSampleActionName) {
-        val file = Some(TestUtils.getTestActionFilename("empty.js"))
+        val file = Some(TestCLIUtils.getTestActionFilename("empty.js"))
         (action, _) =>
           action.create(fullSampleActionName, file)(wp)
       }
@@ -166,7 +166,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
     }
 
     assetHelper.withCleaner(wsk.action, fullSampleActionName) {
-      val file = Some(TestUtils.getTestActionFilename("empty.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("empty.js"))
       (action, _) =>
         action.create(fullSampleActionName, file, kind = Some("nodejs:default"))(wp)
     }
@@ -224,7 +224,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
     }
 
     assetHelper.withCleaner(wsk.action, fullSampleActionName) {
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
       (action, _) =>
         action.create(fullSampleActionName, file)(wp)
     }
@@ -250,7 +250,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
     }
 
     assetHelper.withCleaner(wsk.action, fullSampleActionName) {
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
       (action, _) =>
         action.create(fullSampleActionName, file)(wp)
     }
@@ -277,7 +277,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
     }
 
     assetHelper.withCleaner(wsk.action, fullSampleActionName) {
-      val file = Some(TestUtils.getTestActionFilename("hello.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("hello.js"))
       (action, _) =>
         action.create(fullSampleActionName, file)(guestwp)
         action.create(s"$privateSamplePackage/$sampleAction", file)(guestwp)
@@ -307,7 +307,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
     }
 
     assetHelper.withCleaner(wsk.action, packagedActionName) {
-      val file = Some(TestUtils.getTestActionFilename("helloContext.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("helloContext.js"))
       (action, _) =>
         action.create(packagedActionName, file)(guestWskProps)
     }
@@ -332,7 +332,7 @@ class WskEntitlementTests extends TestHelpers with WskTestHelpers with BeforeAnd
 
       val sampleFeed = s"$samplePackage/sampleFeed"
       assetHelper.withCleaner(wsk.action, sampleFeed) {
-        val file = Some(TestUtils.getTestActionFilename("empty.js"))
+        val file = Some(TestCLIUtils.getTestActionFilename("empty.js"))
         (action, _) =>
           action.create(sampleFeed, file, kind = Some("nodejs:default"))(wp)
       }
diff --git a/tests/src/test/scala/whisk/core/cli/test/WskWebActionsTests.scala b/tests/src/test/scala/whisk/core/cli/test/WskWebActionsTests.scala
index c94c36e..1a8ff04 100644
--- a/tests/src/test/scala/whisk/core/cli/test/WskWebActionsTests.scala
+++ b/tests/src/test/scala/whisk/core/cli/test/WskWebActionsTests.scala
@@ -45,8 +45,8 @@ import whisk.common.TransactionId
 import whisk.core.entity.Subject
 
 /**
- * Tests web actions.
- */
+  * Tests web actions.
+  */
 @RunWith(classOf[JUnitRunner])
 class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil with BeforeAndAfterAll {
   val MAX_URL_LENGTH = 8192 // 8K matching nginx default
@@ -60,11 +60,11 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
   behavior of "Wsk Web Actions"
 
   /**
-   * Tests web actions, plus max url limit.
-   */
+    * Tests web actions, plus max url limit.
+    */
   it should "create a web action accessible via HTTPS" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "webaction"
-    val file = Some(TestUtils.getTestActionFilename("echo.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
     val host = getServiceURL()
     val requestPath = host + s"$testRoutePath/$namespace/default/$name.text/a?a="
     val padAmount = MAX_URL_LENGTH - requestPath.length
@@ -98,12 +98,12 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
   }
 
   /**
-   * Tests web action requiring authentication.
-   */
+    * Tests web action requiring authentication.
+    */
   it should "create a web action requiring authentication accessible via HTTPS" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "webaction"
-      val file = Some(TestUtils.getTestActionFilename("echo.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
       val host = getServiceURL()
       val url = s"$host$testRoutePath/$namespace/default/$name.text/__ow_user"
 
@@ -129,7 +129,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
   it should "ensure that CORS header is preserved for custom options" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "webaction"
-      val file = Some(TestUtils.getTestActionFilename("corsHeaderMod.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("corsHeaderMod.js"))
       val host = getServiceURL()
       val url = host + s"$testRoutePath/$namespace/default/$name.http"
 
@@ -149,7 +149,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
 
   it should "ensure that default CORS header is preserved" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "webaction"
-    val file = Some(TestUtils.getTestActionFilename("corsHeaderMod.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("corsHeaderMod.js"))
     val host = getServiceURL()
     val url = host + s"$testRoutePath/$namespace/default/$name"
 
@@ -174,7 +174,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
   it should "invoke web action to ensure the returned body argument is correct" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "webaction"
-      val file = Some(TestUtils.getTestActionFilename("echo.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
       val bodyContent = "This is the body"
       val host = getServiceURL()
       val url = s"$host$testRoutePath/$namespace/default/webaction.text/__ow_body"
@@ -195,7 +195,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
   it should "reject invocation of web action with invalid accept header" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "webaction"
-      val file = Some(TestUtils.getTestActionFilename("textBody.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("textBody.js"))
       val host = getServiceURL()
       val url = host + s"$testRoutePath/$namespace/default/$name.http"
 
@@ -210,7 +210,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
 
   it should "support multiple response header values" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "webaction"
-    val file = Some(TestUtils.getTestActionFilename("multipleHeaders.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("multipleHeaders.js"))
     val host = getServiceURL()
     val url = host + s"$testRoutePath/$namespace/default/$name.http"
 
@@ -230,7 +230,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
 
   it should "handle http web action with base64 encoded response" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
     val name = "base64Web"
-    val file = Some(TestUtils.getTestActionFilename("base64Web.js"))
+    val file = Some(TestCLIUtils.getTestActionFilename("base64Web.js"))
     val host = getServiceURL
     val url = host + s"$testRoutePath/$namespace/default/$name.http"
 
@@ -248,7 +248,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
   it should "handle http web action with base64 encoded binary response" in withAssetCleaner(wskprops) {
     (wp, assetHelper) =>
       val name = "binaryWeb"
-      val file = Some(TestUtils.getTestActionFilename("pngWeb.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("pngWeb.js"))
       val host = getServiceURL
       val url = host + s"$testRoutePath/$namespace/default/$name.http"
       val png = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAA/klEQVQYGWNgAAEHBxaG//+ZQMyyn581Pfas+cRQnf1LfF" +
@@ -300,7 +300,7 @@ class WskWebActionsTests extends TestHelpers with WskTestHelpers with RestUtil w
     (wp, assetHelper) =>
       val actionName = "webaction"
 
-      val file = Some(TestUtils.getTestActionFilename("echo.js"))
+      val file = Some(TestCLIUtils.getTestActionFilename("echo.js"))
       assetHelper.withCleaner(wsk.action, actionName) { (action, _) =>
         action.create(actionName, file, web = Some(true.toString))(wp)
       }
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 000257d..72f9ec4 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -109,7 +109,7 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -129,7 +129,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 50955, mode: os.FileMode(420), modTime: time.Unix(1505509004, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 50955, mode: os.FileMode(420), modTime: time.Unix(1505616931, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -149,7 +149,7 @@ func wski18nResourcesEs_esAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -169,7 +169,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -189,7 +189,7 @@ func wski18nResourcesIt_itAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -209,7 +209,7 @@ func wski18nResourcesJa_jaAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -229,7 +229,7 @@ func wski18nResourcesKo_krAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -249,7 +249,7 @@ func wski18nResourcesPt_brAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -269,7 +269,7 @@ func wski18nResourcesZh_hansAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -289,7 +289,7 @@ func wski18nResourcesZh_hantAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505508829, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1500156058, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }

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