Add manage_service parameter for corosync
[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         context "on #{osfamily} family operatingsystems without managing the service" do
87           let(:facts) do
88             { :osfamily => osfamily }.merge default_facts
89           end
90           let(:params) do
91             {
92               'enable'         => true,
93               'manage_service' => false,
94             }
95           end
96           it { should include_class('concat::setup') }
97           it 'should install the haproxy package' do
98             subject.should contain_package('haproxy').with(
99               'ensure' => 'present'
100             )
101           end
102           it 'should install the haproxy service' do
103             subject.should_not contain_service('haproxy')
104           end
105         end
106       end
107     end
108     describe 'for OS-specific configuration' do
109       context 'only on Debian family operatingsystems' do
110         let(:facts) do
111           { :osfamily => 'Debian' }.merge default_facts
112         end
113         it 'should manage haproxy service defaults' do
114           subject.should contain_file('/etc/default/haproxy').with(
115             'before'  => 'Service[haproxy]',
116             'require' => 'Package[haproxy]'
117           )
118           verify_contents(subject, '/etc/default/haproxy', ['ENABLED=1'])
119         end
120       end
121       context 'only on RedHat family operatingsystems' do
122         let(:facts) do
123           { :osfamily => 'RedHat' }.merge default_facts
124         end
125       end
126     end
127   end
128   context 'on unsupported operatingsystems' do
129     let(:facts) do
130       { :osfamily => 'RainbowUnicorn' }.merge default_facts
131     end
132     it do
133       expect {
134         should contain_service('haproxy')
135       }.to raise_error(Puppet::Error, /operating system is not supported with the haproxy module/)
136     end
137   end
138 end