diff --git a/lib/serverspec/matcher.rb b/lib/serverspec/matcher.rb index f04e0cbf..203bb661 100644 --- a/lib/serverspec/matcher.rb +++ b/lib/serverspec/matcher.rb @@ -22,6 +22,7 @@ # service require 'serverspec/matcher/be_enabled' require 'serverspec/matcher/be_running' +require 'serverspec/matcher/be_monitored_by' # user require 'serverspec/matcher/belong_to_group' diff --git a/lib/serverspec/matcher/be_monitored_by.rb b/lib/serverspec/matcher/be_monitored_by.rb new file mode 100644 index 00000000..14a07b51 --- /dev/null +++ b/lib/serverspec/matcher/be_monitored_by.rb @@ -0,0 +1,17 @@ +RSpec::Matchers.define :be_monitored_by do |monitor| + match do |service| + service.monitored_by?(monitor, @monitor_name) + end + description do + if @monitor_name + "be monitored by #{monitor} with name #{@monitor_name}" + else + "be monitored by #{monitor}" + end + end + + chain :with_name do |name| + @monitor_name = (name ? name : nil) + end + +end diff --git a/lib/serverspec/type/service.rb b/lib/serverspec/type/service.rb index bbe457fc..a12dd733 100644 --- a/lib/serverspec/type/service.rb +++ b/lib/serverspec/type/service.rb @@ -25,9 +25,11 @@ def running?(under) end end - def monitored_by?(monitor) + def monitored_by?(monitor, monitor_name) check_method = "check_service_is_monitored_by_#{monitor}".to_sym - res = @runner.send(check_method, @name) + # use the with_name value if set instead of the service name + monitor_name = (monitor_name ? monitor_name : @name) + res = @runner.send(check_method, monitor_name) end def has_property?(property) diff --git a/spec/type/base/service_spec.rb b/spec/type/base/service_spec.rb index 8b88eba3..84cb5fc1 100644 --- a/spec/type/base/service_spec.rb +++ b/spec/type/base/service_spec.rb @@ -36,6 +36,11 @@ it { should be_monitored_by(:monit) } end +describe service('tinc') do + let(:stdout) { "Process 'tinc-myvpn'\r\n status running\r\n monitoring status monitored" } + it { should be_monitored_by(:monit).with_name('tinc-myvpn') } +end + describe service('unicorn') do it { should be_monitored_by(:god) } end