X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=spec%2Fclasses%2Fapt_spec.rb;h=e766c00d4321a0a75635249b5b023c66e26f2066;hb=0de37ff9c2830c7399bc52b4faf0ebe9230c395e;hp=cbbe746b0edb364ef0908fe0bb81595d113c2960;hpb=69edb0d6344a7c628c538219aa7b7b01ae131f6f;p=puppet-modules%2Fpuppetlabs-apt.git diff --git a/spec/classes/apt_spec.rb b/spec/classes/apt_spec.rb index cbbe746..e766c00 100644 --- a/spec/classes/apt_spec.rb +++ b/spec/classes/apt_spec.rb @@ -1,60 +1,72 @@ require 'spec_helper' + +sources_list = { ensure: 'file', + path: '/etc/apt/sources.list', + owner: 'root', + group: 'root', + mode: '0644', + notify: 'Class[Apt::Update]' } + +sources_list_d = { ensure: 'directory', + path: '/etc/apt/sources.list.d', + owner: 'root', + group: 'root', + mode: '0644', + purge: false, + recurse: false, + notify: 'Class[Apt::Update]' } + +preferences = { ensure: 'file', + path: '/etc/apt/preferences', + owner: 'root', + group: 'root', + mode: '0644', + notify: 'Class[Apt::Update]' } + +preferences_d = { ensure: 'directory', + path: '/etc/apt/preferences.d', + owner: 'root', + group: 'root', + mode: '0644', + purge: false, + recurse: false, + notify: 'Class[Apt::Update]' } + describe 'apt' 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', - lsbdistcodename: 'wheezy', - puppetversion: Puppet.version, + lsbdistcodename: 'jessie', } end - context 'defaults' do + context 'with defaults' do it { - is_expected.to contain_file('sources.list').that_notifies('Class[Apt::Update]').only_with(ensure: 'file', - path: '/etc/apt/sources.list', - owner: 'root', - group: 'root', - mode: '0644', - notify: 'Class[Apt::Update]') + is_expected.to contain_file('sources.list').that_notifies('Class[Apt::Update]').only_with(sources_list) } it { - is_expected.to contain_file('sources.list.d').that_notifies('Class[Apt::Update]').only_with(ensure: 'directory', - path: '/etc/apt/sources.list.d', - owner: 'root', - group: 'root', - mode: '0644', - purge: false, - recurse: false, - notify: 'Class[Apt::Update]') + is_expected.to contain_file('sources.list.d').that_notifies('Class[Apt::Update]').only_with(sources_list_d) } it { - is_expected.to contain_file('preferences').that_notifies('Class[Apt::Update]').only_with(ensure: 'file', - path: '/etc/apt/preferences', - owner: 'root', - group: 'root', - mode: '0644', - notify: 'Class[Apt::Update]') + is_expected.to contain_file('preferences').that_notifies('Class[Apt::Update]').only_with(preferences) } it { - is_expected.to contain_file('preferences.d').that_notifies('Class[Apt::Update]').only_with(ensure: 'directory', - path: '/etc/apt/preferences.d', - owner: 'root', - group: 'root', - mode: '0644', - purge: false, - recurse: false, - notify: 'Class[Apt::Update]') + is_expected.to contain_file('preferences.d').that_notifies('Class[Apt::Update]').only_with(preferences_d) } + it { is_expected.to contain_file('/etc/apt/auth.conf').with_ensure('absent') } + it 'lays down /etc/apt/apt.conf.d/15update-stamp' do is_expected.to contain_file('/etc/apt/apt.conf.d/15update-stamp').with(group: 'root', mode: '0644', - owner: 'root').with_content(%r{APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};}) # rubocop:disable Metrics/LineLength + owner: 'root').with_content( + %r{APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};}, + ) end it { @@ -65,7 +77,7 @@ describe 'apt' do end describe 'proxy=' do - context 'host=localhost' do + context 'when host=localhost' do let(:params) { { proxy: { 'host' => 'localhost' } } } it { @@ -77,7 +89,7 @@ describe 'apt' do } end - context 'host=localhost and port=8180' do + context 'when host=localhost and port=8180' do let(:params) { { proxy: { 'host' => 'localhost', 'port' => 8180 } } } it { @@ -89,7 +101,7 @@ describe 'apt' do } end - context 'host=localhost and https=true' do + context 'when host=localhost and https=true' do let(:params) { { proxy: { 'host' => 'localhost', 'https' => true } } } it { @@ -101,7 +113,7 @@ describe 'apt' do } end - context 'host=localhost and direct=true' do + context 'when host=localhost and direct=true' do let(:params) { { proxy: { 'host' => 'localhost', 'direct' => true } } } it { @@ -113,7 +125,7 @@ describe 'apt' do } end - context 'host=localhost and https=true and direct=true' do + context 'when host=localhost and https=true and direct=true' do let(:params) { { proxy: { 'host' => 'localhost', 'https' => true, 'direct' => true } } } it { @@ -132,7 +144,7 @@ describe 'apt' do } end - context 'ensure=absent' do + context 'when ensure=absent' do let(:params) { { proxy: { 'ensure' => 'absent' } } } it { @@ -141,7 +153,7 @@ describe 'apt' do } end end - context 'lots of non-defaults' do + context 'with lots of non-defaults' do let :params do { update: { 'frequency' => 'always', 'timeout' => 1, 'tries' => 3 }, @@ -175,14 +187,144 @@ describe 'apt' do } end + context 'with entries for /etc/apt/auth.conf' do + facts_hash = { + 'Ubuntu 14.04' => { + os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } }, + osfamily: 'Debian', + lsbdistcodename: 'trusty', + lsbdistid: 'Ubuntu', + lsbdistrelease: '14.04', + }, + 'Ubuntu 16.04' => { + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, + osfamily: 'Debian', + lsbdistcodename: 'xenial', + lsbdistid: 'Ubuntu', + lsbdistrelease: '16.04', + }, + 'Ubuntu 18.04' => { + os: { family: 'Debian', name: 'Ubuntu', release: { major: '18', full: '18.04' } }, + osfamily: 'Debian', + lsbdistcodename: 'bionic', + lsbdistid: 'Ubuntu', + lsbdistrelease: '18.04', + }, + 'Debian 7.0' => { + os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } }, + lsbdistid: 'Debian', + osfamily: 'Debian', + lsbdistcodename: 'wheezy', + }, + 'Debian 8.0' => { + os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } }, + lsbdistid: 'Debian', + osfamily: 'Debian', + lsbdistcodename: 'jessie', + }, + 'Debian 9.0' => { + os: { family: 'Debian', name: 'Debian', release: { major: '9', full: '9.0' } }, + lsbdistid: 'Debian', + osfamily: 'Debian', + lsbdistcodename: 'stretch', + }, + } + + facts_hash.each do |os, facts| + context "on #{os}" do + let(:facts) do + facts + end + let(:params) do + { + auth_conf_entries: [ + { + machine: 'deb.example.net', + login: 'foologin', + password: 'secret', + }, + { + machine: 'apt.example.com', + login: 'aptlogin', + password: 'supersecret', + }, + ], + } + end + + context 'with manage_auth_conf => true' do + let(:params) do + super().merge(manage_auth_conf: true) + end + + # Going forward starting with Ubuntu 16.04 and Debian 9.0 + # /etc/apt/auth.conf is owned by _apt. In previous versions it is + # root. + auth_conf_owner = case os + when 'Ubuntu 14.04', 'Debian 7.0', 'Debian 8.0' + 'root' + else + '_apt' + end + + auth_conf_content = "// This file is managed by Puppet. DO NOT EDIT. +machine deb.example.net login foologin password secret +machine apt.example.com login aptlogin password supersecret +" + + it { + is_expected.to contain_file('/etc/apt/auth.conf').with(ensure: 'present', + owner: auth_conf_owner, + group: 'root', + mode: '0600', + notify: 'Class[Apt::Update]', + content: auth_conf_content) + } + end + + context 'with manage_auth_conf => false' do + let(:params) do + super().merge(manage_auth_conf: false) + end + + it { + is_expected.not_to contain_file('/etc/apt/auth.conf') + } + end + end + + context 'with improperly specified entries for /etc/apt/auth.conf' do + let(:params) do + { + auth_conf_entries: [ + { + machinn: 'deb.example.net', + username: 'foologin', + password: 'secret', + }, + { + machine: 'apt.example.com', + login: 'aptlogin', + password: 'supersecret', + }, + ], + } + end + + it { is_expected.to raise_error(Puppet::Error) } + end + end + end + context 'with sources defined on valid osfamily' do let :facts do - { os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04' } }, + { + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, osfamily: 'Debian', - lsbdistcodename: 'precise', + lsbdistcodename: 'xenial', lsbdistid: 'Ubuntu', - lsbdistrelease: '12.04', - puppetversion: Puppet.version } + lsbdistrelease: '16.04', + } end let(:params) do { sources: { @@ -213,17 +355,16 @@ describe 'apt' do is_expected.to contain_apt__setting('list-puppetlabs').with(ensure: 'present') } - it { is_expected.to contain_file('/etc/apt/sources.list.d/puppetlabs.list').with_content(%r{^deb http://apt.puppetlabs.com precise main$}) } + it { is_expected.to contain_file('/etc/apt/sources.list.d/puppetlabs.list').with_content(%r{^deb http://apt.puppetlabs.com xenial main$}) } end context 'with confs defined on valid osfamily' do let :facts do { - os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04.5' } }, + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, osfamily: 'Debian', - lsbdistcodename: 'precise', - lsbdistid: 'Debian', - puppetversion: Puppet.version, + lsbdistcodename: 'xenial', + lsbdistid: 'Ubuntu', } end let(:params) do @@ -249,11 +390,10 @@ describe 'apt' do context 'with keys defined on valid osfamily' do let :facts do { - os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04.5' } }, + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, osfamily: 'Debian', - lsbdistcodename: 'precise', - lsbdistid: 'Debian', - puppetversion: Puppet.version, + lsbdistcodename: 'xenial', + lsbdistid: 'Ubuntu', } end let(:params) do @@ -279,12 +419,11 @@ describe 'apt' do context 'with ppas defined on valid osfamily' do let :facts do { - os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04.5' } }, + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, osfamily: 'Debian', - lsbdistcodename: 'precise', - lsbdistid: 'ubuntu', - lsbdistrelease: '12.04', - puppetversion: Puppet.version, + lsbdistcodename: 'xenial', + lsbdistid: 'Ubuntu', + lsbdistrelease: '16.04', } end let(:params) do @@ -301,11 +440,10 @@ describe 'apt' do context 'with settings defined on valid osfamily' do let :facts do { - os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04.5' } }, + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, osfamily: 'Debian', - lsbdistcodename: 'precise', - lsbdistid: 'Debian', - puppetversion: Puppet.version, + lsbdistcodename: 'xenial', + lsbdistid: 'Ubuntu', } end let(:params) do @@ -322,11 +460,10 @@ describe 'apt' do context 'with pins defined on valid osfamily' do let :facts do { - os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04.5' } }, + os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } }, osfamily: 'Debian', - lsbdistcodename: 'precise', - lsbdistid: 'Debian', - puppetversion: Puppet.version, + lsbdistcodename: 'xenial', + lsbdistid: 'Ubuntu', } end let(:params) do @@ -341,43 +478,35 @@ describe 'apt' do end describe 'failing tests' do - context "purge['sources.list']=>'banana'" do + context "with purge['sources.list']=>'banana'" do let(:params) { { purge: { 'sources.list' => 'banana' } } } it do - expect { - subject.call - }.to raise_error(Puppet::Error) + is_expected.to raise_error(Puppet::Error) end end - context "purge['sources.list.d']=>'banana'" do + context "with purge['sources.list.d']=>'banana'" do let(:params) { { purge: { 'sources.list.d' => 'banana' } } } it do - expect { - subject.call - }.to raise_error(Puppet::Error) + is_expected.to raise_error(Puppet::Error) end end - context "purge['preferences']=>'banana'" do + context "with purge['preferences']=>'banana'" do let(:params) { { purge: { 'preferences' => 'banana' } } } it do - expect { - subject.call - }.to raise_error(Puppet::Error) + is_expected.to raise_error(Puppet::Error) end end - context "purge['preferences.d']=>'banana'" do + context "with purge['preferences.d']=>'banana'" do let(:params) { { purge: { 'preferences.d' => 'banana' } } } it do - expect { - subject.call - }.to raise_error(Puppet::Error) + is_expected.to raise_error(Puppet::Error) end end end