3 curl_provider = Puppet::Type.type(:archive).provider(:curl)
5 RSpec.describe curl_provider do
6 it_behaves_like 'an archive provider', curl_provider
8 describe '#download' do
9 let(:name) { '/tmp/example.zip' }
10 let(:resource) { Puppet::Type::Archive.new(resource_properties) }
11 let(:provider) { curl_provider.new(resource) }
13 let(:default_options) do
15 'http://home.lan/example.zip',
25 allow(FileUtils).to receive(:mv)
26 allow(provider).to receive(:curl)
29 context 'no extra properties specified' do
30 let(:resource_properties) do
33 source: 'http://home.lan/example.zip'
37 it 'calls curl with input, output and --max-redirects=5' do
38 provider.download(name)
39 expect(provider).to have_received(:curl).with(default_options)
43 context 'username specified' do
44 let(:resource_properties) do
47 source: 'http://home.lan/example.zip',
52 it 'calls curl with default options and username' do
53 provider.download(name)
54 expect(provider).to have_received(:curl).with(default_options << '--user' << 'foo')
58 context 'username and password specified' do
59 let(:resource_properties) do
62 source: 'http://home.lan/example.zip',
68 it 'calls curl with default options and password' do
69 provider.download(name)
70 expect(provider).to have_received(:curl).with(default_options << '--user' << 'foo:bar')
74 context 'allow_insecure true' do
75 let(:resource_properties) do
78 source: 'http://home.lan/example.zip',
83 it 'calls curl with default options and --insecure' do
84 provider.download(name)
85 expect(provider).to have_received(:curl).with(default_options << '--insecure')
89 context 'cookie specified' do
90 let(:resource_properties) do
93 source: 'http://home.lan/example.zip',
98 it 'calls curl with default options cookie' do
99 provider.download(name)
100 expect(provider).to have_received(:curl).with(default_options << '--cookie' << 'foo=bar')
104 context 'using proxy' do
105 let(:resource_properties) do
108 source: 'http://home.lan/example.zip',
109 proxy_server: 'https://home.lan:8080'
113 it 'calls curl with proxy' do
114 provider.download(name)
115 expect(provider).to have_received(:curl).with(default_options << '--proxy' << 'https://home.lan:8080')
119 describe '#checksum' do
120 subject { provider.checksum }
123 let(:resource_properties) do
126 source: 'http://home.lan/example.zip'
131 resource[:checksum_url] = url if url
134 context 'with a url' do
137 'http://example.com/checksum',
144 let(:url) { 'http://example.com/checksum' }
146 context 'responds with hash' do
147 let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' }
149 it 'parses checksum value' do
150 allow(provider).to receive(:curl).with(curl_params).and_return("a0c38e1aeb175201b0dacd65e2f37e187657050a README.md\n")
151 expect(provider.checksum).to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a')
157 describe 'custom options' do
158 let(:resource_properties) do
161 source: 'http://home.lan/example.zip',
162 download_options: ['--tlsv1']
166 it 'calls curl with custom tls options' do
167 provider.download(name)
168 expect(provider).to have_received(:curl).with(default_options << '--tlsv1')