]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/commitdiff
Add additional acceptance testing.
authorAshley Penney <ashley.penney@puppetlabs.com>
Tue, 7 Jan 2014 00:53:19 +0000 (19:53 -0500)
committerAshley Penney <ashley.penney@puppetlabs.com>
Thu, 9 Jan 2014 17:09:22 +0000 (12:09 -0500)
This work adds a test for every parameter in every class/define in apt.

spec/acceptance/apt_key_spec.rb
spec/acceptance/apt_ppa_spec.rb
spec/acceptance/apt_source_spec.rb
spec/acceptance/apt_spec.rb [new file with mode: 0644]
spec/acceptance/backports_spec.rb [new file with mode: 0644]
spec/acceptance/conf_spec.rb [new file with mode: 0644]
spec/acceptance/force_spec.rb [new file with mode: 0644]
spec/acceptance/pin_spec.rb [new file with mode: 0644]
spec/acceptance/release_spec.rb [new file with mode: 0644]
spec/acceptance/unattended_upgrade_spec.rb [new file with mode: 0644]

index 5f69e25e0ba99a8515d45c52decaa047cefac831..36cba5eeffae5d77e0b98e69027337367e58501e 100644 (file)
@@ -1,14 +1,6 @@
 require 'spec_helper_acceptance'
 
 describe 'apt::key' do
-
-  context 'reset' do
-    it 'clean up keys' do
-      shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
-      shell('apt-key del D50582E6', :acceptable_exit_codes => [0,1,2])
-    end
-  end
-
   context 'apt::key' do
     it 'should work with no errors' do
       pp = <<-EOS
@@ -24,18 +16,47 @@ describe 'apt::key' do
       }
       EOS
 
+      shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+      shell('apt-key del D50582E6', :acceptable_exit_codes => [0,1,2])
       apply_manifest(pp, :catch_failures => true)
     end
 
     describe 'keys should exist' do
       it 'finds puppetlabs key' do
-        shell('apt-key list | grep 4BD6EC30') do |r|
-          expect(r.exit_code).to be_zero
-        end
+        shell('apt-key list | grep 4BD6EC30')
       end
       it 'finds jenkins key' do
-        shell('apt-key list | grep D50582E6') do |r|
-          expect(r.exit_code).to be_zero
+        shell('apt-key list | grep D50582E6')
+      end
+    end
+  end
+  context 'ensure' do
+    context 'absent' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::key { 'puppetlabs':
+          ensure     => absent,
+          key        => '4BD6EC30',
+          key_server => 'pgp.mit.edu',
+        }
+
+        apt::key { 'jenkins':
+          ensure     => absent,
+          key        => 'D50582E6',
+          key_source => 'http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe 'keys shouldnt exist' do
+        it 'fails' do
+          shell('apt-key list | grep 4BD6EC30', :acceptable_exit_codes => [1])
+        end
+        it 'fails' do
+          shell('apt-key list | grep D50582E6', :acceptable_exit_codes => [1])
         end
       end
     end
@@ -43,8 +64,136 @@ describe 'apt::key' do
 
   context 'reset' do
     it 'clean up keys' do
-      shell('apt-key del 4BD6EC30')
-      shell('apt-key del D50582E6')
+      shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+      shell('apt-key del D50582E6', :acceptable_exit_codes => [0,1,2])
+    end
+  end
+
+  context 'key options' do
+    context 'key_content' do
+
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::key { 'puppetlabs':
+          key         => '4BD6EC30',
+          key_content => '-----BEGIN PGP PUBLIC KEY BLOCK-----
+          Version: GnuPG v1.4.12 (GNU/Linux)
+          Comment: GPGTools - http://gpgtools.org
+
+          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
+            =a34C
+          -----END PGP PUBLIC KEY BLOCK-----
+          ',
+        }
+        EOS
+
+        shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+    end
+    describe 'keys should exist' do
+      it 'finds puppetlabs key' do
+        shell('apt-key list | grep 4BD6EC30')
+      end
+    end
+
+    context 'key_source' do
+
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::key { 'puppetlabs':
+          key        => '4BD6EC30',
+          key_source => 'http://apt.puppetlabs.com/pubkey.gpg',
+        }
+        EOS
+
+        shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe 'keys should exist' do
+        it 'finds puppetlabs key' do
+          shell('apt-key list | grep 4BD6EC30')
+        end
+      end
+    end
+
+    context 'key_options' do
+
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::key { 'puppetlabs':
+          key        => '4BD6EC30',
+          key_source => 'http://apt.puppetlabs.com/pubkey.gpg',
+          key_options => 'debug'
+        }
+        EOS
+
+        shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe 'keys should exist' do
+        it 'finds puppetlabs key' do
+          shell('apt-key list | grep 4BD6EC30')
+        end
+      end
     end
   end
 
index 5bee3c69ef6b037267e34200c0c67970428fb31e..f9369802431a18c86feb27a6d794187946ab182a 100644 (file)
@@ -50,4 +50,89 @@ describe 'apt::ppa' do
     end
   end
 
+  context 'ensure' do
+    context 'present' do
+      it 'works without failure' do
+        pp = <<-EOS
+        include '::apt'
+        apt::ppa { 'ppa:canonical-kernel-team/ppa': ensure => present }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe 'contains the source file' do
+        it 'contains a kernel ppa source' do
+          shell('ls /etc/apt/sources.list.d/canonical-kernel-team-ppa-*', :acceptable_exit_codes => [0])
+        end
+      end
+    end
+  end
+
+  context 'ensure' do
+    context 'absent' do
+      it 'works without failure' do
+        pp = <<-EOS
+        include '::apt'
+        apt::ppa { 'ppa:canonical-kernel-team/ppa': ensure => absent }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe 'doesnt contain the source file' do
+        it 'fails' do
+          shell('ls /etc/apt/sources.list.d/canonical-kernel-team-ppa-*', :acceptable_exit_codes => [2])
+        end
+      end
+    end
+  end
+
+  context 'release' do
+    context 'precise' do
+      it 'works without failure' do
+        pp = <<-EOS
+        include '::apt'
+        apt::ppa { 'ppa:canonical-kernel-team/ppa':
+          ensure  => present,
+          release => precise,
+        }
+        EOS
+
+        shell('rm -rf /etc/apt/sources.list.d/canonical-kernel-team-ppa*', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list.d/canonical-kernel-team-ppa-precise.list') do
+        it { should be_file }
+      end
+    end
+  end
+
+  context 'options' do
+    context '-y' do
+      it 'works without failure' do
+        pp = <<-EOS
+        include '::apt'
+        apt::ppa { 'ppa:canonical-kernel-team/ppa':
+          ensure  => present,
+          release => precise,
+          options => '-y',
+        }
+        EOS
+
+        shell('rm -rf /etc/apt/sources.list.d/canonical-kernel-team-ppa*', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list.d/canonical-kernel-team-ppa-precise.list') do
+        it { should be_file }
+      end
+    end
+  end
+
+  context 'reset' do
+    it { shell('rm -rf /etc/apt/sources.list.d/canonical-kernel-team-ppa*', :acceptable_exit_codes => [0,1,2]) }
+  end
+
 end
index 044af57148ef0063246bd4504485961c1ac85624..273add56fa69fb7d00e4c7d2340cf1c1dba5a70e 100644 (file)
@@ -2,47 +2,323 @@ require 'spec_helper_acceptance'
 
 describe 'apt::source' do
 
-  context 'reset' do
-    it 'clean up puppetlabs repo' do
-      shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
-      shell('rm /etc/apt/sources.list.d/puppetlabs.list', :acceptable_exit_codes => [0,1,2])
+  context 'apt::source' do
+    context 'ensure => present' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure     => present,
+          location   => 'http://apt.puppetlabs.com',
+          repos      => 'main',
+          key        => '4BD6EC30',
+          key_server => 'pgp.mit.edu',
+        }
+        EOS
+
+        shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+        shell('rm /etc/apt/sources.list.d/puppetlabs.list', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe 'key should exist' do
+        it 'finds puppetlabs key' do
+          shell('apt-key list | grep 4BD6EC30', :acceptable_exit_codes => [0])
+        end
+      end
+
+      describe file('/etc/apt/sources.list.d/puppetlabs.list') do
+        it { should be_file }
+      end
     end
+
+    context 'ensure => absent' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure     => absent,
+          location   => 'http://apt.puppetlabs.com',
+          repos      => 'main',
+          key        => '4BD6EC30',
+          key_server => 'pgp.mit.edu',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      # The key should remain -we don't delete those when deleting a source.
+      describe 'key should exist' do
+        it 'finds puppetlabs key' do
+          shell('apt-key list | grep 4BD6EC30', :acceptable_exit_codes => [0])
+        end
+      end
+      describe file('/etc/apt/sources.list.d/puppetlabs.list') do
+        it { should_not be_file }
+      end
+    end
+
   end
 
-  context 'apt::source' do
-    it 'should work with no errors' do
-      pp = <<-EOS
-      include '::apt'
-      apt::source { 'puppetlabs':
-        location   => 'http://apt.puppetlabs.com',
-        repos      => 'main',
-        key        => '4BD6EC30',
-        key_server => 'pgp.mit.edu',
-      }
-      EOS
-
-      apply_manifest(pp, :catch_failures => true)
-    end
-
-    describe 'key should exist' do
-      it 'finds puppetlabs key' do
-        shell('apt-key list | grep 4BD6EC30') do |r|
-          expect(r.exit_code).to be_zero
+  context 'release' do
+    context 'test' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure     => present,
+          location   => 'http://apt.puppetlabs.com',
+          repos      => 'main',
+          key        => '4BD6EC30',
+          key_server => 'pgp.mit.edu',
+          release    => 'precise',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list.d/puppetlabs.list') do
+        it { should be_file }
+        it { should contain 'deb http://apt.puppetlabs.com precise main' }
+      end
+    end
+  end
+
+  context 'include_src' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure      => present,
+          location    => 'http://apt.puppetlabs.com',
+          repos       => 'main',
+          key         => '4BD6EC30',
+          key_server  => 'pgp.mit.edu',
+          include_src => true,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list.d/puppetlabs.list') do
+        it { should be_file }
+        it { should contain 'deb-src http://apt.puppetlabs.com' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure      => present,
+          location    => 'http://apt.puppetlabs.com',
+          repos       => 'main',
+          key         => '4BD6EC30',
+          key_server  => 'pgp.mit.edu',
+          include_src => false,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list.d/puppetlabs.list') do
+        it { should be_file }
+        it { should_not contain 'deb-src http://apt.puppetlabs.com' }
+      end
+    end
+  end
+
+  context 'required_packages' do
+    context 'vim' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure             => present,
+          location           => 'http://apt.puppetlabs.com',
+          repos              => 'main',
+          key                => '4BD6EC30',
+          key_server         => 'pgp.mit.edu',
+          required_packages  => 'vim',
+        }
+        EOS
+
+        shell('apt-get -y remove vim')
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe package('vim') do
+        it { should be_installed }
+      end
+    end
+  end
+
+  context 'key content' do
+    context 'giant key' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure      => present,
+          location    => 'http://apt.puppetlabs.com',
+          repos       => 'main',
+          key         => '4BD6EC30',
+          key_content => '-----BEGIN PGP PUBLIC KEY BLOCK-----
+          Version: GnuPG v1.4.12 (GNU/Linux)
+          Comment: GPGTools - http://gpgtools.org
+
+          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
+          =a34C
+          -----END PGP PUBLIC KEY BLOCK-----',
+        }
+        EOS
+
+        shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list.d/puppetlabs.list') do
+        it { should be_file }
+      end
+      describe 'keys should exist' do
+        it 'finds puppetlabs key' do
+          shell('apt-key list | grep 4BD6EC30')
         end
       end
     end
+  end
+
+  context 'key_source' do
+    context 'http://apt.puppetlabs.com/pubkey.gpg' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure     => present,
+          location   => 'http://apt.puppetlabs.com',
+          repos      => 'main',
+          key        => '4BD6EC30',
+          key_source  => 'http://apt.puppetlabs.com/pubkey.gpg',
+        }
+        EOS
+
+        shell('apt-key del 4BD6EC30', :acceptable_exit_codes => [0,1,2])
+        apply_manifest(pp, :catch_failures => true)
+      end
 
-    describe 'source should exist' do
       describe file('/etc/apt/sources.list.d/puppetlabs.list') do
         it { should be_file }
+        it { should contain 'deb http://apt.puppetlabs.com precise main' }
+      end
+      describe 'keys should exist' do
+        it 'finds puppetlabs key' do
+          shell('apt-key list | grep 4BD6EC30')
+        end
       end
     end
   end
 
-  context 'reset' do
-    it 'clean up puppetlabs repo' do
-      shell('apt-key del 4BD6EC30')
-      shell('rm /etc/apt/sources.list.d/puppetlabs.list')
+  context 'pin' do
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure     => present,
+          location   => 'http://apt.puppetlabs.com',
+          repos      => 'main',
+          key        => '4BD6EC30',
+          key_server => 'pgp.mit.edu',
+          pin        => false,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/puppetlabs.pref') do
+        it { should_not be_file }
+      end
+    end
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include '::apt'
+        apt::source { 'puppetlabs':
+          ensure     => present,
+          location   => 'http://apt.puppetlabs.com',
+          repos      => 'main',
+          key        => '4BD6EC30',
+          key_server => 'pgp.mit.edu',
+          pin        => true,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/puppetlabs.pref') do
+        it { should be_file }
+      end
     end
   end
 
diff --git a/spec/acceptance/apt_spec.rb b/spec/acceptance/apt_spec.rb
new file mode 100644 (file)
index 0000000..4dbb54a
--- /dev/null
@@ -0,0 +1,220 @@
+require 'spec_helper_acceptance'
+
+describe 'apt class' do
+
+  context 'always_apt_update => true' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt': always_apt_update => true }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true) do |r|
+        expect(r.stdout).to match(/apt_update/)
+      end
+    end
+  end
+  context 'always_apt_update => false' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt': always_apt_update => false }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true) do |r|
+        expect(r.stdout).to_not match(/apt_update/)
+      end
+    end
+  end
+
+  # disable_keys drops in a 99unauth file to ignore keys in
+  # other files.
+  context 'disable_keys => true' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt': disable_keys => true }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/99unauth') do
+      it { should be_file }
+      it { should contain 'APT::Get::AllowUnauthenticated 1;' }
+    end
+  end
+  context 'disable_keys => false' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt': disable_keys => false }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/99unauth') do
+      it { should_not be_file }
+    end
+  end
+
+  # proxy_host sets the proxy to use for transfers.
+  # proxy_port sets the proxy port to use.
+  context 'proxy settings' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt': 
+        proxy_host => 'localhost',
+        proxy_port => '8080',
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/proxy') do
+      it { should be_file }
+      it { should contain 'Acquire::http::Proxy "http://localhost:8080\";' }
+    end
+  end
+
+  context 'purge_sources' do
+    it 'creates a fake apt file' do
+      shell('touch /etc/apt/sources.list.d/fake.list')
+      shell('echo "deb fake" >> /etc/apt/sources.list')
+    end
+    it 'purge_sources_list and purge_sources_list_d => true' do
+      pp = <<-EOS
+      class { 'apt':
+        purge_sources_list   => true,
+        purge_sources_list_d => true,
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/sources.list') do
+      it { should_not contain 'deb fake' }
+    end
+
+    describe file('/etc/apt/sources.list.d/fake.list') do
+      it { should_not be_file }
+    end
+  end
+  context 'proxy settings' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt': 
+        proxy_host => 'localhost',
+        proxy_port => '8080',
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/proxy') do
+      it { should be_file }
+      it { should contain 'Acquire::http::Proxy "http://localhost:8080\";' }
+    end
+  end
+
+  context 'purge_sources' do
+    context 'false' do
+      it 'creates a fake apt file' do
+        shell('touch /etc/apt/sources.list.d/fake.list')
+        shell('echo "deb fake" >> /etc/apt/sources.list')
+      end
+      it 'purge_sources_list and purge_sources_list_d => false' do
+        pp = <<-EOS
+        class { 'apt':
+          purge_sources_list   => false,
+          purge_sources_list_d => false,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => false)
+      end
+
+      describe file('/etc/apt/sources.list') do
+        it { should contain 'deb fake' }
+      end
+
+      describe file('/etc/apt/sources.list.d/fake.list') do
+        it { should be_file }
+      end
+    end
+
+    context 'true' do
+      it 'creates a fake apt file' do
+        shell('touch /etc/apt/sources.list.d/fake.list')
+        shell('echo "deb fake" >> /etc/apt/sources.list')
+      end
+      it 'purge_sources_list and purge_sources_list_d => true' do
+        pp = <<-EOS
+        class { 'apt':
+          purge_sources_list   => true,
+          purge_sources_list_d => true,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/sources.list') do
+        it { should_not contain 'deb fake' }
+      end
+
+      describe file('/etc/apt/sources.list.d/fake.list') do
+        it { should_not be_file }
+      end
+    end
+  end
+
+  context 'purge_preferences_d' do
+    context 'false' do
+      it 'creates a preferences file' do
+        shell('touch /etc/apt/preferences.d/test')
+      end
+
+      it 'should work with no errors' do
+        pp = <<-EOS
+        class { 'apt': purge_preferences_d => false }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/test') do
+        it { should be_file }
+      end
+    end
+    context 'true' do
+      it 'creates a preferences file' do
+        shell('touch /etc/apt/preferences.d/test')
+      end
+
+      it 'should work with no errors' do
+        pp = <<-EOS
+        class { 'apt': purge_preferences_d => true }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/test') do
+        it { should_not be_file }
+      end
+    end
+  end
+
+  context 'update_timeout' do
+    context '5000' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        class { 'apt': update_timeout => '5000' }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+    end
+  end
+end
diff --git a/spec/acceptance/backports_spec.rb b/spec/acceptance/backports_spec.rb
new file mode 100644 (file)
index 0000000..596be23
--- /dev/null
@@ -0,0 +1,43 @@
+require 'spec_helper_acceptance'
+
+describe 'apt::backports class' do
+  context 'defaults' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt::backports': }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+  end
+
+  context 'release' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt::backports': release => 'precise' }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/sources.list.d/backports.list') do
+      it { should be_file }
+      it { should contain 'precise-backports main universe multiverse restricted' }
+    end
+  end
+
+  context 'location' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      class { 'apt::backports': release => 'precise', location => 'http://localhost/ubuntu' }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/sources.list.d/backports.list') do
+      it { should be_file }
+      it { should contain 'deb http://localhost/ubuntu precise-backports main universe multiverse restricted' }
+    end
+  end
+end
diff --git a/spec/acceptance/conf_spec.rb b/spec/acceptance/conf_spec.rb
new file mode 100644 (file)
index 0000000..98898c2
--- /dev/null
@@ -0,0 +1,66 @@
+require 'spec_helper_acceptance'
+
+describe 'apt::conf define' do
+  context 'defaults' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      apt::conf { 'test':
+        content => 'test',
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/50test') do
+      it { should be_file }
+      it { should contain 'test' }
+    end
+  end
+
+  context 'ensure' do
+    context 'absent' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        apt::conf { 'test':
+          ensure  => absent,
+          content => 'test',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50test') do
+        it { should_not be_file }
+      end
+    end
+  end
+
+  context 'priority' do
+    context '99' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        apt::conf { 'test':
+          ensure   => present,
+          content  => 'test',
+          priority => '99',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/99test') do
+        it { should be_file }
+        it { should contain 'test' }
+      end
+    end
+  end
+
+  context 'cleanup' do
+    it 'deletes 99test' do
+      shell ('rm -rf /etc/apt/apt.conf.d/99test')
+    end
+  end
+end
diff --git a/spec/acceptance/force_spec.rb b/spec/acceptance/force_spec.rb
new file mode 100644 (file)
index 0000000..4f74ff0
--- /dev/null
@@ -0,0 +1,19 @@
+require 'spec_helper_acceptance'
+
+describe 'apt::force define' do
+  context 'defaults' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      apt::force { 'vim': }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe package('vim') do
+      it { should be_installed }
+    end
+  end
+
+end
diff --git a/spec/acceptance/pin_spec.rb b/spec/acceptance/pin_spec.rb
new file mode 100644 (file)
index 0000000..b5a0044
--- /dev/null
@@ -0,0 +1,266 @@
+require 'spec_helper_acceptance'
+
+describe 'apt::pin define' do
+  context 'defaults' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      apt::pin { 'vim-puppet': }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+      it { should be_file }
+      it { should contain 'Pin: release a=vim-puppet' }
+    end
+  end
+
+  context 'ensure' do
+    context 'present' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet': ensure => present }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release a=vim-puppet' }
+      end
+    end
+
+    context 'absent' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet': ensure => absent }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should_not be_file }
+      end
+    end
+  end
+
+  context 'order' do
+    context '99' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure => present,
+          order  => '99',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/99-vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release a=vim-puppet' }
+      end
+    end
+  end
+
+  context 'packages' do
+    context 'test' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure   => present,
+          packages => 'test',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Package: test' }
+        it { should contain 'Pin: release a=vim-puppet' }
+      end
+    end
+  end
+
+  context 'release' do
+    context 'testrelease' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure  => present,
+          release => 'testrelease',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release a=testrelease' }
+      end
+    end
+  end
+
+  context 'origin' do
+    context 'testrelease' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure  => present,
+          origin  => 'testrelease',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: origin "testrelease"' }
+      end
+    end
+  end
+
+  context 'version' do
+    context '1.0.0' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure   => present,
+          packages => 'test',
+          version  => '1.0.0',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Package: test' }
+        it { should contain 'Pin: version 1.0.0' }
+      end
+    end
+  end
+
+  context 'codename' do
+    context 'testname' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure   => present,
+          codename => 'testname',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release n=testname' }
+      end
+    end
+  end
+
+  context 'release_version' do
+    context '1.1.1' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure          => present,
+          release_version => '1.1.1',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release v=1.1.1' }
+      end
+    end
+  end
+
+  context 'component' do
+    context 'testcomponent' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure    => present,
+          component => 'testcomponent',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release c=testcomponent' }
+      end
+    end
+  end
+
+  context 'originator' do
+    context 'testorigin' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure     => present,
+          originator => 'testorigin',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release o=testorigin' }
+      end
+    end
+  end
+
+  context 'label' do
+    context 'testlabel' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        apt::pin { 'vim-puppet':
+          ensure => present,
+          label  => 'testlabel',
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/preferences.d/vim-puppet.pref') do
+        it { should be_file }
+        it { should contain 'Pin: release l=testlabel' }
+      end
+    end
+  end
+
+end
diff --git a/spec/acceptance/release_spec.rb b/spec/acceptance/release_spec.rb
new file mode 100644 (file)
index 0000000..44491e3
--- /dev/null
@@ -0,0 +1,20 @@
+require 'spec_helper_acceptance'
+
+describe 'apt::release class' do
+  context 'release_id' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::release': release_id => 'precise', }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/01release') do
+      it { should be_file }
+      it { should contain 'APT::Default-Release "precise";' }
+    end
+  end
+
+end
diff --git a/spec/acceptance/unattended_upgrade_spec.rb b/spec/acceptance/unattended_upgrade_spec.rb
new file mode 100644 (file)
index 0000000..287e5ec
--- /dev/null
@@ -0,0 +1,558 @@
+require 'spec_helper_acceptance'
+
+describe 'apt::unattended_upgrades class' do
+  context 'defaults' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      include apt::unattended_upgrades
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+    end
+    describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+      it { should be_file }
+    end
+  end
+
+  context 'origins' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        origins => ['${distro_id}:${distro_codename}-test'],
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+      it { should be_file }
+      it { should contain '${distro_id}:${distro_codename}-test' }
+    end
+  end
+
+  context 'blacklist' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        blacklist => ['puppet']
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+      it { should be_file }
+      it { should contain 'puppet' }
+    end
+  end
+
+  context 'update' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        update => '99'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::Update-Package-Lists "99";' }
+    end
+  end
+
+  context 'download' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        download => '99'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::Download-Upgradeable-Packages "99";' }
+    end
+  end
+
+  context 'upgrade' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        upgrade => '99'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::Unattended-Upgrade "99";' }
+    end
+  end
+
+  context 'autoclean' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        autoclean => '99'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::AutocleanInterval "99";' }
+    end
+  end
+
+  context 'auto_fix' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          auto_fix => true
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::AutoFixInterruptedDpkg "true";' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          auto_fix => false
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::AutoFixInterruptedDpkg "false";' }
+      end
+    end
+  end
+
+  context 'minimal_steps' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          minimal_steps => true
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::MinimalSteps "true";' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          minimal_steps => false
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::MinimalSteps "false";' }
+      end
+    end
+  end
+
+  context 'install_on_shutdown' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          install_on_shutdown => true
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::InstallOnShutdown "true";' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          install_on_shutdown => false
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::InstallOnShutdown "false";' }
+      end
+    end
+  end
+
+  context 'mail_to' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        mail_to => 'test@example.com'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+      it { should be_file }
+      it { should contain 'Unattended-Upgrade::Mail "test@example.com";' }
+    end
+  end
+
+  context 'mail_only_on_error' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          mail_to            => 'test@example.com',
+          mail_only_on_error => true
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::MailOnlyOnError "true";' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          mail_to            => 'test@example.com',
+          mail_only_on_error => false,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::MailOnlyOnError "false";' }
+      end
+    end
+
+    context 'mail_to missing' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          mail_only_on_error => true,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should_not contain 'Unattended-Upgrade::MailOnlyOnError "true";' }
+      end
+    end
+  end
+
+  context 'remove_unused' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          remove_unused => true
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::Remove-Unused-Dependencies "true";' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          remove_unused => false,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::Remove-Unused-Dependencies "false";' }
+      end
+    end
+  end
+
+  context 'auto_reboot' do
+    context 'true' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          auto_reboot => true
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::Automatic-Reboot "true";' }
+      end
+    end
+
+    context 'false' do
+      it 'should work with no errors' do
+        pp = <<-EOS
+        include apt
+        class { 'apt::unattended_upgrades':
+          auto_reboot => false,
+        }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+      end
+
+      describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+        it { should be_file }
+        it { should contain 'Unattended-Upgrade::Automatic-Reboot "false";' }
+      end
+    end
+  end
+
+  context 'dl_limit' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        dl_limit => '99'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/50unattended-upgrades') do
+      it { should be_file }
+      it { should contain 'Acquire::http::Dl-Limit "99"' }
+    end
+  end
+
+  context 'enable' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        enable => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::Enable "2"' }
+    end
+  end
+
+  context 'backup_interval' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        backup_interval => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::BackUpArchiveInterval "2";' }
+    end
+  end
+
+  context 'backup_level' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        backup_level => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::BackUpLevel "2";' }
+    end
+  end
+
+  context 'max_age' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        max_age => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::MaxAge "2";' }
+    end
+  end
+
+  context 'min_age' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        min_age => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::MinAge "2";' }
+    end
+  end
+
+  context 'max_size' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        max_size => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::MaxSize "2";' }
+    end
+  end
+
+  context 'download_delta' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        download_delta => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::Download-Upgradeable-Packages-Debdelta "2";' }
+    end
+  end
+
+  context 'verbose' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+      include apt
+      class { 'apt::unattended_upgrades':
+        verbose => '2'
+      }
+      EOS
+
+      apply_manifest(pp, :catch_failures => true)
+    end
+
+    describe file('/etc/apt/apt.conf.d/10periodic') do
+      it { should be_file }
+      it { should contain 'APT::Periodic::Verbose "2";' }
+    end
+  end
+
+end