Merge pull request #282 from laurenrother/security
[puppet-modules/puppetlabs-apt.git] / spec / classes / unattended_upgrades_spec.rb
index 17a21caff1623688703d725f1d9c47552400e857..a2fb48b12600e5bc0e3fbc6a43a5e22fa1c8c8d1 100644 (file)
@@ -2,180 +2,290 @@ require 'spec_helper'
 describe 'apt::unattended_upgrades', :type => :class do
   let(:file_unattended) { '/etc/apt/apt.conf.d/50unattended-upgrades' }
   let(:file_periodic) { '/etc/apt/apt.conf.d/10periodic' }
+  let(:facts) { { :lsbdistid => 'Debian' } }
 
   it { should contain_package("unattended-upgrades") }
 
-  it { 
+  it {
     should create_file("/etc/apt/apt.conf.d/50unattended-upgrades").with({
       "owner"   => "root",
       "group"   => "root",
       "mode"    => "0644",
+      "require" => "Package[unattended-upgrades]",
     })
   }
-  
-  it { 
+
+  it {
     should create_file("/etc/apt/apt.conf.d/10periodic").with({
       "owner"   => "root",
       "group"   => "root",
       "mode"    => "0644",
+      "require" => "Package[unattended-upgrades]",
     })
   }
 
-  describe "with origins => ['ubuntu:precise-security']" do
-    let :params do
-      { :origins => ['ubuntu:precise-security'] }
+  describe "origins" do
+    describe 'on Debian' do
+      default_facts = { :lsbdistid => 'Debian' }
+      context 'defaults' do
+        let :facts do default_facts end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Origins-Pattern/
+          ).with_content(
+            /"origin=Debian,archive=stable,label=Debian-Security";/
+          )
+        }
+      end
+      context 'defaults with custom origin' do
+        let :facts do default_facts end
+        let :params do { :origins => ['bananana']} end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Origins-Pattern/
+          ).with_content(
+            /"bananana";/
+          )
+        }
+      end
+      context 'defaults with invalid origin' do
+        let :facts do default_facts end
+        let :params do { :origins => 'bananana'} end
+        it {
+          expect {subject}.to raise_error(/is not an Array/)
+        }
+      end
+      context 'squeeze' do
+        let :facts do default_facts.merge({:lsbdistcodename => 'squeeze'}) end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Allowed-Origins/
+          ).with_content(
+            /"\${distro_id} \${distro_codename}-security";/
+          ).with_content(
+            /"\${distro_id} oldstable";/
+          )
+        }
+      end
+      context 'wheezy' do
+        let :facts do default_facts.merge({:lsbdistcodename => 'wheezy'}) end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Origins-Pattern/
+          ).with_content(
+            /"origin=Debian,archive=stable,label=Debian-Security";/
+          )
+        }
+      end
+    end
+
+    describe 'on Ubuntu' do
+      default_facts = { :lsbdistid => 'Ubuntu' }
+      context 'default' do
+        let :facts do default_facts end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Allowed-Origins/
+          ).with_content(
+            /"\${distro_id}\:\${distro_codename}-security";/
+          )
+        }
+      end
+      context 'lucid' do
+        let :facts do default_facts.merge({:lsbdistcodename => 'lucid'}) end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Allowed-Origins/
+          ).with_content(
+            /"\${distro_id} \${distro_codename}-security";/
+          )
+        }
+      end
+      context 'precise' do
+        let :facts do default_facts.merge({:lsbdistcodename => 'precise'}) end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Allowed-Origins/
+          ).with_content(
+            /"\${distro_id}\:\${distro_codename}-security";/
+          )
+        }
+      end
+      context 'trusty' do
+        let :facts do default_facts.merge({:lsbdistcodename => 'trusty'}) end
+        it {
+          should contain_file(file_unattended).with_content(
+            /^Unattended-Upgrade::Allowed-Origins/
+          ).with_content(
+            /"\${distro_id}\:\${distro_codename}-security";/
+          )
+        }
+      end
     end
-    it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Allowed-Origins \{\n\t"ubuntu:precise-security";\n\};$/) }
   end
-  
-  describe "with blacklist => []" do
-    let :params do
-      { :blacklist => [] }
+
+  describe "blacklist" do
+    describe "with param defaults" do
+      let(:params) {{ }}
+      it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Package-Blacklist \{\n\};$/) }
+    end
+
+    describe "with blacklist => []" do
+      let :params do
+        { :blacklist => ['libc6', 'libc6-dev'] }
+      end
+      it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Package-Blacklist \{\n\t"libc6";\n\t"libc6-dev";\n\};$/) }
     end
-    it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Package-Blacklist \{\n\};$/) }
   end
-  
+
   describe "with update => 2" do
     let :params do
       { :update => "2" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::Update-Package-Lists "2";$/) }
   end
-  
+
   describe "with download => 2" do
     let :params do
       { :download => "2" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::Download-Upgradeable-Packages "2";$/) }
   end
-  
+
   describe "with upgrade => 2" do
     let :params do
       { :upgrade => "2" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::Unattended-Upgrade "2";$/) }
   end
-  
+
   describe "with autoclean => 2" do
     let :params do
       { :autoclean => "2" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::AutocleanInterval "2";$/) }
   end
-  
+
   describe "with auto_fix => false" do
     let :params do
       { :auto_fix => false }
     end
     it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::AutoFixInterruptedDpkg "false";$/) }
   end
-  
+
   describe "with minimal_steps => true" do
     let :params do
       { :minimal_steps => true }
     end
     it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::MinimalSteps "true";$/) }
   end
-  
+
   describe "with install_on_shutdown => true" do
     let :params do
       { :install_on_shutdown => true }
     end
     it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::InstallOnShutdown "true";$/) }
   end
-  
-  describe "with mail_to => NONE" do
-    let :params do
-      { :mail_to => "NONE" }
+
+  describe "mail_to" do
+    describe "param defaults" do
+      let(:params) {{ }}
+      it { should_not contain_file(file_unattended).with_content(/^Unattended-Upgrade::Mail /) }
+      it { should_not contain_file(file_unattended).with_content(/^Unattended-Upgrade::MailOnlyOnError /) }
     end
-    it { should contain_file(file_unattended).with_content(/^\/\/ 'mailx' must be installed.\n$/) }
-    it { should contain_file(file_unattended).with_content(/^\/\/ is to always send a mail if Unattended-Upgrade::Mail is set\n$/) }
-  end
-  
-  describe "with mail_to => user@website, mail_only_on_error => true" do
-    let :params do
-      { :mail_to => "user@website",
-        :mail_only_on_error => true }
+
+    describe "with mail_to => user@website, mail_only_on_error => true" do
+      let :params do
+        { :mail_to => "user@website",
+          :mail_only_on_error => true }
+      end
+      it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Mail "user@website";$/) }
+      it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::MailOnlyOnError "true";$/) }
     end
-    it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Mail "user@website";$/) }
-    it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::MailOnlyOnError "true";$/) }
   end
-  
+
   describe "with remove_unused => false" do
     let :params do
       { :remove_unused => false }
     end
     it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Remove-Unused-Dependencies "false";$/) }
   end
-  
+
   describe "with auto_reboot => true" do
     let :params do
       { :auto_reboot => true }
     end
     it { should contain_file(file_unattended).with_content(/^Unattended-Upgrade::Automatic-Reboot "true";$/) }
   end
-  
-  describe "with dl_limit => 70" do
-    let :params do
-      { :dl_limit => "70" }
+
+  describe "dl_limit" do
+    describe "param defaults" do
+      let(:params) {{ }}
+      it { should_not contain_file(file_unattended).with_content(/^Acquire::http::Dl-Limit /) }
+    end
+
+    describe "with dl_limit => 70" do
+      let :params do
+        { :dl_limit => "70" }
+      end
+      it { should contain_file(file_unattended).with_content(/^Acquire::http::Dl-Limit "70";$/) }
     end
-    it { should contain_file(file_unattended).with_content(/^Acquire::http::Dl-Limit "70";$/) }
   end
-  
+
   describe "with enable => 0" do
     let :params do
       { :enable => "0" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::Enable "0";$/) }
   end
-  
+
   describe "with backup_interval => 1" do
     let :params do
       { :backup_interval => "1" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::BackUpArchiveInterval "1";$/) }
   end
-  
+
   describe "with backup_level => 0" do
     let :params do
       { :backup_level => "0" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::BackUpLevel "0";$/) }
   end
-  
+
   describe "with max_age => 1" do
     let :params do
       { :max_age => "1" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::MaxAge "1";$/) }
   end
-  
+
   describe "with min_age => 1" do
     let :params do
       { :min_age => "1" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::MinAge "1";$/) }
   end
-  
+
   describe "with max_size => 1" do
     let :params do
       { :max_size => "1" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::MaxSize "1";$/) }
   end
-  
+
   describe "with download_delta => 2" do
     let :params do
       { :download_delta => "2" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::Download-Upgradeable-Packages-Debdelta "2";$/) }
   end
-  
+
   describe "with verbose => 2" do
     let :params do
       { :verbose => "2" }
     end
     it { should contain_file(file_periodic).with_content(/^APT::Periodic::Verbose "2";$/) }
   end
-  
+
 end