Refactor sequence tests. Leave creation and retrieval in core cli, move sequence execution testing to system basictesting
diff --git a/tests/src/system/basic/WskActionSequenceTests.scala b/tests/src/system/basic/WskActionSequenceTests.scala
deleted file mode 100644
index 75d980e..0000000
--- a/tests/src/system/basic/WskActionSequenceTests.scala
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2015-2016 IBM Corporation
- *
- * Licensed 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 system.basic
-
-import java.util.Date
-
-import scala.concurrent.duration.DurationInt
-import scala.language.postfixOps
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-import common.JsHelpers
-import common.TestHelpers
-import common.TestUtils
-import common.Wsk
-import common.WskAdmin
-import common.WskProps
-import common.WskTestHelpers
-import spray.json.DefaultJsonProtocol.IntJsonFormat
-import spray.json.DefaultJsonProtocol.StringJsonFormat
-import spray.json.DefaultJsonProtocol.arrayFormat
-import spray.json.JsArray
-import spray.json.JsString
-import spray.json.pimpAny
-
-@RunWith(classOf[JUnitRunner])
-class WskActionSequenceTests
- extends TestHelpers
- with JsHelpers
- with WskTestHelpers {
-
- implicit val wskprops = WskProps()
- val wsk = new Wsk
- val allowedActionDuration = 120 seconds
- val defaultNamespace = wskprops.namespace
- val user = WskAdmin.getUser(wskprops.authKey)
-
- behavior of "Wsk Action Sequence"
-
- it should "invoke a blocking action and get only the result" in withAssetCleaner(wskprops) {
- (wp, assetHelper) =>
- val name = "sequence"
- val actions = Seq("split", "sort", "head", "cat")
- for (actionName <- actions) {
- val file = TestUtils.getTestActionFilename(s"$actionName.js")
- assetHelper.withCleaner(wsk.action, actionName) { (action, _) =>
- action.create(name = actionName, artifact = Some(file))
- }
- }
-
- assetHelper.withCleaner(wsk.action, name) {
- val sequence = actions.mkString (",")
- (action, _) => action.create(name, Some(sequence), kind = Some("sequence"), timeout = Some(allowedActionDuration))
- }
-
- val now = "it is now " + new Date()
- val args = Array("what time is it?", now)
- val run = wsk.action.invoke(name, Map("payload" -> args.mkString("\n").toJson))
- withActivation(wsk.activation, run, totalWait = allowedActionDuration) {
- activation =>
- val result = activation.response.result.get
- result.fields.get("payload") shouldBe defined
- result.fields.get("length") should not be defined
- result.fields.get("lines") shouldBe Some(JsArray(Vector(now.toJson)))
- }
-
- // update action sequence
- val newSequence = Seq("split", "sort").mkString (",")
- wsk.action.create(name, Some(newSequence), kind = Some("sequence"), timeout = Some(allowedActionDuration), update = true)
- val secondrun = wsk.action.invoke(name, Map("payload" -> args.mkString("\n").toJson))
- withActivation(wsk.activation, secondrun, totalWait = allowedActionDuration) {
- activation =>
- val result = activation.response.result.get
- result.fields.get("length") shouldBe Some(2.toJson)
- result.fields.get("lines") shouldBe Some(args.sortWith(_.compareTo(_) < 0).toArray.toJson)
- }
- }
-
- it should "create, and get an action sequence" in withAssetCleaner(wskprops) {
- (wp, assetHelper) =>
- val name = "actionSeq"
- val packageName = "samples"
- val helloName = "hello"
- val catName = "cat"
- val fullHelloActionName = s"/$defaultNamespace/$packageName/$helloName"
- val fullCatActionName = s"/$defaultNamespace/$packageName/$catName"
-
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, _) => pkg.create(packageName, shared = Some(true))(wp)
- }
-
- assetHelper.withCleaner(wsk.action, fullHelloActionName) {
- val file = Some(TestUtils.getTestActionFilename("hello.js"))
- (action, _) => action.create(fullHelloActionName, file, shared = Some(true))(wp)
- }
-
- assetHelper.withCleaner(wsk.action, fullCatActionName) {
- val file = Some(TestUtils.getTestActionFilename("cat.js"))
- (action, _) => action.create(fullCatActionName, file, shared = Some(true))(wp)
- }
-
- val artifacts = s"$fullHelloActionName,$fullCatActionName"
- val kindValue = JsString("sequence")
- val compValue = JsArray(
- JsString(resolveDefaultNamespace(fullHelloActionName)),
- JsString(resolveDefaultNamespace(fullCatActionName)))
-
- assetHelper.withCleaner(wsk.action, name) {
- (action, _) => action.create(name, Some(artifacts), kind = Some("sequence"))
- }
-
- val stdout = wsk.action.get(name).stdout
- assert(stdout.startsWith(s"ok: got action $name\n"))
- wsk.parseJsonString(stdout).fields("exec").asJsObject.fields("components") shouldBe compValue
- wsk.parseJsonString(stdout).fields("exec").asJsObject.fields("kind") shouldBe kindValue
- }
-
- private def resolveDefaultNamespace(actionName: String) = actionName.replace("/_/", s"/$user/")
-}
diff --git a/tests/src/system/basic/WskSequenceTests.scala b/tests/src/system/basic/WskSequenceTests.scala
new file mode 100644
index 0000000..0a5ec19
--- /dev/null
+++ b/tests/src/system/basic/WskSequenceTests.scala
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2015-2016 IBM Corporation
+ *
+ * Licensed 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 system.basic
+
+import java.util.Date
+
+import scala.concurrent.duration.DurationInt
+import scala.language.postfixOps
+
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+
+import common.JsHelpers
+import common.TestHelpers
+import common.TestUtils
+import common.Wsk
+import common.WskProps
+import common.WskTestHelpers
+import spray.json.DefaultJsonProtocol._
+import spray.json._
+
+/**
+ * Tests sequence execution
+ */
+@RunWith(classOf[JUnitRunner])
+class WskSequenceTests
+ extends TestHelpers
+ with JsHelpers
+ with WskTestHelpers {
+
+ implicit val wskprops = WskProps()
+ val wsk = new Wsk
+ val allowedActionDuration = 120 seconds
+ val defaultNamespace = wskprops.namespace
+
+ behavior of "Wsk Sequence"
+
+ it should "invoke a blocking action and get only the result" in withAssetCleaner(wskprops) {
+ (wp, assetHelper) =>
+ val name = "sequence"
+ val actions = Seq("split", "sort", "head", "cat")
+ for (actionName <- actions) {
+ val file = TestUtils.getTestActionFilename(s"$actionName.js")
+ assetHelper.withCleaner(wsk.action, actionName) { (action, _) =>
+ action.create(name = actionName, artifact = Some(file))
+ }
+ }
+
+ assetHelper.withCleaner(wsk.action, name) {
+ val sequence = actions.mkString (",")
+ (action, _) => action.create(name, Some(sequence), kind = Some("sequence"), timeout = Some(allowedActionDuration))
+ }
+
+ val now = "it is now " + new Date()
+ val args = Array("what time is it?", now)
+ val run = wsk.action.invoke(name, Map("payload" -> args.mkString("\n").toJson))
+ withActivation(wsk.activation, run, totalWait = allowedActionDuration) {
+ activation =>
+ val result = activation.response.result.get
+ result.fields.get("payload") shouldBe defined
+ result.fields.get("length") should not be defined
+ result.fields.get("lines") shouldBe Some(JsArray(Vector(now.toJson)))
+ }
+
+ // update action sequence
+ val newSequence = Seq("split", "sort").mkString (",")
+ wsk.action.create(name, Some(newSequence), kind = Some("sequence"), timeout = Some(allowedActionDuration), update = true)
+ val secondrun = wsk.action.invoke(name, Map("payload" -> args.mkString("\n").toJson))
+ withActivation(wsk.activation, secondrun, totalWait = allowedActionDuration) {
+ activation =>
+ val result = activation.response.result.get
+ result.fields.get("length") shouldBe Some(2.toJson)
+ result.fields.get("lines") shouldBe Some(args.sortWith(_.compareTo(_) < 0).toArray.toJson)
+ }
+ }
+}
diff --git a/tests/src/whisk/core/cli/test/WskActionSequenceTests.scala b/tests/src/whisk/core/cli/test/WskActionSequenceTests.scala
new file mode 100644
index 0000000..88d6272
--- /dev/null
+++ b/tests/src/whisk/core/cli/test/WskActionSequenceTests.scala
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2015-2016 IBM Corporation
+ *
+ * Licensed 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 whisk.core.cli.test
+
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+
+import common.JsHelpers
+import common.TestHelpers
+import common.TestUtils
+import common.Wsk
+import common.WskAdmin
+import common.WskProps
+import common.WskTestHelpers
+import spray.json._
+
+/**
+ * Tests creation and retrieval of a sequence action
+ */
+@RunWith(classOf[JUnitRunner])
+class WskActionSequenceTests
+ extends TestHelpers
+ with JsHelpers
+ with WskTestHelpers {
+
+ implicit val wskprops = WskProps()
+ val wsk = new Wsk
+ val defaultNamespace = wskprops.namespace
+ val user = WskAdmin.getUser(wskprops.authKey)
+
+ behavior of "Wsk Action Sequence"
+
+ it should "create, and get an action sequence" in withAssetCleaner(wskprops) {
+ (wp, assetHelper) =>
+ val name = "actionSeq"
+ val packageName = "samples"
+ val helloName = "hello"
+ val catName = "cat"
+ val fullHelloActionName = s"/$defaultNamespace/$packageName/$helloName"
+ val fullCatActionName = s"/$defaultNamespace/$packageName/$catName"
+
+ assetHelper.withCleaner(wsk.pkg, packageName) {
+ (pkg, _) => pkg.create(packageName, shared = Some(true))(wp)
+ }
+
+ assetHelper.withCleaner(wsk.action, fullHelloActionName) {
+ val file = Some(TestUtils.getTestActionFilename("hello.js"))
+ (action, _) => action.create(fullHelloActionName, file, shared = Some(true))(wp)
+ }
+
+ assetHelper.withCleaner(wsk.action, fullCatActionName) {
+ val file = Some(TestUtils.getTestActionFilename("cat.js"))
+ (action, _) => action.create(fullCatActionName, file, shared = Some(true))(wp)
+ }
+
+ val artifacts = s"$fullHelloActionName,$fullCatActionName"
+ val kindValue = JsString("sequence")
+ val compValue = JsArray(
+ JsString(resolveDefaultNamespace(fullHelloActionName)),
+ JsString(resolveDefaultNamespace(fullCatActionName)))
+
+ assetHelper.withCleaner(wsk.action, name) {
+ (action, _) => action.create(name, Some(artifacts), kind = Some("sequence"))
+ }
+
+ val stdout = wsk.action.get(name).stdout
+ assert(stdout.startsWith(s"ok: got action $name\n"))
+ wsk.parseJsonString(stdout).fields("exec").asJsObject.fields("components") shouldBe compValue
+ wsk.parseJsonString(stdout).fields("exec").asJsObject.fields("kind") shouldBe kindValue
+ }
+
+ private def resolveDefaultNamespace(actionName: String) = actionName.replace("/_/", s"/$user/")
+}