diff --git a/lib/serverspec/helper/type.rb b/lib/serverspec/helper/type.rb index a5cd5588..2c67193f 100644 --- a/lib/serverspec/helper/type.rb +++ b/lib/serverspec/helper/type.rb @@ -1,10 +1,12 @@ +require 'serverspec/type/base' require 'serverspec/type/service' require 'serverspec/type/package' +require 'serverspec/type/port' module Serverspec module Helper module Type - %w( service package ).each do |type| + %w( service package port ).each do |type| define_method type do |name| self.class.const_get('Serverspec').const_get('Type').const_get(type.capitalize).new(name) end diff --git a/lib/serverspec/matchers/be_listening.rb b/lib/serverspec/matchers/be_listening.rb index 97fef701..246a96e8 100644 --- a/lib/serverspec/matchers/be_listening.rb +++ b/lib/serverspec/matchers/be_listening.rb @@ -1,6 +1,10 @@ RSpec::Matchers.define :be_listening do match do |actual| - port = actual.gsub(/port\s+/, '') - backend.check_listening(example, port) + if actual.respond_to?(:listening?) + actual.listening? + else + port = actual.gsub(/port\s+/, '') + backend.check_listening(example, port) + end end end diff --git a/lib/serverspec/type/base.rb b/lib/serverspec/type/base.rb new file mode 100644 index 00000000..ed567889 --- /dev/null +++ b/lib/serverspec/type/base.rb @@ -0,0 +1,14 @@ +module Serverspec + module Type + class Base + def initialize name + @name = name + end + + def to_s + type = self.class.name.split(':')[-1] + %Q!#{type} "#{@name}"! + end + end + end +end diff --git a/lib/serverspec/type/package.rb b/lib/serverspec/type/package.rb index 429bda08..894c9fa7 100644 --- a/lib/serverspec/type/package.rb +++ b/lib/serverspec/type/package.rb @@ -1,10 +1,6 @@ module Serverspec module Type - class Package - def initialize name - @name = name - end - + class Package < Base def installed?(provider, version) if provider.nil? backend.check_installed(nil, @name) @@ -18,10 +14,6 @@ def installed?(provider, version) backend.send(check_method, nil, @name, version) end end - - def to_s - %Q!Package "#{@name}"! - end end end end diff --git a/lib/serverspec/type/port.rb b/lib/serverspec/type/port.rb new file mode 100644 index 00000000..55369c55 --- /dev/null +++ b/lib/serverspec/type/port.rb @@ -0,0 +1,9 @@ +module Serverspec + module Type + class Port < Base + def listening? + backend.check_listening(nil, @name) + end + end + end +end diff --git a/lib/serverspec/type/service.rb b/lib/serverspec/type/service.rb index 92d683e7..25aeff13 100644 --- a/lib/serverspec/type/service.rb +++ b/lib/serverspec/type/service.rb @@ -1,10 +1,6 @@ module Serverspec module Type - class Service - def initialize name - @name = name - end - + class Service < Base def enabled? backend.check_enabled(nil, @name) end @@ -22,10 +18,6 @@ def running? under backend.check_running(nil, @name) end end - - def to_s - %Q!Service "#{@name}"! - end end end end diff --git a/spec/darwin/port_spec.rb b/spec/darwin/port_spec.rb new file mode 100644 index 00000000..c81017fe --- /dev/null +++ b/spec/darwin/port_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +include Serverspec::Helper::Darwin + +describe 'Serverspec package matchers of Darwin family' do + it_behaves_like 'support port listening matcher', 80 +end diff --git a/spec/debian/port_spec.rb b/spec/debian/port_spec.rb new file mode 100644 index 00000000..f0a32504 --- /dev/null +++ b/spec/debian/port_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +include Serverspec::Helper::Debian + +describe 'Serverspec package matchers of Debian family' do + it_behaves_like 'support port listening matcher', 80 +end diff --git a/spec/gentoo/port_spec.rb b/spec/gentoo/port_spec.rb new file mode 100644 index 00000000..079d6d97 --- /dev/null +++ b/spec/gentoo/port_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +include Serverspec::Helper::Gentoo + +describe 'Serverspec package matchers of Gentoo family' do + it_behaves_like 'support port listening matcher', 80 +end diff --git a/spec/redhat/port_spec.rb b/spec/redhat/port_spec.rb new file mode 100644 index 00000000..8e265544 --- /dev/null +++ b/spec/redhat/port_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +include Serverspec::Helper::RedHat + +describe 'Serverspec package matchers of Red Hat family' do + it_behaves_like 'support port listening matcher', 80 +end diff --git a/spec/solaris/port_spec.rb b/spec/solaris/port_spec.rb new file mode 100644 index 00000000..8ed28fa3 --- /dev/null +++ b/spec/solaris/port_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +include Serverspec::Helper::Solaris + +describe 'Serverspec package matchers of Solaris family' do + it_behaves_like 'support port listening matcher', 80 +end diff --git a/spec/support/shared_port_examples.rb b/spec/support/shared_port_examples.rb new file mode 100644 index 00000000..c31086fe --- /dev/null +++ b/spec/support/shared_port_examples.rb @@ -0,0 +1,11 @@ +shared_examples_for 'support port listening matcher' do |num| + describe 'listening' do + describe port(num) do + it { should be_listening } + end + + describe port('invalid') do + it { should_not be_listening } + end + end +end