diff --git a/commands/trigger.go b/commands/trigger.go index 28e06f897..34f7546c2 100644 --- a/commands/trigger.go +++ b/commands/trigger.go @@ -20,6 +20,7 @@ package commands import ( "errors" "fmt" + "net/http" "github.com/apache/incubator-openwhisk-cli/wski18n" "github.com/apache/incubator-openwhisk-client-go/whisk" @@ -117,7 +118,8 @@ var triggerFireCmd = &cobra.Command{ // TODO get rid of these global modifiers Client.Namespace = qualifiedName.GetNamespace() - trigResp, _, err := Client.Triggers.Fire(qualifiedName.GetEntityName(), parameters) + + trigResp, resp, err := Client.Triggers.Fire(qualifiedName.GetEntityName(), parameters) if err != nil { whisk.Debug(whisk.DbgError, "Client.Triggers.Fire(%s, %#v) failed: %s\n", qualifiedName.GetEntityName(), parameters, err) errStr := wski18n.T("Unable to fire trigger '{{.name}}': {{.err}}", @@ -127,6 +129,16 @@ var triggerFireCmd = &cobra.Command{ return werr } + if resp.StatusCode == http.StatusNoContent { + fmt.Fprintf(color.Output, + wski18n.T("trigger /{{.namespace}}/{{.name}} did not fire as it is not associated with an active rule\n", + map[string]interface{}{ + "namespace": boldString(qualifiedName.GetNamespace()), + "name": boldString(qualifiedName.GetEntityName())})) + + return nil + } + fmt.Fprintf(color.Output, wski18n.T("{{.ok}} triggered /{{.namespace}}/{{.name}} with id {{.id}}\n", map[string]interface{}{ @@ -134,6 +146,7 @@ var triggerFireCmd = &cobra.Command{ "namespace": boldString(qualifiedName.GetNamespace()), "name": boldString(qualifiedName.GetEntityName()), "id": boldString(trigResp.ActivationId)})) + return nil }, } diff --git a/tests/src/test/scala/system/basic/WskCliBasicTests.scala b/tests/src/test/scala/system/basic/WskCliBasicTests.scala index db617a63f..fb1e6e2f0 100644 --- a/tests/src/test/scala/system/basic/WskCliBasicTests.scala +++ b/tests/src/test/scala/system/basic/WskCliBasicTests.scala @@ -195,12 +195,12 @@ class WskCliBasicTests extends TestHelpers with WskTestHelpers { } val stdout = wsk.action.get(name).stdout - stdout should not include regex(""""key": "a"""") - stdout should not include regex(""""value": "A"""") - stdout should include regex (""""key": "b""") - stdout should include regex (""""value": "B"""") - stdout should include regex (""""publish": false""") - stdout should include regex (""""version": "0.0.2"""") + stdout should not include (""""key": "a"""") + stdout should not include (""""value": "A"""") + stdout should include (""""key": "b""") + stdout should include (""""value": "B"""") + stdout should include (""""publish": false""") + stdout should include (""""version": "0.0.2"""") wsk.action.list().stdout should include(name) } @@ -749,6 +749,18 @@ class WskCliBasicTests extends TestHelpers with WskTestHelpers { } } + it should "display proper error when trigger is not associated with active rule" in withAssetCleaner(wskprops) { + val triggerName = withTimestamp("noRuleTrigger") + + (wp, assetHelper) => + assetHelper.withCleaner(wsk.trigger, triggerName) { (trigger, _) => + trigger.create(triggerName) + } + + wsk.trigger.fire(triggerName) + .stdout should include regex(s"trigger /.*/$triggerName did not fire as it is not associated with an active rule") + } + behavior of "Wsk Rule CLI" it should "create rule, get rule, update rule and list rule" in withAssetCleaner(wskprops) { (wp, assetHelper) => diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json index 3e7024ec9..c280be6db 100644 --- a/wski18n/resources/en_US.all.json +++ b/wski18n/resources/en_US.all.json @@ -625,6 +625,10 @@ "id": "{{.ok}} triggered /{{.namespace}}/{{.name}} with id {{.id}}\n", "translation": "{{.ok}} triggered /{{.namespace}}/{{.name}} with id {{.id}}\n" }, + { + "id": "trigger /{{.namespace}}/{{.name}} did not fire as it is not associated with an active rule\n", + "translation": "trigger /{{.namespace}}/{{.name}} did not fire as it is not associated with an active rule\n" + }, { "id": "create new trigger", "translation": "create new trigger"