diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/tc_mauve_alert_changed.rb | 56 | ||||
| -rw-r--r-- | test/tc_mauve_person.rb | 85 | 
2 files changed, 130 insertions, 11 deletions
| diff --git a/test/tc_mauve_alert_changed.rb b/test/tc_mauve_alert_changed.rb index 9cae742..ba31dd9 100644 --- a/test/tc_mauve_alert_changed.rb +++ b/test/tc_mauve_alert_changed.rb @@ -1,11 +1,11 @@  $:.unshift "../lib" +require 'th_mauve'  require 'mauve/alert'  require 'mauve/alert_changed'  require 'mauve/configuration'  require 'mauve/configuration_builder'  require 'mauve/configuration_builders' -require 'th_mauve'  class TcMauveAlertChanged < Mauve::UnitTest    include Mauve @@ -23,10 +23,6 @@ class TcMauveAlertChanged < Mauve::UnitTest    def test_reminder      config=<<EOF -server { -  database "sqlite::memory:" -} -  person("test_person") {    all { true }  } @@ -40,11 +36,11 @@ alert_group("test_group") {  }  EOF -    Mauve::Configuration.current = Mauve::ConfigurationBuilder.parse(config) +    Configuration.current = ConfigurationBuilder.parse(config)      Server.instance.setup -    alert = Mauve::Alert.new(:source => "test", :alert_id => "test_alert", :summary => "test alert") +    alert = Alert.new(:source => "test", :alert_id => "test_alert", :summary => "test alert")      alert.raise!      reminders     = 1 @@ -84,6 +80,52 @@ EOF    end +  def test_only_send_one_alert_on_unacknowledge +    config=<<EOF +person("test_person") { +  all { true } +} + +alert_group("test_group") { + +  notify("test_person") { +    every 5.minutes +  } + +} +EOF + +    Configuration.current = ConfigurationBuilder.parse(config) + +    Server.instance.setup + +    alert = Alert.new(:source => "test", :alert_id => "test_alert", :summary => "test alert") +    alert.raise! +    assert_equal(1,Server.instance.notification_buffer.length, "Wrong no of notifications sent after raise.") +    assert_equal(1,AlertChanged.count, "Wrong no of AlertChangeds created after raise.") + +    alert.acknowledge!(Configuration.current.people["test_person"], Time.now + 10.minutes) +    assert_equal(2,Server.instance.notification_buffer.length, "Wrong no of notifications sent after acknowledge.") +    assert_equal(2,AlertChanged.count, "Wrong no of AlertChangeds created after acknowledge.") + +    Timecop.freeze(Time.now + 10.minutes) +    AlertChanged.all.each{|ac| ac.poll} +    assert_equal(2,Server.instance.notification_buffer.length, "Extra notifications sent when alertchangeds are polled.") +   +    # +    # OK if we poll the alert now it should be re-raised. +    # +    alert.poll +    assert(!alert.acknowledged?,"Alert not unacknowledged") +    assert(alert.raised?,"Alert not raised following unacknowledgment") +    assert_equal(3,Server.instance.notification_buffer.length, "No re-raise notification sent.") +    # +    # If we poll the AlertChangeds again, no further notification should be sent. +    # +    AlertChanged.all.each{|ac| ac.poll} +    assert_equal(3,Server.instance.notification_buffer.length, "Extra notifications sent when alertchangeds are polled.") +    +  end  end diff --git a/test/tc_mauve_person.rb b/test/tc_mauve_person.rb index c659f00..30051b0 100644 --- a/test/tc_mauve_person.rb +++ b/test/tc_mauve_person.rb @@ -83,17 +83,94 @@ EOF        person.send_alert(alert.level, alert) -      assert_equal(suppressed,    person.suppressed?) +      assert_equal(suppressed,    person.suppressed?, "Suppressed (or not) when it should (or shouldn't) be at #{Time.now}.")        if notification_sent  -        assert_equal(1, $sent_notifications.length, "Notification not sent when it should have been.") +        assert_equal(1, $sent_notifications.length, "Notification not sent when it should have been at #{Time.now}.")          #          # Pop the notification off the buffer.          #          last_notification_sent_at = $sent_notifications.pop -        assert_equal(Time.now, person.notification_thresholds[60][-1], "Notification thresholds not updated") +        assert_equal(Time.now, person.notification_thresholds[60][-1], "Notification thresholds not updated at #{Time.now}.")        else -        assert_equal(0, $sent_notifications.length, "Notification sent when it should not have been.") +        assert_equal(0, $sent_notifications.length, "Notification sent when it should not have been at #{Time.now}.") +      end + +      logger_pop +    end + +  end + +  def test_send_alert_when_only_one_blargh +    # +    # Allows us to pick up notifications sent. +    # +    $sent_notifications = [] + +    # +    # This configuration is a bit different.  We only want one alert per +    # minute. +    # +    config =<<EOF +person ("test") { +  all { $sent_notifications << Time.now ; true } +  suppress_notifications_after( 1 => 1.minute ) +} + +alert_group("default") { +  level URGENT + +  notify("test") { +    every 10.seconds +  }  +} +EOF +   +    Configuration.current = ConfigurationBuilder.parse(config) +    Server.instance.setup + +    person = Configuration.current.people["test"] + +    alert = Alert.new( +      :alert_id  => "test", +      :source    => "test", +      :subject   => "test" +    ) + +    alert.raise! +    assert_equal(false,    person.suppressed?, "Person suppressed before we even begin!") + +    start_time = Time.now + +    # +    # 1 alerts every 60 seconds. +    # +    [ [0, true,   true], +      [5, false,  true], +      [15, false, true], +      [30, false, true], +      [60, true,  true], # One minute after starting -- should send an alert, but still be suppressed. +      [90, false, true], +      [120, true, true] # Two minutes after starting -- should send an alert, but still be suppressed. +    ].each do |offset, notification_sent, suppressed| +      #  +      # Advance in to the future! +      # +      Timecop.freeze(start_time + offset) + +      person.send_alert(alert.level, alert) + +      assert_equal(suppressed,    person.should_suppress?, "Suppressed (or not) when it should (or shouldn't) be at #{Time.now}.") + +      if notification_sent  +        assert_equal(1, $sent_notifications.length, "Notification not sent when it should have been at #{Time.now}.") +        # +        # Pop the notification off the buffer. +        # +        last_notification_sent_at = $sent_notifications.pop +        assert_equal(Time.now, person.notification_thresholds[60][-1], "Notification thresholds not updated at #{Time.now}.") +      else +        assert_equal(0, $sent_notifications.length, "Notification sent when it should not have been at #{Time.now}.")        end        logger_pop | 
