Update specs for haproxy base class with debian support
authorHunter Haugen <h.haugen@gmail.com>
Wed, 29 Aug 2012 20:50:25 +0000 (13:50 -0700)
committerHunter Haugen <h.haugen@gmail.com>
Wed, 29 Aug 2012 21:12:48 +0000 (14:12 -0700)
Many of the tests that apply to the RedHat family also apply to Debian.
The tests have been updated to reflect this, as well as to capture the
minor differences between the two platforms.

This commit incorperates the changes from glarizza#7 and glarizza#12

Not all tests pass because I found it pertinent to update the spec
where the actual module code was lacking.

spec/classes/haproxy_spec.rb

index 46c8124..fa171f3 100644 (file)
 require 'spec_helper'
 
 describe 'haproxy', :type => :class do
-
-  context 'on Redhat family operatingsystems' do
-    let(:facts) do
-      {
-        :osfamily       => 'Redhat',
-        :concat_basedir => '/dne'
-      }
-    end
-    it { should include_class('concat::setup') }
-
-    it 'should install the haproxy package' do
-      subject.should contain_package('haproxy').with(
-        'ensure' => 'present'
-      )
-    end
-
-    it 'should install the haproxy service' do
-      subject.should contain_service('haproxy').with(
-        'ensure'     => 'running',
-        'enable'     => 'true',
-        'hasrestart' => 'true',
-        'hasstatus'  => 'true'
-      )
-    end
-
-    it 'should set up /etc/haproxy/haproxy.cfg as a concat resource' do
-      subject.should contain_concat('/etc/haproxy/haproxy.cfg').with(
-        'owner' => '0',
-        'group' => '0',
-        'mode'  => '0644'
-      )
-    end
-    
-    it 'should contain a header concat fragment' do
-      subject.should contain_concat__fragment('00-header').with(
-        'target'  => '/etc/haproxy/haproxy.cfg',
-        'order'   => '01',
-        'content' => "# This file managed by Puppet\n"
-      )
+  let(:default_facts) do
+    {
+      :concat_basedir => '/dne',
+      :ipaddress      => '10.10.10.10'
+    }
+  end
+  context 'on supported platforms' do
+    describe 'for OS-agnostic configuration' do
+      ['Debian', 'RedHat'].each do |osfamily|
+        context "on #{osfamily} family operatingsystems" do
+          let(:facts) do
+            { :osfamily => osfamily }.merge default_facts
+          end
+          let(:params) do
+            {'enable' => true}
+          end
+          it { should include_class('concat::setup') }
+          it 'should install the haproxy package' do
+            subject.should contain_package('haproxy').with(
+              'ensure' => 'present'
+            )
+          end
+          it 'should install the haproxy service' do
+            subject.should contain_service('haproxy').with(
+              'ensure'     => 'running',
+              'enable'     => 'true',
+              'hasrestart' => 'true',
+              'hasstatus'  => 'true',
+              'require'    => [
+                'Concat[/etc/haproxy/haproxy.cfg]',
+                'File[/var/lib/haproxy]'
+              ]
+            )
+          end
+          it 'should set up /etc/haproxy/haproxy.cfg as a concat resource' do
+            subject.should contain_concat('/etc/haproxy/haproxy.cfg').with(
+              'owner' => '0',
+              'group' => '0',
+              'mode'  => '0644'
+            )
+          end
+          it 'should manage the chroot directory' do
+            subject.should contain_file('/var/lib/haproxy').with(
+              'ensure' => 'directory'
+            )
+          end
+          it 'should contain a header concat fragment' do
+            subject.should contain_concat__fragment('00-header').with(
+              'target'  => '/etc/haproxy/haproxy.cfg',
+              'order'   => '01',
+              'content' => "# This file managed by Puppet\n"
+            )
+          end
+          it 'should contain a haproxy-base concat fragment' do
+            subject.should contain_concat__fragment('haproxy-base').with(
+              'target'  => '/etc/haproxy/haproxy.cfg',
+              'order'   => '10'
+            )
+          end
+          describe 'Base concat fragment contents' do
+            let(:contents) { param_value(subject, 'concat::fragment', 'haproxy-base', 'content').split("\n") }
+            it 'should contain global and defaults sections' do
+              contents.should include('global')
+              contents.should include('defaults')
+            end
+            it 'should log to an ip address for local0' do
+              contents.should be_any { |match| match =~ /  log  \d+(\.\d+){3} local0/ }
+            end
+            it 'should specify the default chroot' do
+              contents.should include('  chroot  /var/lib/haproxy')
+            end
+            it 'should specify the correct user' do
+              contents.should include('  user  haproxy')
+            end
+            it 'should specify the correct group' do
+              contents.should include('  group  haproxy')
+            end
+            it 'should specify the correct pidfile' do
+              contents.should include('  pidfile  /var/run/haproxy.pid')
+            end
+          end
+        end
+      end
     end
-    
-    it 'should contain a haproxy-base concat fragment' do
-      subject.should contain_concat__fragment('haproxy-base').with(
-        'target'  => '/etc/haproxy/haproxy.cfg',
-        'order'   => '10',
-        'content' => "global\n  chroot  /var/lib/haproxy\n  daemon  \n  group  haproxy\n  log   local0\n  maxconn  4000\n  pidfile  /var/run/haproxy.pid\n  stats  socket /var/lib/haproxy/stats\n  user  haproxy\n\ndefaults\n  log  global\n  maxconn  8000\n  option  redispatch\n  retries  3\n  stats  enable\n  timeout  http-request 10s\n  timeout  queue 1m\n  timeout  connect 10s\n  timeout  client 1m\n  timeout  server 1m\n  timeout  check 10s\n"
-      )
+    describe 'for OS-specific configuration' do
+      context 'only on Debian family operatingsystems' do
+        let(:facts) do
+          { :osfamily => 'Debian' }.merge default_facts
+        end
+        it 'should manage haproxy service defaults' do
+          subject.should contain_file('/etc/default/haproxy').with(
+            'before'  => 'Service[haproxy]',
+            'require' => 'Package[haproxy]'
+          )
+          verify_contents(subject, '/etc/default/haproxy', ['ENABLED=1'])
+        end
+      end
+      context 'only on RedHat family operatingsystems' do
+        let(:facts) do
+          { :osfamily => 'RedHat' }.merge default_facts
+        end
+      end
     end
   end
-  
-  context 'on non-Redhat family operatingsystems' do
+  context 'on unsupported operatingsystems' do
     let(:facts) do
-      { :osfamily => 'Debian' }
+      { :osfamily => 'RainbowUnicorn' }.merge default_facts
     end
     it do
       expect {