Merge pull request #418 from cmurphy/rspec
[puppet-modules/puppetlabs-apt.git] / spec / unit / puppet / type / apt_key_spec.rb
1 require 'spec_helper'
2 require 'puppet'
3
4 describe Puppet::Type::type(:apt_key) do
5   context 'only namevar 32bit key id' do
6     let(:resource) { Puppet::Type.type(:apt_key).new(
7       :id => '4BD6EC30'
8     )}
9     it 'id is set' do
10       resource[:id].should eq '4BD6EC30'
11     end
12
13     it 'name is set to id' do
14       resource[:name].should eq '4BD6EC30'
15     end
16
17     it 'keyserver is default' do
18       resource[:server].should eq :'keyserver.ubuntu.com'
19     end
20
21     it 'source is not set' do
22       resource[:source].should eq nil
23     end
24
25     it 'content is not set' do
26       resource[:content].should eq nil
27     end
28   end
29
30   context 'with a lowercase 32bit key id' do
31     let(:resource) { Puppet::Type.type(:apt_key).new(
32       :id => '4bd6ec30'
33     )}
34     it 'id is set' do
35       resource[:id].should eq '4BD6EC30'
36     end
37   end
38
39   context 'with a 64bit key id' do
40     let(:resource) { Puppet::Type.type(:apt_key).new(
41       :id => 'FFFFFFFF4BD6EC30'
42     )}
43     it 'id is set' do
44       resource[:id].should eq 'FFFFFFFF4BD6EC30'
45     end
46   end
47
48   context 'with a 0x formatted key id' do
49     let(:resource) { Puppet::Type.type(:apt_key).new(
50       :id => '0x4BD6EC30'
51     )}
52     it 'id is set' do
53       resource[:id].should eq '4BD6EC30'
54     end
55   end
56
57   context 'with a 0x formatted lowercase key id' do
58     let(:resource) { Puppet::Type.type(:apt_key).new(
59       :id => '0x4bd6ec30'
60     )}
61     it 'id is set' do
62       resource[:id].should eq '4BD6EC30'
63     end
64   end
65
66   context 'with a 0x formatted 64bit key id' do
67     let(:resource) { Puppet::Type.type(:apt_key).new(
68       :id => '0xFFFFFFFF4BD6EC30'
69     )}
70     it 'id is set' do
71       resource[:id].should eq 'FFFFFFFF4BD6EC30'
72     end
73   end
74
75   context 'with source' do
76     let(:resource) { Puppet::Type.type(:apt_key).new(
77       :id => '4BD6EC30',
78       :source => 'http://apt.puppetlabs.com/pubkey.gpg'
79     )}
80
81     it 'source is set to the URL' do
82       resource[:source].should eq 'http://apt.puppetlabs.com/pubkey.gpg'
83     end
84   end
85
86   context 'with content' do
87     let(:resource) { Puppet::Type.type(:apt_key).new(
88       :id => '4BD6EC30',
89       :content => 'http://apt.puppetlabs.com/pubkey.gpg'
90     )}
91
92     it 'content is set to the string' do
93       resource[:content].should eq 'http://apt.puppetlabs.com/pubkey.gpg'
94     end
95   end
96
97   context 'with keyserver' do
98     let(:resource) { Puppet::Type.type(:apt_key).new(
99       :id => '4BD6EC30',
100       :server => 'http://keyring.debian.org'
101     )}
102
103     it 'keyserver is set to Debian' do
104       resource[:server].should eq 'http://keyring.debian.org'
105     end
106   end
107
108   context 'validation' do
109     it 'raises an error if content and source are set' do
110       expect { Puppet::Type.type(:apt_key).new(
111         :id      => '4BD6EC30',
112         :source  => 'http://apt.puppetlabs.com/pubkey.gpg',
113         :content => 'Completely invalid as a GPG key'
114       )}.to raise_error(/content and source are mutually exclusive/)
115     end
116
117     it 'raises an error if a weird length key is used' do
118       expect { Puppet::Type.type(:apt_key).new(
119         :id      => 'F4BD6EC30',
120         :source  => 'http://apt.puppetlabs.com/pubkey.gpg',
121         :content => 'Completely invalid as a GPG key'
122       )}.to raise_error(/Valid values match/)
123     end
124
125     it 'raises an error when an invalid URI scheme is used in source' do
126       expect { Puppet::Type.type(:apt_key).new(
127         :id      => '4BD6EC30',
128         :source  => 'hkp://pgp.mit.edu'
129       )}.to raise_error(/Valid values match/)
130     end
131
132     it 'allows the http URI scheme in source' do
133       expect { Puppet::Type.type(:apt_key).new(
134         :id      => '4BD6EC30',
135         :source  => 'http://pgp.mit.edu'
136       )}.to_not raise_error
137     end
138
139     it 'allows the https URI scheme in source' do
140       expect { Puppet::Type.type(:apt_key).new(
141         :id      => '4BD6EC30',
142         :source  => 'https://pgp.mit.edu'
143       )}.to_not raise_error
144     end
145
146     it 'allows the https URI with username and password' do
147       expect { Puppet::Type.type(:apt_key).new(
148           :id      => '4BD6EC30',
149           :source  => 'https://testme:Password2@pgp.mit.edu'
150       )}.to_not raise_error
151     end
152
153     it 'allows the ftp URI scheme in source' do
154       expect { Puppet::Type.type(:apt_key).new(
155         :id      => '4BD6EC30',
156         :source  => 'ftp://pgp.mit.edu'
157       )}.to_not raise_error
158     end
159
160     it 'allows an absolute path in source' do
161       expect { Puppet::Type.type(:apt_key).new(
162         :id      => '4BD6EC30',
163         :source  => '/path/to/a/file'
164       )}.to_not raise_error
165     end
166
167     it 'allows 5-digit ports' do
168       expect { Puppet::Type.type(:apt_key).new(
169         :id      => '4BD6EC30',
170         :source  => 'http://pgp.mit.edu:12345/key'
171       )}.to_not raise_error
172     end
173
174     it 'allows 5-digit ports when using key servers' do
175       expect { Puppet::Type.type(:apt_key).new(
176         :id      => '4BD6EC30',
177         :server  => 'http://pgp.mit.edu:12345'
178       )}.to_not raise_error
179     end
180   end
181 end