aboutsummaryrefslogtreecommitdiff
path: root/test/tc_mauve_alert_group.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/tc_mauve_alert_group.rb')
-rw-r--r--test/tc_mauve_alert_group.rb129
1 files changed, 125 insertions, 4 deletions
diff --git a/test/tc_mauve_alert_group.rb b/test/tc_mauve_alert_group.rb
index 7e7c4dd..92a9d61 100644
--- a/test/tc_mauve_alert_group.rb
+++ b/test/tc_mauve_alert_group.rb
@@ -1,17 +1,33 @@
$:.unshift "../lib"
require 'th_mauve'
-require 'mauve/alert_group'
require 'th_mauve_resolv'
+require 'mauve/alert_group'
+require 'mauve/server'
+require 'mauve/configuration'
+require 'mauve/configuration_builder'
+require 'mauve/configuration_builders'
require 'pp'
class TcMauveAlertGroup < Mauve::UnitTest
+ include Mauve
+
+ def setup
+ super
+ setup_database
+ end
+
+ def teardown
+ teardown_database
+ super
+ end
+
def test_matches_alert
- alert = Mauve::Alert.new
+ alert = Alert.new
- alert_group = Mauve::AlertGroup.new("test")
+ alert_group = AlertGroup.new("test")
alert_group.includes = Proc.new { true }
assert( alert_group.matches_alert?(alert) )
@@ -38,7 +54,112 @@ class TcMauveAlertGroup < Mauve::UnitTest
assert( ! alert_group.matches_alert?(alert) )
end
-
+ def test_notify
+ config=<<EOF
+server {
+ database "sqlite3::memory:"
+ use_notification_buffer false
+}
+
+notification_method("email") {
+ debug!
+ deliver_to_queue []
+ disable_normal_delivery!
+}
+
+person ("test1") {
+ email "test1@example.com"
+ all { email }
+ notify {
+ during { hours_in_day 0 }
+ }
+}
+
+person ("test2") {
+ email "test2@example.com"
+ all { email }
+ notify {
+ during { hours_in_day 0,1 }
+ }
+}
+
+person ("test3") {
+ email "test3@example.com"
+ all { email }
+ notify {
+ during { true }
+ }
+}
+
+alert_group("default") {
+ includes{ true }
+ notify("test1")
+ notify("test2") {
+ during { hours_in_day 1 }
+ }
+}
+EOF
+ Configuration.current = ConfigurationBuilder.parse(config)
+ notification_buffer = Configuration.current.notification_methods["email"].deliver_to_queue
+ Server.instance.setup
+
+ a = Alert.new(
+ :alert_id => "test",
+ :source => "test",
+ :subject => "test"
+ )
+
+ a.raise!
+ assert_equal("test1@example.com", notification_buffer.pop[2])
+ assert(notification_buffer.empty?)
+
+ Timecop.freeze(Time.now + 5.minutes)
+ a.acknowledge!(Configuration.current.people["test2"], Time.now + 5.minutes)
+ assert_equal(2, notification_buffer.length)
+ assert_equal(["test1@example.com", "test2@example.com"], notification_buffer.collect{|m| m[2]}.sort)
+ notification_buffer.pop until notification_buffer.empty?
+
+ Timecop.freeze(Time.now + 5.minutes)
+ a.clear!
+ assert_equal(2, notification_buffer.length)
+ assert_equal(["test1@example.com", "test2@example.com"], notification_buffer.collect{|m| m[2]}.sort)
+ notification_buffer.pop until notification_buffer.empty?
+
+ #
+ # If we raise it again, test2 shouldn't get notified.
+ #
+ Timecop.freeze(Time.now + 5.minutes)
+ a.raise!
+ assert_equal("test1@example.com", notification_buffer.pop[2])
+ assert(notification_buffer.empty?)
+
+ Timecop.freeze(Time.now + 5.minutes)
+ a.clear!
+ assert_equal("test1@example.com", notification_buffer.pop[2])
+ assert(notification_buffer.empty?)
+
+ #
+ # Freeze to 1am
+ #
+ Timecop.freeze(Time.local(2012,5,2,1,0,0))
+
+ a.raise!
+ assert_equal("test2@example.com", notification_buffer.pop[2])
+ assert(notification_buffer.empty?)
+
+ Timecop.freeze(Time.now + 5.minutes)
+ a.acknowledge!(Configuration.current.people["test1"], Time.now + 5.minutes)
+ assert_equal("test2@example.com", notification_buffer.pop[2])
+ assert(notification_buffer.empty?)
+
+ #
+ # Test1 shouldn't get notified, even though he ack'd it.
+ #
+ Timecop.freeze(Time.now + 5.minutes)
+ a.clear!
+ assert_equal("test2@example.com", notification_buffer.pop[2])
+ assert(notification_buffer.empty?)
+ end
end