diff options
-rw-r--r-- | .fixtures.yml | 2 | ||||
-rw-r--r-- | .travis.yml | 14 | ||||
-rw-r--r-- | spec/classes/unattended_upgrades_spec.rb | 267 | ||||
-rw-r--r-- | templates/unattended-upgrades.erb | 6 |
4 files changed, 261 insertions, 28 deletions
diff --git a/.fixtures.yml b/.fixtures.yml index 7930e07..89a888a 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -6,6 +6,6 @@ fixtures: repositories: apt: repo: "https://github.com/puppetlabs/puppetlabs-apt.git" - ref: "db9daeb1831930f648b99e1867867ba6a071e68a" + ref: "2.0.0" symlinks: unattended_upgrades: "#{source_dir}" diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..bfa9f24 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +--- +language: ruby +sudo: false +bundler_args: --without system_tests +script: "bundle exec rake validate && bundle exec rake lint && bundle exec rake spec SPEC_OPTS='--format documentation'" +matrix: + fast_finish: true + include: + - rvm: 1.9.3 + env: PUPPET_GEM_VERSION="~> 3.0" + - rvm: 2.0.0 + env: PUPPET_GEM_VERSION="~> 3.0" +notifications: + email: false diff --git a/spec/classes/unattended_upgrades_spec.rb b/spec/classes/unattended_upgrades_spec.rb index d53f7d5..a61873b 100644 --- a/spec/classes/unattended_upgrades_spec.rb +++ b/spec/classes/unattended_upgrades_spec.rb @@ -10,31 +10,250 @@ describe 'unattended_upgrades' do :lsbrelease => '7.0.3', } } - it { should contain_package("unattended-upgrades") } - - it { should contain_apt__conf('unattended-upgrades').with({ - "require" => "Package[unattended-upgrades]", - }) - } - - it { should contain_apt__conf('periodic').with({ - "require" => "Package[unattended-upgrades]", - }) - } - - it { - should create_file(file_unattended).with({ - "owner" => "root", - "group" => "root", - "mode" => "0644", + context 'with defaults' do + it { should contain_package('unattended-upgrades') } + + it { should contain_apt__conf('unattended-upgrades').with({ + 'require' => 'Package[unattended-upgrades]', + }) + } + + it { should contain_apt__conf('periodic').with({ + 'require' => 'Package[unattended-upgrades]', + }) + } + + it { + should create_file(file_unattended).with({ + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + }) + } + + it { + should create_file(file_periodic).with({ + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + }) + } + + it { should contain_apt__conf('auto-upgrades').with({ + 'ensure' => 'absent', + }) + } + end + + context 'set all the things' do + let :params do + { + :age => { 'min' => 1 }, + :size => { 'max' => 1000 }, + :update => 5, + :upgradeable_packages => { + 'download_only' => 5, + 'debdelta' => 5, + }, + :upgrade => 5, + :auto => { + 'clean' => '5', + 'fix_interrupted_dpkg' => false, + 'remove' => false, + 'reboot' => false, + }, + :verbose => 1, + :legacy_origin => true, + :origins => [ 'bananas' ], + :blacklist => [ 'foo', 'bar' ], + :minimal_steps => false, + :install_on_shutdown => true, + :mail => { + 'to' => 'root@localhost', + 'only_on_error' => true, + }, + :dl_limit => 70, + } + end + it { should contain_package('unattended-upgrades') } + + it { should contain_apt__conf('unattended-upgrades').with({ + 'require' => 'Package[unattended-upgrades]', + }) + } + + it { should contain_apt__conf('periodic').with({ + 'require' => 'Package[unattended-upgrades]', }) - } + } - it { - should create_file(file_periodic).with({ - "owner" => "root", - "group" => "root", - "mode" => "0644", + it { + should create_file(file_unattended).with({ + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + }) + } + + it { + should create_file(file_periodic).with({ + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + }) + } + + it { should contain_apt__conf('auto-upgrades').with({ + 'ensure' => 'absent', }) - } + } + + end + + describe 'validation tests' do + context 'bad install_on_shutdown' do + let :params do + { + :install_on_shutdown => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a boolean/) + end + end + context 'bad legacy_origin' do + let :params do + { + :legacy_origin => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a boolean/) + end + end + context 'bad minimal_steps' do + let :params do + { + :minimal_steps => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a boolean/) + end + end + context 'bad blacklist' do + let :params do + { + :blacklist => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not an Array/) + end + end + context 'bad origins' do + let :params do + { + :origins => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not an Array/) + end + end + context 'bad auto' do + let :params do + { + :auto => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a Hash/) + end + end + context 'bad mail' do + let :params do + { + :mail => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a Hash/) + end + end + context 'bad backup' do + let :params do + { + :backup => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a Hash/) + end + end + context 'bad age' do + let :params do + { + :age => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a Hash/) + end + end + context 'bad size' do + let :params do + { + :size => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a Hash/) + end + end + context 'bad upgradeable_packages' do + let :params do + { + :upgradeable_packages => 'foo', + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a Hash/) + end + end + context 'bad mail[\'only_on_error\']' do + let :params do + { + :mail => { 'only_on_error' => 'foo' }, + } + end + it do + expect { + subject.call + }.to raise_error(Puppet::Error, /not a boolean/) + end + end + end end diff --git a/templates/unattended-upgrades.erb b/templates/unattended-upgrades.erb index 5007193..0b015fd 100644 --- a/templates/unattended-upgrades.erb +++ b/templates/unattended-upgrades.erb @@ -33,16 +33,16 @@ Unattended-Upgrade::MinimalSteps "<%= @minimal_steps.to_s %>"; // This will (obviously) make shutdown slower Unattended-Upgrade::InstallOnShutdown "<%= @install_on_shutdown.to_s %>"; -<% unless @mail_to.nil? %> +<% unless @mail['to'].nil? %> // Send email to this address for problems or packages upgrades // If empty or unset then no email is sent, make sure that you // have a working mail setup on your system. A package that provides // 'mailx' must be installed. -Unattended-Upgrade::Mail "<%= @mail_to %>"; +Unattended-Upgrade::Mail "<%= @mail['to'] %>"; // Set this value to "true" to get emails only on errors. Default // is to always send a mail if Unattended-Upgrade::Mail is set -Unattended-Upgrade::MailOnlyOnError "<%= @mail_only_on_error.to_s %>"; +Unattended-Upgrade::MailOnlyOnError "<%= @mail['only_on_error'].to_s %>"; <% end %> // Do automatic removal of new unused dependencies after the upgrade |