From db9367c6e762b6f9c1e020aafd7532b1f0b75286 Mon Sep 17 00:00:00 2001 From: Urs Roesch Date: Sun, 21 Feb 2016 01:13:01 +0100 Subject: [PATCH] Adding with_name matcher to be_monitored_by Summary: Added mainly for tinc monitoring where one can define multiple VPN network profiles on a host. E.g. defining a monit process called 'tinc-family' and another called 'tinc-friends' to watch each of the VPNs. To monitor them precisely use ...is_monitored_by('monit').with_name('tinc-family') Test: Added a spec test to ensure it is working. --- lib/serverspec/matcher.rb | 1 + lib/serverspec/matcher/be_monitored_by.rb | 17 +++++++++++++++++ lib/serverspec/type/service.rb | 6 ++++-- spec/type/base/service_spec.rb | 5 +++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 lib/serverspec/matcher/be_monitored_by.rb 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