Add activation annotations.
Add fully qualified action name to the activation.
Add the action limits to the activation.
Add Annotations to the Activation-response of the CLI.
Add test to check if the annotations have been set during invocation.
diff --git a/tests/src/common/WskTestHelpers.scala b/tests/src/common/WskTestHelpers.scala
index 4349928..7203946 100644
--- a/tests/src/common/WskTestHelpers.scala
+++ b/tests/src/common/WskTestHelpers.scala
@@ -97,9 +97,9 @@
/**
* Activation record as it is returned by the CLI.
*/
- case class CliActivation(activationId: String, logs: Option[List[String]], response: CliActivationResponse, start: Long, end: Long, cause: Option[String])
+ case class CliActivation(activationId: String, logs: Option[List[String]], response: CliActivationResponse, start: Long, end: Long, cause: Option[String], annotations: Option[List[JsObject]])
object CliActivation extends DefaultJsonProtocol {
- implicit val serdes = jsonFormat6(CliActivation.apply)
+ implicit val serdes = jsonFormat7(CliActivation.apply)
}
/**
diff --git a/tests/src/system/basic/WskActionTests.scala b/tests/src/system/basic/WskActionTests.scala
index 88b9f41..1cced3a 100644
--- a/tests/src/system/basic/WskActionTests.scala
+++ b/tests/src/system/basic/WskActionTests.scala
@@ -16,6 +16,8 @@
package system.basic
+import scala.language.postfixOps
+
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
diff --git a/tests/src/whisk/core/cli/test/WskBasicUsageTests.scala b/tests/src/whisk/core/cli/test/WskBasicUsageTests.scala
index eb34c31..6e89030 100644
--- a/tests/src/whisk/core/cli/test/WskBasicUsageTests.scala
+++ b/tests/src/whisk/core/cli/test/WskBasicUsageTests.scala
@@ -54,6 +54,10 @@
import whisk.core.entity.ActivationResponse
import whisk.utils.retry
import JsonArgsForTests._
+import whisk.core.entity.ActionLimits
+import whisk.core.entity.TimeLimit
+import whisk.core.entity.LogLimit
+import whisk.core.entity.MemoryLimit
/**
* Tests for basic CLI usage. Some of these tests require a deployed backend.
@@ -104,9 +108,9 @@
val env = Map("WSK_CONFIG_FILE" -> tmpwskprops.getAbsolutePath())
val stdout = wsk.cli(Seq("property", "set", "-i", "--apihost", wskprops.apihost, "--auth", wskprops.authKey,
"--namespace", namespace), env = env).stdout
- stdout should include (s"ok: whisk auth set to ${wskprops.authKey}")
- stdout should include (s"ok: whisk API host set to ${wskprops.apihost}")
- stdout should include (s"ok: whisk namespace set to ${namespace}")
+ stdout should include(s"ok: whisk auth set to ${wskprops.authKey}")
+ stdout should include(s"ok: whisk API host set to ${wskprops.apihost}")
+ stdout should include(s"ok: whisk namespace set to ${namespace}")
} finally {
tmpwskprops.delete()
}
@@ -144,8 +148,8 @@
val apihost = s"http://${WhiskProperties.getControllerHost}:${WhiskProperties.getControllerPort}"
wsk.cli(Seq("property", "set", "--apihost", apihost), env = env)
val rr = wsk.cli(Seq("property", "get", "--apibuild", "-i"), env = env)
- rr.stdout should not include regex ("""whisk API build\s*Unknown""")
- rr.stderr should not include regex ("Unable to obtain API build information")
+ rr.stdout should not include regex("""whisk API build\s*Unknown""")
+ rr.stderr should not include regex("Unable to obtain API build information")
rr.stdout should include regex ("""(?i)whisk API build\s+201.*""")
} finally {
tmpwskprops.delete()
@@ -369,6 +373,34 @@
}
}
+ it should "write the action-path and the limits to the annotations" in withAssetCleaner(wskprops) {
+ (wp, assetHelper) =>
+ val name = "annotations"
+ val memoryLimit = 512 MB
+ val logLimit = 1 MB
+ val timeLimit = 60 seconds
+
+ assetHelper.withCleaner(wsk.action, name) {
+ (action, _) => action.create(name, Some(TestUtils.getTestActionFilename("helloAsync.js")), memory = Some(memoryLimit), timeout = Some(timeLimit), logsize = Some(logLimit))
+ }
+
+ val run = wsk.action.invoke(name, Map("payload" -> "this is a test".toJson))
+ withActivation(wsk.activation, run) {
+ activation =>
+ activation.response.status shouldBe "success"
+ val annotations = activation.annotations.get
+
+ val limitsObj = JsObject(
+ "key" -> JsString("limits"),
+ "value" -> ActionLimits(TimeLimit(timeLimit), MemoryLimit(memoryLimit), LogLimit(logLimit)).toJson)
+
+ val path = annotations.find { _.fields("key").convertTo[String] == "path" }.get
+
+ path.fields("value").convertTo[String] should fullyMatch regex (s""".*/$name""")
+ annotations should contain(limitsObj)
+ }
+ }
+
behavior of "Wsk packages"
it should "create, and get a package to verify annotation parsing" in withAssetCleaner(wskprops) {
@@ -620,8 +652,7 @@
(Seq("trigger", "update", "triggerName", "-a"), invalidAnnotMsg),
(Seq("trigger", "update", "triggerName", "-a", "key"), invalidAnnotMsg),
(Seq("trigger", "fire", "triggerName", "-a"), invalidAnnotMsg),
- (Seq("trigger", "fire", "triggerName", "-a", "key"), invalidAnnotMsg)
- )
+ (Seq("trigger", "fire", "triggerName", "-a", "key"), invalidAnnotMsg))
invalidArgs foreach {
case (cmd, err) =>
@@ -656,7 +687,7 @@
(Seq("action", "create", "actionName", "artifactName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("action", "update"), s"${tooFewArgsMsg} ${actionNameReqMsg} ${actionOptMsg}"),
(Seq("action", "update", "actionName", "artifactName", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${actionNameReqMsg} ${actionOptMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${actionNameReqMsg} ${actionOptMsg}"),
(Seq("action", "delete"), s"${tooFewArgsMsg} ${actionNameReqMsg}"),
(Seq("action", "delete", "actionName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("action", "get"), s"${tooFewArgsMsg} ${actionNameReqMsg}"),
@@ -665,7 +696,7 @@
(Seq("action", "invoke"), s"${tooFewArgsMsg} ${actionNameReqMsg}"),
(Seq("action", "invoke", "actionName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("activation", "list", "namespace", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
(Seq("activation", "get"), s"${tooFewArgsMsg} ${activationIdReq}"),
(Seq("activation", "get", "activationID", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("activation", "logs"), s"${tooFewArgsMsg} ${activationIdReq}"),
@@ -673,10 +704,10 @@
(Seq("activation", "result"), s"${tooFewArgsMsg} ${activationIdReq}"),
(Seq("activation", "result", "activationID", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("activation", "poll", "activationID", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
(Seq("namespace", "list", invalidArg), s"${tooManyArgsMsg}${invalidArg}. ${noArgsReqMsg}"),
(Seq("namespace", "get", "namespace", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
(Seq("package", "create"), s"${tooFewArgsMsg} ${packageNameReqMsg}"),
(Seq("package", "create", "packageName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("package", "update"), s"${tooFewArgsMsg} ${packageNameReqMsg}"),
@@ -687,11 +718,11 @@
(Seq("package", "bind", "packageName"), s"${tooFewArgsMsg} ${packageNameBindingReqMsg}"),
(Seq("package", "bind", "packageName", "bindingName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("package", "list", "namespace", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
(Seq("package", "delete"), s"${tooFewArgsMsg} ${packageNameReqMsg}"),
(Seq("package", "delete", "namespace", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("package", "refresh", "namespace", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
(Seq("rule", "enable"), s"${tooFewArgsMsg} ${ruleNameReqMsg}"),
(Seq("rule", "enable", "ruleName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("rule", "disable"), s"${tooFewArgsMsg} ${ruleNameReqMsg}"),
@@ -702,12 +733,12 @@
(Seq("rule", "create", "ruleName"), s"${tooFewArgsMsg} ${ruleTriggerActionReqMsg}"),
(Seq("rule", "create", "ruleName", "triggerName"), s"${tooFewArgsMsg} ${ruleTriggerActionReqMsg}"),
(Seq("rule", "create", "ruleName", "triggerName", "actionName", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}."),
+ s"${tooManyArgsMsg}${invalidArg}."),
(Seq("rule", "update"), s"${tooFewArgsMsg} ${ruleTriggerActionReqMsg}"),
(Seq("rule", "update", "ruleName"), s"${tooFewArgsMsg} ${ruleTriggerActionReqMsg}"),
(Seq("rule", "update", "ruleName", "triggerName"), s"${tooFewArgsMsg} ${ruleTriggerActionReqMsg}"),
(Seq("rule", "update", "ruleName", "triggerName", "actionName", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}."),
+ s"${tooManyArgsMsg}${invalidArg}."),
(Seq("rule", "get"), s"${tooFewArgsMsg} ${ruleNameReqMsg}"),
(Seq("rule", "get", "ruleName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("rule", "delete"), s"${tooFewArgsMsg} ${ruleNameReqMsg}"),
@@ -715,7 +746,7 @@
(Seq("rule", "list", "namespace", invalidArg), s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"),
(Seq("trigger", "fire"), s"${tooFewArgsMsg} ${triggerNameReqMsg} ${optPayloadMsg}"),
(Seq("trigger", "fire", "triggerName", "triggerPayload", invalidArg),
- s"${tooManyArgsMsg}${invalidArg}. ${triggerNameReqMsg} ${optPayloadMsg}"),
+ s"${tooManyArgsMsg}${invalidArg}. ${triggerNameReqMsg} ${optPayloadMsg}"),
(Seq("trigger", "create"), s"${tooFewArgsMsg} ${triggerNameReqMsg}"),
(Seq("trigger", "create", "triggerName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("trigger", "update"), s"${tooFewArgsMsg} ${triggerNameReqMsg}"),
@@ -724,14 +755,13 @@
(Seq("trigger", "get", "triggerName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
(Seq("trigger", "delete"), s"${tooFewArgsMsg} ${triggerNameReqMsg}"),
(Seq("trigger", "delete", "triggerName", invalidArg), s"${tooManyArgsMsg}${invalidArg}."),
- (Seq("trigger", "list", "namespace", invalidArg), s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}")
- )
+ (Seq("trigger", "list", "namespace", invalidArg), s"${tooManyArgsMsg}${invalidArg}. ${optNamespaceMsg}"))
invalidArgs foreach {
case (cmd, err) =>
- val stderr = wsk.cli(cmd, expectedExitCode = ERROR_EXIT).stderr
- stderr should include(err)
- stderr should include("Run 'wsk --help' for usage.")
+ val stderr = wsk.cli(cmd, expectedExitCode = ERROR_EXIT).stderr
+ stderr should include(err)
+ stderr should include("Run 'wsk --help' for usage.")
}
}