puppet-barometer: add puppet module to barometer
[barometer.git] / puppet-barometer / spec / classes / barometer_db_spec.rb
1 require 'spec_helper'
2
3 describe 'barometer::db' do
4
5   shared_examples 'barometer::db' do
6     context 'with default parameters' do
7       it { is_expected.to contain_barometer_config('database/connection').with_value('sqlite:////var/lib/barometer/barometer.sqlite') }
8       it { is_expected.to contain_barometer_config('database/idle_timeout').with_value('<SERVICE DEFAULT>') }
9       it { is_expected.to contain_barometer_config('database/min_pool_size').with_value('<SERVICE DEFAULT>') }
10       it { is_expected.to contain_barometer_config('database/db_max_retries').with_value('<SERVICE DEFAULT>') }
11       it { is_expected.to contain_barometer_config('database/max_retries').with_value('<SERVICE DEFAULT>') }
12       it { is_expected.to contain_barometer_config('database/retry_interval').with_value('<SERVICE DEFAULT>') }
13       it { is_expected.to contain_barometer_config('database/max_pool_size').with_value('<SERVICE DEFAULT>') }
14       it { is_expected.to contain_barometer_config('database/max_overflow').with_value('<SERVICE DEFAULT>') }
15     end
16
17     context 'with specific parameters' do
18       let :params do
19         { :database_connection     => 'mysql+pymysql://barometer:barometer@localhost/barometer',
20           :database_idle_timeout   => '3601',
21           :database_min_pool_size  => '2',
22           :database_db_max_retries => '-1',
23           :database_max_retries    => '11',
24           :database_retry_interval => '11',
25           :database_max_pool_size  => '11',
26           :database_max_overflow   => '21',
27         }
28       end
29
30       it { is_expected.to contain_barometer_config('database/connection').with_value('mysql+pymysql://barometer:barometer@localhost/barometer') }
31       it { is_expected.to contain_barometer_config('database/idle_timeout').with_value('3601') }
32       it { is_expected.to contain_barometer_config('database/min_pool_size').with_value('2') }
33       it { is_expected.to contain_barometer_config('database/db_max_retries').with_value('-1') }
34       it { is_expected.to contain_barometer_config('database/max_retries').with_value('11') }
35       it { is_expected.to contain_barometer_config('database/retry_interval').with_value('11') }
36       it { is_expected.to contain_barometer_config('database/max_pool_size').with_value('11') }
37       it { is_expected.to contain_barometer_config('database/max_overflow').with_value('21') }
38     end
39
40     context 'with postgresql backend' do
41       let :params do
42         { :database_connection     => 'postgresql://barometer:barometer@localhost/barometer', }
43       end
44
45       it 'install the proper backend package' do
46         is_expected.to contain_package('python-psycopg2').with(:ensure => 'present')
47       end
48
49     end
50
51     context 'with MySQL-python library as backend package' do
52       let :params do
53         { :database_connection     => 'mysql://barometer:barometer@localhost/barometer', }
54       end
55
56       it { is_expected.to contain_package('python-mysqldb').with(:ensure => 'present') }
57     end
58
59     context 'with incorrect database_connection string' do
60       let :params do
61         { :database_connection     => 'foodb://barometer:barometer@localhost/barometer', }
62       end
63
64       it_raises 'a Puppet::Error', /validate_re/
65     end
66
67     context 'with incorrect pymysql database_connection string' do
68       let :params do
69         { :database_connection     => 'foo+pymysql://barometer:barometer@localhost/barometer', }
70       end
71
72       it_raises 'a Puppet::Error', /validate_re/
73     end
74
75   end
76
77   shared_examples_for 'barometer::db on Debian' do
78     context 'using pymysql driver' do
79       let :params do
80         { :database_connection     => 'mysql+pymysql://barometer:barometer@localhost/barometer', }
81       end
82
83       it 'install the proper backend package' do
84         is_expected.to contain_package('db_backend_package').with(
85           :ensure => 'present',
86           :name   => 'python-pymysql',
87           :tag    => 'openstack'
88         )
89       end
90     end
91   end
92
93   shared_examples_for 'barometer::db on RedHat' do
94     context 'using pymysql driver' do
95       let :params do
96         { :database_connection     => 'mysql+pymysql://barometer:barometer@localhost/barometer', }
97       end
98
99       it 'install the proper backend package' do
100         is_expected.not_to contain_package('db_backend_package')
101       end
102     end
103   end
104
105   on_supported_os({
106     :supported_os   => OSDefaults.get_supported_os
107   }).each do |os,facts|
108     context "on #{os}" do
109       let (:facts) do
110         facts.merge!(OSDefaults.get_facts())
111       end
112
113       it_configures 'barometer::db'
114       it_configures "barometer::db on #{facts[:osfamily]}"
115     end
116   end
117 end