diff options
-rw-r--r-- | test/tc_mauve_notification.rb | 37 | ||||
-rw-r--r-- | test/tc_mauve_people_list.rb | 120 |
2 files changed, 151 insertions, 6 deletions
diff --git a/test/tc_mauve_notification.rb b/test/tc_mauve_notification.rb index 16b6489..a447207 100644 --- a/test/tc_mauve_notification.rb +++ b/test/tc_mauve_notification.rb @@ -420,7 +420,7 @@ person ("test1") { all { email } notify { every 300 - during { !working_hours? } + during { hours_in_day(0) } } } @@ -429,7 +429,14 @@ person ("test2") { all { email } notify { every 300 - during { working_hours? } + during { hours_in_day(1) } + } +} + +people_list("testers", %w(test1 test2)) { + notify { + every 150 + during { hours_in_day(2) } } } @@ -437,6 +444,7 @@ alert_group("test") { level URGENT notify("test1") notify("test2") + notify("testers") } EOF @@ -455,6 +463,7 @@ EOF # # This should only alert test1 # + assert_equal(0, Time.now.hour) alert.raise! assert_equal(1, notification_buffer.size, "Wrong number of notifications sent") assert_equal("test1@example.com", notification_buffer.pop[2]) @@ -464,10 +473,11 @@ EOF assert_equal("test1@example.com", notification_buffer.pop[2]) # - # Wind forward to 9am (working hours) + # Wind forward to 1am when test2 should get alerted # - Timecop.freeze(Time.now+9.hours) - assert(Time.now.working_hours?) + Timecop.freeze(Time.now+1.hours) + + assert_equal(1, Time.now.hour) alert.raise! assert_equal(1, notification_buffer.size, "Wrong number of notifications sent") assert_equal("test2@example.com", notification_buffer.pop[2]) @@ -475,7 +485,22 @@ EOF alert.clear! assert_equal(1, notification_buffer.size, "Wrong number of notifications sent") assert_equal("test2@example.com", notification_buffer.pop[2]) - + + # + # Wind forward to 2am when the testers group should get alerted + # + Timecop.freeze(Time.now+1.hours) + + assert_equal(2, Time.now.hour) + alert.raise! + assert_equal(2, notification_buffer.size, "Wrong number of notifications sent") + assert_equal("test2@example.com", notification_buffer.pop[2]) + assert_equal("test1@example.com", notification_buffer.pop[2]) + + alert.clear! + assert_equal(2, notification_buffer.size, "Wrong number of notifications sent") + assert_equal("test2@example.com", notification_buffer.pop[2]) + assert_equal("test1@example.com", notification_buffer.pop[2]) end diff --git a/test/tc_mauve_people_list.rb b/test/tc_mauve_people_list.rb index e69de29..2d5da6d 100644 --- a/test/tc_mauve_people_list.rb +++ b/test/tc_mauve_people_list.rb @@ -0,0 +1,120 @@ +$:.unshift "../lib" + +require 'th_mauve' +require 'mauve/people_list' +require 'mauve/configuration' +require 'mauve/configuration_builder' +require 'mauve/configuration_builders' +require 'pp' + +class TcMauvePeopleList < Mauve::UnitTest + + include Mauve + + def setup + super + setup_database + end + + def teardown + teardown_database + super + end + + def test_send_alert + # + # Allows us to pick up notifications sent. + # + $sent_notifications = [] + + config =<<EOF +notification_method("email") { + debug! + disable_normal_delivery! + deliver_to_queue [] +} + +person ("test1") { + email "test@example.com" + all { email } + suppress_notifications_after( 6 => 60.seconds ) +} + +person ("test2") { + email "test@example.com" + all { email } + suppress_notifications_after( 1 => 1.minute ) +} + +people_list "testers", %w(test1 test2) + +alert_group("default") { + level URGENT + + notify("testers") { + every 10.seconds + } +} +EOF + Configuration.current = ConfigurationBuilder.parse(config) + notification_buffer = Configuration.current.notification_methods["email"].deliver_to_queue + + Server.instance.setup + people_list = Configuration.current.people_lists["testers"] + + alert = Alert.new( + :alert_id => "test", + :source => "test", + :subject => "test" + ) + alert.raise! +# assert_equal(false, .suppressed?, "Person suppressed before we even begin!") + + start_time = Time.now + + # + # 6 alerts every 60 seconds. + # + [ [0, true, true], + [5, true, false], + [10, true, false], + [15, true, false], + [20, true, false], + [25, true, false], # 6th alert -- suppress from now on + [30, false, false], + [35, false, false], + [40, false, false], + [60, false, true], # One minute after starting -- should still be suppressed + [65, false, false], + [70, false, false], + [75, false, false], + [80, false, false], + [85, true, false], # One minute after the last alert was sent, start sending again. + [90, true, false] + ].each do |offset, test1sent, test2sent| + # + # Advance in to the future! + # + Timecop.freeze(start_time + offset) + + people_list.people.each{|person| person.send_alert(alert.level, alert) } + + + if test1sent or test2sent + n_notifications = (test2sent ? 1 : 0) + (test1sent ? 1 : 0) + assert_equal(n_notifications, notification_buffer.length, "Notification not sent when it should have been at #{Time.now}.") + # + # Pop the notification off the buffer. + # + n_notifications.times{ notification_buffer.pop } +# assert_equal(Time.now, person.notification_thresholds[60][-1], "Notification thresholds not updated at #{Time.now}.") + else + assert_equal(0, notification_buffer.length, "Notification sent when it should not have been at #{Time.now}.") + end + + + logger_pop + end + + end +end |