Test ensure value of key is passed in for apt::source
[puppet-modules/puppetlabs-apt.git] / spec / defines / source_spec.rb
index eaa08874ef932ca8b37fca6c94d119908d5e77c9..3436f559036b3744b7d372b4927ebda6501fc56d 100644 (file)
@@ -11,29 +11,27 @@ describe 'apt::source' do
     'my_source'
   end
 
-  context 'defaults' do
+  context 'with defaults' do
     context 'without location' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           osfamily: 'Debian',
-          lsbdistcodename: 'wheezy',
+          lsbdistcodename: 'jessie',
           puppetversion: Puppet.version,
         }
       end
 
       it do
-        expect {
-          subject.call
-        }.to raise_error(Puppet::Error, %r{source entry without specifying a location})
+        is_expected.to raise_error(Puppet::Error, %r{source entry without specifying a location})
       end
     end
     context 'with location' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
-          lsbdistcodename: 'wheezy',
+          lsbdistcodename: 'jessie',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
         }
@@ -42,6 +40,7 @@ describe 'apt::source' do
 
       it {
         is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').without_content(%r{# my_source\ndeb-src hello.there wheezy main\n})
+        is_expected.not_to contain_package('apt-transport-https')
       }
     end
   end
@@ -49,12 +48,12 @@ describe 'apt::source' do
   describe 'no defaults' do
     let :facts do
       {
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
         lsbdistid: 'Debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'jessie',
         osfamily: 'Debian',
         operatingsystem: 'Debian',
-        lsbdistrelease: '7.0',
+        lsbdistrelease: '8.0',
         puppetversion: Puppet.version,
       }
     end
@@ -70,7 +69,7 @@ describe 'apt::source' do
       end
 
       it {
-        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{hello.there wheezy main\n})
+        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{hello.there jessie main\n})
       }
 
       it { is_expected.to contain_file('/etc/apt/sources.list.d/my_source.list').that_notifies('Class[Apt::Update]') }
@@ -98,7 +97,8 @@ describe 'apt::source' do
       end
 
       it {
-        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(%r{deb-src}) # rubocop:disable Metrics/LineLength
+        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# foo\ndeb \[arch=x86_64 trusted=yes\] http://debian.mirror.iweb.ca/debian/ sid testing\n})
+                                                             .without_content(%r{deb-src})
       }
 
       it {
@@ -120,7 +120,9 @@ describe 'apt::source' do
           location: 'http://debian.mirror.iweb.ca/debian/',
           release: 'sid',
           repos: 'testing',
-          key: { 'id' => GPG_KEY_ID, 'server' => 'pgp.mit.edu',
+          key: { 'ensure' => 'refreshed',
+                 'id' => GPG_KEY_ID,
+                 'server' => 'pgp.mit.edu',
                  'content' => 'GPG key content',
                  'source'  => 'http://apt.puppetlabs.com/pubkey.gpg' },
           pin: '10',
@@ -130,7 +132,8 @@ describe 'apt::source' do
       end
 
       it {
-        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(%r{deb-src}) # rubocop:disable Metrics/LineLength
+        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# foo\ndeb \[arch=x86_64 trusted=yes\] http://debian.mirror.iweb.ca/debian/ sid testing\n})
+                                                             .without_content(%r{deb-src})
       }
 
       it {
@@ -140,68 +143,82 @@ describe 'apt::source' do
       }
 
       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',
+        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: 'refreshed',
                                                                                                                                                     id: GPG_KEY_ID,
                                                                                                                                                     server: 'pgp.mit.edu',
                                                                                                                                                     content: 'GPG key content',
                                                                                                                                                     source: 'http://apt.puppetlabs.com/pubkey.gpg')
       }
     end
+  end
 
-    context 'with simple key' do
-      let :params do
-        {
-          comment: 'foo',
-          location: 'http://debian.mirror.iweb.ca/debian/',
-          release: 'sid',
-          repos: 'testing',
-          key: GPG_KEY_ID,
-          pin: '10',
-          architecture: 'x86_64',
-          allow_unsigned: true,
-        }
-      end
-
-      it {
-        is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(%r{deb-src}) # rubocop:disable Metrics/LineLength
+  context 'with allow_unsigned true' do
+    let :facts do
+      {
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
+        lsbdistid: 'Debian',
+        lsbdistcodename: 'jessie',
+        osfamily: 'Debian',
+        puppetversion: Puppet.version,
       }
-
-      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')
+    end
+    let :params do
+      {
+        location: 'hello.there',
+        allow_unsigned: true,
       }
+    end
 
-      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',
-                                                                                                                                                    id: GPG_KEY_ID)
+    it {
+      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# my_source\ndeb \[trusted=yes\] hello.there jessie main\n})
+    }
+  end
+
+  context 'with a https location, install apt-transport-https' do
+    let :facts do
+      {
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
+        lsbdistid: 'Debian',
+        lsbdistcodename: 'jessie',
+        osfamily: 'Debian',
+        puppetversion: Puppet.version,
+      }
+    end
+    let :params do
+      {
+        location: 'HTTPS://foo.bar',
+        allow_unsigned: false,
       }
     end
+
+    it {
+      is_expected.to contain_package('apt-transport-https')
+    }
   end
 
-  context 'allow_unsigned true' do
+  context 'with a https location, do not install apt-transport-https on oses not in list eg buster' do
     let :facts do
       {
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '10', full: '10.0' } },
         lsbdistid: 'Debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'buster',
         osfamily: 'Debian',
         puppetversion: Puppet.version,
       }
     end
     let :params do
       {
-        location: 'hello.there',
-        allow_unsigned: true,
+        location: 'https://foo.bar',
+        allow_unsigned: false,
       }
     end
 
     it {
-      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# my_source\ndeb \[trusted=yes\] hello.there wheezy main\n})
+      is_expected.not_to contain_package('apt-transport-https')
     }
   end
 
-  context 'architecture equals x86_64' do
+  context 'with architecture equals x86_64' do
     let :facts do
       {
         os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
@@ -228,9 +245,9 @@ describe 'apt::source' do
     let :facts do
       {
         architecture: 'amd64',
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
         lsbdistid: 'Debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'jessie',
         osfamily: 'Debian',
         puppetversion: Puppet.version,
       }
@@ -243,16 +260,16 @@ describe 'apt::source' do
     end
 
     it {
-      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# my_source\ndeb-src hello.there wheezy main\n})
+      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# my_source\ndeb-src hello.there jessie main\n})
     }
   end
 
-  context 'include_src => true' do
+  context 'with include_src => true' do
     let :facts do
       {
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
         lsbdistid: 'Debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'jessie',
         osfamily: 'Debian',
         puppetversion: Puppet.version,
       }
@@ -265,16 +282,16 @@ describe 'apt::source' do
     end
 
     it {
-      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# my_source\ndeb hello.there wheezy main\ndeb-src hello.there wheezy main\n})
+      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{# my_source\ndeb hello.there jessie main\ndeb-src hello.there jessie main\n})
     }
   end
 
-  context 'include deb => false' do
+  context 'with include deb => false' do
     let :facts do
       {
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
         lsbdistid: 'debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'jessie',
         osfamily: 'debian',
         puppetversion: Puppet.version,
       }
@@ -292,12 +309,12 @@ describe 'apt::source' do
     it { is_expected.to contain_apt__setting('list-my_source').without_content(%r{deb hello.there wheezy main\n}) }
   end
 
-  context 'include src => true and include deb => false' do
+  context 'with include src => true and include deb => false' do
     let :facts do
       {
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
         lsbdistid: 'debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'jessie',
         osfamily: 'debian',
         puppetversion: Puppet.version,
       }
@@ -310,17 +327,17 @@ describe 'apt::source' do
     end
 
     it {
-      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{deb-src hello.there wheezy main\n})
+      is_expected.to contain_apt__setting('list-my_source').with(ensure: 'present').with_content(%r{deb-src hello.there jessie main\n})
     }
-    it { is_expected.to contain_apt__setting('list-my_source').without_content(%r{deb hello.there wheezy main\n}) }
+    it { is_expected.to contain_apt__setting('list-my_source').without_content(%r{deb hello.there jessie main\n}) }
   end
 
-  context 'ensure => absent' do
+  context 'with ensure => absent' do
     let :facts do
       {
-        os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+        os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
         lsbdistid: 'Debian',
-        lsbdistcodename: 'wheezy',
+        lsbdistcodename: 'jessie',
         osfamily: 'Debian',
         puppetversion: Puppet.version,
       }
@@ -337,10 +354,10 @@ describe 'apt::source' do
   end
 
   describe 'validation' do
-    context 'no release' do
+    context 'with no release' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
@@ -349,16 +366,14 @@ describe 'apt::source' do
       let(:params) { { location: 'hello.there' } }
 
       it do
-        expect {
-          subject.call
-        }.to raise_error(Puppet::Error, %r{lsbdistcodename fact not available: release parameter required})
+        is_expected.to raise_error(Puppet::Error, %r{lsbdistcodename fact not available: release parameter required})
       end
     end
 
-    context 'release is empty string' do
+    context 'with release is empty string' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
@@ -369,12 +384,12 @@ describe 'apt::source' do
       it { is_expected.to contain_apt__setting('list-my_source').with_content(%r{hello\.there  main}) }
     end
 
-    context 'invalid pin' do
+    context 'with invalid pin' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
-          lsbdistcodename: 'wheezy',
+          lsbdistcodename: 'jessie',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
         }
@@ -387,18 +402,16 @@ describe 'apt::source' do
       end
 
       it do
-        expect {
-          subject.call
-        }.to raise_error(Puppet::Error, %r{invalid value for pin})
+        is_expected.to raise_error(Puppet::Error, %r{expects a value})
       end
     end
 
     context 'with notify_update = undef (default)' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
-          lsbdistcodename: 'wheezy',
+          lsbdistcodename: 'jessie',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
         }
@@ -415,9 +428,9 @@ describe 'apt::source' do
     context 'with notify_update = true' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
-          lsbdistcodename: 'wheezy',
+          lsbdistcodename: 'jessie',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
         }
@@ -435,9 +448,9 @@ describe 'apt::source' do
     context 'with notify_update = false' do
       let :facts do
         {
-          os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
+          os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
           lsbdistid: 'Debian',
-          lsbdistcodename: 'wheezy',
+          lsbdistcodename: 'jessie',
           osfamily: 'Debian',
           puppetversion: Puppet.version,
         }