Support managing login configurations in /etc/apt/auth.conf
[puppet-modules/puppetlabs-apt.git] / spec / classes / apt_spec.rb
index 0c6333ba844a91db2b697956421b565ff1601534..654af4eb01b5db69020f591687de0be502922120 100644 (file)
@@ -60,6 +60,8 @@ describe 'apt' do
       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',
@@ -186,6 +188,52 @@ describe 'apt' do
     }
   end
 
+  context 'with entries for /etc/apt/auth.conf' do
+    let(:params) do
+      {
+        auth_conf_entries: [
+          { machine: 'deb.example.net',
+            login: 'foologin',
+            password: 'secret' },
+          { machine: 'apt.example.com',
+            login: 'aptlogin',
+            password: 'supersecret' },
+        ],
+      }
+    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: 'root',
+                                                             group: 'root',
+                                                             mode: '0600',
+                                                             notify: 'Class[Apt::Update]',
+                                                             content: auth_conf_content)
+    }
+  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
+
   context 'with sources defined on valid osfamily' do
     let :facts do
       { os: { family: 'Debian', name: 'Ubuntu', release: { major: '12', full: '12.04' } },