X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Farchive%2Fspec%2Funit%2Fpuppet%2Fprovider%2Farchive%2Fcurl_spec.rb;fp=3rdparty%2Fmodules%2Farchive%2Fspec%2Funit%2Fpuppet%2Fprovider%2Farchive%2Fcurl_spec.rb;h=c06aa41331c78bc8e53569db6a9fdfa181a3cb19;hb=ce70d6baf887ae03a2a6a7f5e73eb2e2c3dea208;hp=0000000000000000000000000000000000000000;hpb=0ba93256399fbad7ed8fabfa39c24dd47169dde3;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/archive/spec/unit/puppet/provider/archive/curl_spec.rb b/3rdparty/modules/archive/spec/unit/puppet/provider/archive/curl_spec.rb new file mode 100644 index 000000000..c06aa4133 --- /dev/null +++ b/3rdparty/modules/archive/spec/unit/puppet/provider/archive/curl_spec.rb @@ -0,0 +1,172 @@ +require 'spec_helper' + +curl_provider = Puppet::Type.type(:archive).provider(:curl) + +RSpec.describe curl_provider do + it_behaves_like 'an archive provider', curl_provider + + describe '#download' do + let(:name) { '/tmp/example.zip' } + let(:resource) { Puppet::Type::Archive.new(resource_properties) } + let(:provider) { curl_provider.new(resource) } + + let(:default_options) do + [ + 'http://home.lan/example.zip', + '-o', + String, + '-fsSLg', + '--max-redirs', + 5 + ] + end + + before do + allow(FileUtils).to receive(:mv) + allow(provider).to receive(:curl) + end + + context 'no extra properties specified' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip' + } + end + + it 'calls curl with input, output and --max-redirects=5' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options) + end + end + + context 'username specified' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip', + username: 'foo' + } + end + + it 'calls curl with default options and username' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options << '--user' << 'foo') + end + end + + context 'username and password specified' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip', + username: 'foo', + password: 'bar' + } + end + + it 'calls curl with default options and password' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options << '--user' << 'foo:bar') + end + end + + context 'allow_insecure true' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip', + allow_insecure: true + } + end + + it 'calls curl with default options and --insecure' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options << '--insecure') + end + end + + context 'cookie specified' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip', + cookie: 'foo=bar' + } + end + + it 'calls curl with default options cookie' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options << '--cookie' << 'foo=bar') + end + end + + context 'using proxy' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip', + proxy_server: 'https://home.lan:8080' + } + end + + it 'calls curl with proxy' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options << '--proxy' << 'https://home.lan:8080') + end + end + + describe '#checksum' do + subject { provider.checksum } + + let(:url) { nil } + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip' + } + end + + before do + resource[:checksum_url] = url if url + end + + context 'with a url' do + let(:curl_params) do + [ + 'http://example.com/checksum', + '-fsSLg', + '--max-redirs', + 5 + ] + end + + let(:url) { 'http://example.com/checksum' } + + context 'responds with hash' do + let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' } + + it 'parses checksum value' do + allow(provider).to receive(:curl).with(curl_params).and_return("a0c38e1aeb175201b0dacd65e2f37e187657050a README.md\n") + expect(provider.checksum).to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') + end + end + end + end + + describe 'custom options' do + let(:resource_properties) do + { + name: name, + source: 'http://home.lan/example.zip', + download_options: ['--tlsv1'] + } + end + + it 'calls curl with custom tls options' do + provider.download(name) + expect(provider).to have_received(:curl).with(default_options << '--tlsv1') + end + end + end +end