Merge pull request #324 from cmurphy/master
[puppet-modules/puppetlabs-apt.git] / spec / defines / ppa_spec.rb
1 require 'spec_helper'
2 describe 'apt::ppa', :type => :define do
3   [
4     {
5       :lsbdistrelease  => '11.04',
6       :lsbdistcodename => 'natty',
7       :operatingsystem => 'Ubuntu',
8       :lsbdistid       => 'Ubuntu',
9       :package         => 'python-software-properties'
10     },
11     {
12       :lsbdistrelease  => '12.10',
13       :lsbdistcodename => 'quantal',
14       :operatingsystem => 'Ubuntu',
15       :lsbdistid       => 'Ubuntu',
16       :package         => 'software-properties-common'
17     },
18   ].each do |platform|
19     context "on #{platform[:lsbdistcodename]}" do
20       let :facts do
21         {
22           :lsbdistrelease  => platform[:lsbdistrelease],
23           :lsbdistcodename => platform[:lsbdistcodename],
24           :operatingsystem => platform[:operatingsystem],
25           :lsbdistid       => platform[:lsbdistid],
26           :osfamily        => 'Debian',
27         }
28       end
29       let :release do
30         "#{platform[:lsbdistcodename]}"
31       end
32       let :package do
33         "#{platform[:package]}"
34       end
35       let :options do
36         "-y"
37       end
38       ['ppa:dans_ppa', 'dans_ppa','ppa:dans-daily/ubuntu'].each do |t|
39         describe "with title #{t}" do
40           let :pre_condition do
41             'class { "apt": }'
42           end
43           let :title do
44             t
45           end
46           let :filename do
47             t.sub(/^ppa:/,'').gsub('/','-') << "-" << "#{release}.list"
48           end
49
50           it { should contain_package("#{package}") }
51
52           it { should contain_exec("apt_update").with(
53             'command'     => '/usr/bin/apt-get update',
54             'refreshonly' => true
55             )
56           }
57
58           it { should contain_exec("add-apt-repository-#{t}").with(
59             'command' => "/usr/bin/add-apt-repository #{options} #{t}",
60             'unless'  => "/usr/bin/test -s /etc/apt/sources.list.d/#{filename}",
61             'require' => ["File[sources.list.d]", "Package[#{package}]"],
62             'notify'  => "Exec[apt_update]"
63             )
64           }
65
66           it { should create_file("/etc/apt/sources.list.d/#{filename}").with(
67             'ensure'  => 'file',
68             'require' => "Exec[add-apt-repository-#{t}]"
69             )
70           }
71         end
72       end
73       describe 'without a proxy defined' do
74         let :title do
75           'rspec_ppa'
76         end
77         let :pre_condition do
78           'class { "apt":
79              proxy_host => false
80           }'
81         end
82         let :filename do
83           "#{title}-#{release}.list"
84         end
85
86         it { should contain_exec("add-apt-repository-#{title}").with(
87           'environment' => [],
88           'command'     => "/usr/bin/add-apt-repository #{options} #{title}",
89           'unless'      => "/usr/bin/test -s /etc/apt/sources.list.d/#{filename}",
90           'require'     => ["File[sources.list.d]", "Package[#{package}]"],
91           'notify'      => "Exec[apt_update]"
92           )
93         }
94       end
95
96       describe 'behind a proxy' do
97         let :title do
98           'rspec_ppa'
99         end
100         let :pre_condition do
101           'class { "apt":
102             proxy_host => "user:pass@proxy",
103           }'
104         end
105           let :filename do
106             "#{title}-#{release}.list"
107           end
108
109         it { should contain_exec("add-apt-repository-#{title}").with(
110           'environment' => [
111             "http_proxy=http://user:pass@proxy:8080",
112             "https_proxy=http://user:pass@proxy:8080",
113           ],
114           'command'     => "/usr/bin/add-apt-repository #{options} #{title}",
115           'unless'      => "/usr/bin/test -s /etc/apt/sources.list.d/#{filename}",
116           'require'     => ["File[sources.list.d]", "Package[#{package}]"],
117           'notify'      => "Exec[apt_update]"
118           )
119         }
120       end
121     end
122   end
123
124   [ { :lsbdistcodename => 'natty',
125       :package => 'python-software-properties' },
126     { :lsbdistcodename => 'quantal',
127       :package => 'software-properties-common'},
128   ].each do |platform|
129     context "on #{platform[:lsbdistcodename]}" do
130       describe "it should not error if package['#{platform[:package]}'] is already defined" do
131         let :pre_condition do
132            'class {"apt": }' +
133            'package { "#{platform[:package]}": }->Apt::Ppa["ppa"]'
134         end
135         let :facts do
136           {:lsbdistcodename => '#{platform[:lsbdistcodename]}',
137            :operatingsystem => 'Ubuntu',
138            :lsbdistid => 'Ubuntu',
139            :osfamily => 'Debian'}
140         end
141         let(:title) { "ppa" }
142         let(:release) { "#{platform[:lsbdistcodename]}" }
143         it { should contain_package('#{platform[:package]}') }
144       end
145     end
146   end
147
148   describe "without Class[apt] should raise a Puppet::Error" do
149     let(:release) { "natty" }
150     let(:title) { "ppa" }
151     it { expect { should contain_apt__ppa(title) }.to raise_error(Puppet::Error) }
152   end
153
154   describe "without release should raise a Puppet::Error" do
155     let(:title) { "ppa:" }
156     it { expect { should contain_apt__ppa(:release) }.to raise_error(Puppet::Error) }
157   end
158 end