Convert to use apt::setting instead of file resources
[puppet-modules/puppetlabs-apt.git] / spec / defines / source_spec.rb
index e93137e8e4e32a1ece8895f63a38e933b6445272..ad986e96843b28ac50efe2138d634092908fa608 100644 (file)
 require 'spec_helper'
+
 describe 'apt::source', :type => :define do
+  GPG_KEY_ID = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
+
+  let :pre_condition do
+    'class { "apt": }'
+  end
+
   let :title do
     'my_source'
   end
 
-  let :default_params do
-    {
-      :location           => '',
-      :release            => 'karmic',
-      :repos              => 'main',
-      :include_src        => true,
-      :required_packages  => false,
-      :key                => false,
-      :key_server         => 'keyserver.ubuntu.com',
-      :key_content        => false,
-      :key_source         => false,
-      :pin                => false
-    }
-  end
+  context 'mostly defaults' do
+    let :facts do
+      {
+        :lsbdistid       => 'Debian',
+        :lsbdistcodename => 'wheezy',
+        :osfamily        => 'Debian'
+      }
+    end
 
-  [{},
-   {
-      :location           => 'somewhere',
-      :release            => 'precise',
-      :repos              => 'security',
-      :include_src        => false,
-      :required_packages  => 'apache',
-      :key                => 'key_name',
-      :key_server         => 'keyserver.debian.com',
-      :pin                => '600',
-      :key_content        => 'ABCD1234'
-    },
-    {
-      :key                => 'key_name',
-      :key_server         => 'keyserver.debian.com',
-      :key_content        => false,
-    }
-  ].each do |param_set|
-    describe "when #{param_set == {} ? "using default" : "specifying"} class parameters" do
-      let :param_hash do
-        default_params.merge(param_set)
-      end
+    let :params do
+      {
+        'include_deb' => false,
+        'include_src' => true,
+      }
+    end
 
-      let :facts do
-        {:lsbdistcodename => 'karmic'}
-      end
+    it { is_expected.to contain_apt__setting('list-my_source').that_notifies('Exec[apt_update]').with({
+      'ensure' => 'present',
+    }).with_content(/# my_source\ndeb-src  wheezy main\n/)
+    }
+  end
 
-      let :params do
-        param_set
-      end
+  context 'no defaults' do
+    let :facts do
+      {
+        :lsbdistid       => 'Debian',
+        :lsbdistcodename => 'wheezy',
+        :osfamily        => 'Debian'
+      }
+    end
+    let :params do
+      {
+        'comment'           => 'foo',
+        'location'          => 'http://debian.mirror.iweb.ca/debian/',
+        'release'           => 'sid',
+        'repos'             => 'testing',
+        'include_src'       => false,
+        'key'               => GPG_KEY_ID,
+        'key_server'        => 'pgp.mit.edu',
+        'key_content'       => 'GPG key content',
+        'key_source'        => 'http://apt.puppetlabs.com/pubkey.gpg',
+        'pin'               => '10',
+        'architecture'      => 'x86_64',
+        'trusted_source'    => true,
+      }
+    end
 
-      let :filename do
-        "/etc/apt/sources.list.d/#{title}.list"
-      end
+    it { is_expected.to contain_apt__setting('list-my_source').that_notifies('Exec[apt_update]').with({
+      'ensure' => 'present',
+    }).with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(/deb-src/)
+    }
 
-      let :content do
-        content = "# #{title}"
-        content << "\ndeb #{param_hash[:location]} #{param_hash[:release]} #{param_hash[:repos]}\n"
-        if param_hash[:include_src]
-          content << "deb-src #{param_hash[:location]} #{param_hash[:release]} #{param_hash[:repos]}\n"
-        end
-        content
-      end
+    it { is_expected.to contain_apt__pin('my_source').that_comes_before('Apt::Setting[list-my_source]').with({
+      'ensure'   => 'present',
+      'priority' => '10',
+      'origin'   => 'debian.mirror.iweb.ca',
+    })
+    }
 
-      it { should contain_apt__params }
+    it { is_expected.to contain_apt__key("Add key: #{GPG_KEY_ID} from Apt::Source my_source").that_comes_before('Apt::Setting[list-my_source]').with({
+      'ensure' => 'present',
+        'key'  => GPG_KEY_ID,
+        'key_server' => 'pgp.mit.edu',
+        'key_content' => 'GPG key content',
+        'key_source' => 'http://apt.puppetlabs.com/pubkey.gpg',
+    })
+    }
+  end
 
-      it { should contain_file("#{title}.list").with({
-          'path'      => filename,
-          'ensure'    => "file",
-          'owner'     => "root",
-          'group'     => "root",
-          'mode'      => 644,
-          'content'   => content
-        })
+  context 'trusted_source true' do
+    let :facts do
+      {
+        :lsbdistid       => 'Debian',
+        :lsbdistcodename => 'wheezy',
+        :osfamily        => 'Debian'
       }
-
-      it {
-        if param_hash[:pin]
-          should contain_apt__pin(param_hash[:release]).with({
-            "priority"  => param_hash[:pin],
-            "before"    => "File[#{title}.list]"
-          })
-        else
-          should_not contain_apt__pin(param_hash[:release]).with({
-            "priority"  => param_hash[:pin],
-            "before"    => "File[#{title}.list]"
-          })
-        end
+    end
+    let :params do
+      {
+        'include_src'    => false,
+        'trusted_source' => true,
       }
+    end
 
-      it {
-        should contain_exec("#{title} apt update").with({
-          "command"     => "/usr/bin/apt-get update",
-          "subscribe"   => "File[#{title}.list]",
-          "refreshonly" => true
-        })
-      }
+    it { is_expected.to contain_apt__setting('list-my_source').that_notifies('Exec[apt_update]').with({
+      'ensure' => 'present',
+    }).with_content(/# my_source\ndeb \[trusted=yes\]  wheezy main\n/)
+    }
+  end
 
-      it {
-        if param_hash[:required_packages]
-          should contain_exec("Required packages: '#{param_hash[:required_packages]}' for #{title}").with({
-            "command" => "/usr/bin/apt-get -y install #{param_hash[:required_packages]}",
-            "subscribe"   => "File[#{title}.list]",
-            "refreshonly" => true
-          })
-        else
-          should_not contain_exec("Required packages: '#{param_hash[:required_packages]}' for #{title}").with({
-            "command"     => "/usr/bin/apt-get -y install #{param_hash[:required_packages]}",
-            "subscribe"   => "File[#{title}.list]",
-            "refreshonly" => true
-          })
-        end
+  context 'architecture equals x86_64' do
+    let :facts do
+      {
+        :lsbdistid       => 'Debian',
+        :lsbdistcodename => 'wheezy',
+        :osfamily        => 'Debian'
       }
+    end
+    let :params do
+      {
+        'include_deb'  => false,
+        'include_src'  => true,
+        'architecture' => 'x86_64',
+      }
+    end
 
-      it {
-        if param_hash[:key]
-          should contain_apt__key("Add key: #{param_hash[:key]} from Apt::Source #{title}").with({
-            "key"         => param_hash[:key],
-            "ensure"      => :present,
-            "key_server"  => param_hash[:key_server],
-            "key_content" => param_hash[:key_content],
-            "key_source"  => param_hash[:key_source],
-            "before"      => "File[#{title}.list]"
-          })
-        else
-          should_not contain_apt__key("Add key: #{param_hash[:key]} from Apt::Source #{title}").with({
-            "key"         => param_hash[:key],
-            "ensure"      => :present,
-            "key_server"  => param_hash[:key_server],
-            "key_content" => param_hash[:key_content],
-            "key_source"  => param_hash[:key_source],
-            "before"      => "File[#{title}.list]"
-          })
-        end
+    it { is_expected.to contain_apt__setting('list-my_source').that_notifies('Exec[apt_update]').with({
+      'ensure' => 'present',
+    }).with_content(/# my_source\ndeb-src \[arch=x86_64 \]  wheezy main\n/)
+    }
+  end
+  context 'ensure => absent' do
+    let :facts do
+      {
+        :lsbdistid       => 'Debian',
+        :lsbdistcodename => 'wheezy',
+        :osfamily        => 'Debian'
+      }
+    end
+    let :params do
+      {
+        'ensure' => 'absent',
       }
     end
+
+    it { is_expected.to contain_apt__setting('list-my_source').that_notifies('Exec[apt_update]').with({
+      'ensure' => 'absent'
+    })
+    }
   end
-  describe "without release should raise a Puppet::Error" do
-    let(:default_params) { Hash.new }
-    let(:facts) { Hash.new }
-    it { expect { should raise_error(Puppet::Error) } }
-    let(:facts) { { :lsbdistcodename => 'lucid' } }
-    it { should contain_apt__source(title) }
+
+  describe 'validation' do
+    context 'no release' do
+      let :facts do
+        {
+          :lsbdistid       => 'Debian',
+          :osfamily        => 'Debian'
+        }
+      end
+
+      it do
+        expect {
+          is_expected.to compile
+        }.to raise_error(Puppet::Error, /lsbdistcodename fact not available: release parameter required/)
+      end
+    end
   end
 end