Add puppet/archive module, required for newer puppet/rabbitmq
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / spec / unit / puppet / provider / archive / curl_spec.rb
1 require 'spec_helper'
2
3 curl_provider = Puppet::Type.type(:archive).provider(:curl)
4
5 RSpec.describe curl_provider do
6   it_behaves_like 'an archive provider', curl_provider
7
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) }
12
13     let(:default_options) do
14       [
15         'http://home.lan/example.zip',
16         '-o',
17         String,
18         '-fsSL',
19         '--max-redirs',
20         5
21       ]
22     end
23
24     before do
25       allow(FileUtils).to receive(:mv)
26       allow(provider).to receive(:curl)
27     end
28
29     context 'no extra properties specified' do
30       let(:resource_properties) do
31         {
32           name: name,
33           source: 'http://home.lan/example.zip'
34         }
35       end
36
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)
40       end
41     end
42
43     context 'username specified' do
44       let(:resource_properties) do
45         {
46           name: name,
47           source: 'http://home.lan/example.zip',
48           username: 'foo'
49         }
50       end
51
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')
55       end
56     end
57
58     context 'username and password specified' do
59       let(:resource_properties) do
60         {
61           name: name,
62           source: 'http://home.lan/example.zip',
63           username: 'foo',
64           password: 'bar'
65         }
66       end
67
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')
71       end
72     end
73
74     context 'allow_insecure true' do
75       let(:resource_properties) do
76         {
77           name: name,
78           source: 'http://home.lan/example.zip',
79           allow_insecure: true
80         }
81       end
82
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')
86       end
87     end
88
89     context 'cookie specified' do
90       let(:resource_properties) do
91         {
92           name: name,
93           source: 'http://home.lan/example.zip',
94           cookie: 'foo=bar'
95         }
96       end
97
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')
101       end
102     end
103
104     context 'using proxy' do
105       let(:resource_properties) do
106         {
107           name: name,
108           source: 'http://home.lan/example.zip',
109           proxy_server: 'https://home.lan:8080'
110         }
111       end
112
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')
116       end
117     end
118
119     describe '#checksum' do
120       subject { provider.checksum }
121
122       let(:url) { nil }
123       let(:resource_properties) do
124         {
125           name: name,
126           source: 'http://home.lan/example.zip'
127         }
128       end
129
130       before do
131         resource[:checksum_url] = url if url
132       end
133
134       context 'with a url' do
135         let(:curl_params) do
136           [
137             'http://example.com/checksum',
138             '-fsSL',
139             '--max-redirs',
140             5
141           ]
142         end
143
144         let(:url) { 'http://example.com/checksum' }
145
146         context 'responds with hash' do
147           let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' }
148
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')
152           end
153         end
154       end
155     end
156
157     describe 'custom options' do
158       let(:resource_properties) do
159         {
160           name: name,
161           source: 'http://home.lan/example.zip',
162           download_options: ['--tlsv1']
163         }
164       end
165
166       it 'calls curl with custom tls options' do
167         provider.download(name)
168         expect(provider).to have_received(:curl).with(default_options << '--tlsv1')
169       end
170     end
171   end
172 end