fa171f31d8b0c49e5cf5c4515774504543cd0d95
[puppet_haproxy.git] / spec / classes / haproxy_spec.rb
1 require 'spec_helper'
2
3 describe 'haproxy', :type => :class do
4   let(:default_facts) do
5     {
6       :concat_basedir => '/dne',
7       :ipaddress      => '10.10.10.10'
8     }
9   end
10   context 'on supported platforms' do
11     describe 'for OS-agnostic configuration' do
12       ['Debian', 'RedHat'].each do |osfamily|
13         context "on #{osfamily} family operatingsystems" do
14           let(:facts) do
15             { :osfamily => osfamily }.merge default_facts
16           end
17           let(:params) do
18             {'enable' => true}
19           end
20           it { should include_class('concat::setup') }
21           it 'should install the haproxy package' do
22             subject.should contain_package('haproxy').with(
23               'ensure' => 'present'
24             )
25           end
26           it 'should install the haproxy service' do
27             subject.should contain_service('haproxy').with(
28               'ensure'     => 'running',
29               'enable'     => 'true',
30               'hasrestart' => 'true',
31               'hasstatus'  => 'true',
32               'require'    => [
33                 'Concat[/etc/haproxy/haproxy.cfg]',
34                 'File[/var/lib/haproxy]'
35               ]
36             )
37           end
38           it 'should set up /etc/haproxy/haproxy.cfg as a concat resource' do
39             subject.should contain_concat('/etc/haproxy/haproxy.cfg').with(
40               'owner' => '0',
41               'group' => '0',
42               'mode'  => '0644'
43             )
44           end
45           it 'should manage the chroot directory' do
46             subject.should contain_file('/var/lib/haproxy').with(
47               'ensure' => 'directory'
48             )
49           end
50           it 'should contain a header concat fragment' do
51             subject.should contain_concat__fragment('00-header').with(
52               'target'  => '/etc/haproxy/haproxy.cfg',
53               'order'   => '01',
54               'content' => "# This file managed by Puppet\n"
55             )
56           end
57           it 'should contain a haproxy-base concat fragment' do
58             subject.should contain_concat__fragment('haproxy-base').with(
59               'target'  => '/etc/haproxy/haproxy.cfg',
60               'order'   => '10'
61             )
62           end
63           describe 'Base concat fragment contents' do
64             let(:contents) { param_value(subject, 'concat::fragment', 'haproxy-base', 'content').split("\n") }
65             it 'should contain global and defaults sections' do
66               contents.should include('global')
67               contents.should include('defaults')
68             end
69             it 'should log to an ip address for local0' do
70               contents.should be_any { |match| match =~ /  log  \d+(\.\d+){3} local0/ }
71             end
72             it 'should specify the default chroot' do
73               contents.should include('  chroot  /var/lib/haproxy')
74             end
75             it 'should specify the correct user' do
76               contents.should include('  user  haproxy')
77             end
78             it 'should specify the correct group' do
79               contents.should include('  group  haproxy')
80             end
81             it 'should specify the correct pidfile' do
82               contents.should include('  pidfile  /var/run/haproxy.pid')
83             end
84           end
85         end
86       end
87     end
88     describe 'for OS-specific configuration' do
89       context 'only on Debian family operatingsystems' do
90         let(:facts) do
91           { :osfamily => 'Debian' }.merge default_facts
92         end
93         it 'should manage haproxy service defaults' do
94           subject.should contain_file('/etc/default/haproxy').with(
95             'before'  => 'Service[haproxy]',
96             'require' => 'Package[haproxy]'
97           )
98           verify_contents(subject, '/etc/default/haproxy', ['ENABLED=1'])
99         end
100       end
101       context 'only on RedHat family operatingsystems' do
102         let(:facts) do
103           { :osfamily => 'RedHat' }.merge default_facts
104         end
105       end
106     end
107   end
108   context 'on unsupported operatingsystems' do
109     let(:facts) do
110       { :osfamily => 'RainbowUnicorn' }.merge default_facts
111     end
112     it do
113       expect {
114         should contain_service('haproxy')
115       }.to raise_error(Puppet::Error, /operating system is not supported with the haproxy module/)
116     end
117   end
118 end