update logging level when maxTriggers reached (#91)
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index 0949ddc..83f57d0 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -85,7 +85,7 @@
logger.info(method, 'Trigger', triggerId, 'was successfully fired');
if (dataTrigger.triggersLeft === 0) {
utils.disableTrigger(triggerIdentifier, undefined, 'Automatically disabled after reaching max triggers');
- logger.error(method, 'no more triggers left, disabled', triggerIdentifier);
+ logger.warn(method, 'no more triggers left, disabled', triggerIdentifier);
}
})
.catch(err => {
diff --git a/tests/src/test/scala/system/health/AlarmsHealthFeedTests.scala b/tests/src/test/scala/system/health/AlarmsHealthFeedTests.scala
index 1ea7ab8..7072289 100644
--- a/tests/src/test/scala/system/health/AlarmsHealthFeedTests.scala
+++ b/tests/src/test/scala/system/health/AlarmsHealthFeedTests.scala
@@ -16,6 +16,8 @@
*/
package system.health
+import java.time.{Clock, Instant}
+
import common.{TestHelpers, Wsk, WskProps, WskTestHelpers}
import org.junit.runner.RunWith
import org.scalatest.FlatSpec
@@ -39,104 +41,108 @@
it should "bind alarm package and fire periodic trigger using cron feed" in withAssetCleaner(wskprops) {
(wp, assetHelper) =>
- implicit val wskprops = wp // shadow global props and make implicit
- val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
- val packageName = "dummyAlarmsPackage"
+ implicit val wskprops = wp // shadow global props and make implicit
+ val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+ val packageName = "dummyAlarmsPackage"
- // the package alarms should be there
- val packageGetResult = wsk.pkg.get("/whisk.system/alarms")
- println("fetched package alarms")
- packageGetResult.stdout should include("ok")
+ // the package alarms should be there
+ val packageGetResult = wsk.pkg.get("/whisk.system/alarms")
+ println("fetched package alarms")
+ packageGetResult.stdout should include("ok")
- // create package binding
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, name) => pkg.bind("/whisk.system/alarms", name)
- }
+ // create package binding
+ assetHelper.withCleaner(wsk.pkg, packageName) {
+ (pkg, name) => pkg.bind("/whisk.system/alarms", name)
+ }
- // create whisk stuff
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName) {
- (trigger, name) =>
- trigger.create(name, feed = Some(s"$packageName/alarm"), parameters = Map(
- "trigger_payload" -> "alarmTest".toJson,
- "cron" -> "* * * * * *".toJson))
- }
- feedCreationResult.stdout should include("ok")
+ println(s"Creating trigger: $triggerName")
+ // create whisk stuff
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName) {
+ (trigger, name) =>
+ trigger.create(name, feed = Some(s"$packageName/alarm"), parameters = Map(
+ "trigger_payload" -> "alarmTest".toJson,
+ "cron" -> "* * * * * *".toJson))
+ }
+ feedCreationResult.stdout should include("ok")
- println("waiting for triggers")
- val activations = wsk.activation.pollFor(N = 5, Some(triggerName), retries = 20).length
- println(s"Found activation size (should be at least 5): $activations")
- activations should be >= 5
+ println("waiting for triggers")
+ val activations = wsk.activation.pollFor(N = 5, Some(triggerName)).length
+ println(s"Found activation size (should be at least 5): $activations")
+ activations should be >= 5
- // delete the whisk trigger, which must also delete the feed
- wsk.trigger.delete(triggerName)
- Thread.sleep(5000)
- // get activation list after delete of the trigger
- val activationsAfterDelete = wsk.activation.ids(wsk.activation.list(filter = Some(triggerName))).length
- println(s"Found activation size after delete: $activationsAfterDelete")
+ // delete the whisk trigger, which must also delete the feed
+ wsk.trigger.delete(triggerName)
- // recreate the trigger now without the feed
- wsk.trigger.create(triggerName)
+ // get activation list after delete of the trigger
+ val activationsAfterDelete = wsk.activation.pollFor(N = 20, Some(triggerName), retries = 20).length
+ val now = Instant.now(Clock.systemUTC())
+ println(s"Found activation size after delete ($now): $activationsAfterDelete")
- // get activation list again, should be same as before sleeping
- println("confirming no new triggers")
- val activationsAfterWait = wsk.activation.pollFor(N = activationsAfterDelete + 1, Some(triggerName)).length
- println(s"Found activation size after wait: $activationsAfterWait")
- println("Activation list after wait should equal with activation list after delete")
- activationsAfterWait should be(activationsAfterDelete)
+ // recreate the trigger now without the feed
+ wsk.trigger.create(triggerName)
+
+ // get activation list again, should be same as before sleeping
+ println("confirming no new triggers")
+ val activationsAfterWait = wsk.activation.pollFor(N = activationsAfterDelete + 1, Some(triggerName)).length
+ println(s"Found activation size after wait: $activationsAfterWait")
+ println("Activation list after wait should equal with activation list after delete")
+ activationsAfterWait should be(activationsAfterDelete)
}
it should "should not fail when specifying triggers above 1 Million" in withAssetCleaner(wskprops) {
(wp, assetHelper) =>
- implicit val wskprops = wp // shadow global props and make implicit
- val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
- val packageName = "dummyAlarmsPackage"
+ implicit val wskprops = wp // shadow global props and make implicit
+ val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+ val packageName = "dummyAlarmsPackage"
- // the package alarms should be there
- val packageGetResult = wsk.pkg.get("/whisk.system/alarms")
- println("fetched package alarms")
- packageGetResult.stdout should include("ok")
+ // the package alarms should be there
+ val packageGetResult = wsk.pkg.get("/whisk.system/alarms")
+ println("fetched package alarms")
+ packageGetResult.stdout should include("ok")
- // create package binding
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, name) => pkg.bind("/whisk.system/alarms", name)
- }
+ // create package binding
+ assetHelper.withCleaner(wsk.pkg, packageName) {
+ (pkg, name) => pkg.bind("/whisk.system/alarms", name)
+ }
- // create whisk stuff
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName) {
- (trigger, name) =>
- trigger.create(name, feed = Some(s"$packageName/alarm"), parameters = Map(
- "trigger_payload" -> "alarmTest".toJson,
- "cron" -> "* * * * * *".toJson,
- "maxTriggers" -> 100000000.toJson))
- }
- feedCreationResult.stdout should include("ok")
+ // create whisk stuff
+ println(s"Creating trigger: $triggerName")
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName) {
+ (trigger, name) =>
+ trigger.create(name, feed = Some(s"$packageName/alarm"), parameters = Map(
+ "trigger_payload" -> "alarmTest".toJson,
+ "cron" -> "* * * * * *".toJson,
+ "maxTriggers" -> 100000000.toJson))
+ }
+ feedCreationResult.stdout should include("ok")
}
it should "should not deny trigger creation when choosing maxTriggers set to infinity (-1)" in withAssetCleaner(wskprops) {
(wp, assetHelper) =>
- implicit val wskprops = wp // shadow global props and make implicit
- val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
- val packageName = "dummyAlarmsPackage"
+ implicit val wskprops = wp // shadow global props and make implicit
+ val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+ val packageName = "dummyAlarmsPackage"
- // the package alarms should be there
- val packageGetResult = wsk.pkg.get("/whisk.system/alarms")
- println("fetched package alarms")
- packageGetResult.stdout should include("ok")
+ // the package alarms should be there
+ val packageGetResult = wsk.pkg.get("/whisk.system/alarms")
+ println("fetched package alarms")
+ packageGetResult.stdout should include("ok")
- // create package binding
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, name) => pkg.bind("/whisk.system/alarms", name)
- }
+ // create package binding
+ assetHelper.withCleaner(wsk.pkg, packageName) {
+ (pkg, name) => pkg.bind("/whisk.system/alarms", name)
+ }
- // create whisk stuff
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = true) {
- (trigger, name) =>
- trigger.create(name, feed = Some(s"$packageName/alarm"), parameters = Map(
- "trigger_payload" -> "alarmTest".toJson,
- "cron" -> "* * * * * *".toJson,
- "maxTriggers" -> -1.toJson),
- expectedExitCode = 0)
- }
- feedCreationResult.stderr should not include("error")
+ // create whisk stuff
+ println(s"Creating trigger: $triggerName")
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = true) {
+ (trigger, name) =>
+ trigger.create(name, feed = Some(s"$packageName/alarm"), parameters = Map(
+ "trigger_payload" -> "alarmTest".toJson,
+ "cron" -> "* * * * * *".toJson,
+ "maxTriggers" -> -1.toJson),
+ expectedExitCode = 0)
+ }
+ feedCreationResult.stderr should not include("error")
}
}