diff --git a/lib/fog/rackspace/models/monitoring/alarm.rb b/lib/fog/rackspace/models/monitoring/alarm.rb index fe7709c92..951c10435 100644 --- a/lib/fog/rackspace/models/monitoring/alarm.rb +++ b/lib/fog/rackspace/models/monitoring/alarm.rb @@ -27,16 +27,23 @@ module Fog def save requires :notification_plan_id + requires :entity_id if identity - data = service.update_alarm(get_entity_id, identity, params) + data = service.update_alarm(entity_id, identity, params) else options = params('check_type' => check_type, 'check_id' => check_id) - data = service.create_alarm(get_entity_id, options) + data = service.create_alarm(entity_id, options) + self.id = data.headers['X-Object-ID'] end true end + def destroy + requires :id + service.delete_alarm(entity.id,id) + end + end end diff --git a/tests/rackspace/models/monitoring/alarm_tests.rb b/tests/rackspace/models/monitoring/alarm_tests.rb new file mode 100644 index 000000000..2b582bbf8 --- /dev/null +++ b/tests/rackspace/models/monitoring/alarm_tests.rb @@ -0,0 +1,55 @@ +Shindo.tests('Fog::Rackspace::Monitoring | alarm', ['rackspace','rackspace_monitoring']) do + service = Fog::Rackspace::Monitoring.new + + tests('#alarm=') do + tests('should assign alarm id if object is a string') do + alarm = Fog::Rackspace::Monitoring::Alarm.new + id = "123123" + alarm.id = "123123" + returns(Fog::Rackspace::Monitoring::Alarm) { alarm.class } + returns(id) { alarm.id } + end + tests('should set check if object is a check') do + entity_id = "555" + entity = Fog::Rackspace::Monitoring::Entity.new(:id => entity_id) + check_id = "54321" + check = Fog::Rackspace::Monitoring::Check.new(:id => check_id) + check.entity = entity + alarm = Fog::Rackspace::Monitoring::Alarm.new + alarm.check_id = check.id + + returns(Fog::Rackspace::Monitoring::Alarm) { alarm.class } + returns(check_id) { alarm.check_id } + end + end + + begin + @entity = service.entities.create :label => "fog_#{Time.now.to_i.to_s}" + @check = service.checks.create(CHECK_CREATE_OPTIONS.merge( + :label => "fog_#{Time.now.to_i.to_s}", + :entity => @entity) ) + np = "npTechnicalContactsEmail" + options = CHECK_CREATE_OPTIONS.merge( + :label => "fog_#{Time.now.to_i.to_s}", + :entity => @entity, + :entity_id => @entity.id, + :check => @check, + :check_id => @check.id, + :notification_plan_id => np + ) + collection = service.alarms(:entity => @entity) + model_tests(collection, options, false) do + tests('#update').succeeds do + new_label = "new_label_#{Time.now.to_i.to_s}" + @instance.label = new_label + @instance.save + @instance.label = nil # blank out label just to make sure + @instance.reload + returns(new_label) { @instance.label} + end + + end + ensure + @entity.destroy if @entity + end +end