X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Farchive%2Fspec%2Funit%2Fpuppet%2Fprovider%2Farchive%2Fruby_spec.rb;fp=3rdparty%2Fmodules%2Farchive%2Fspec%2Funit%2Fpuppet%2Fprovider%2Farchive%2Fruby_spec.rb;h=fa4cd9e817712cb3503e90fef059000455507adb;hb=ce70d6baf887ae03a2a6a7f5e73eb2e2c3dea208;hp=0000000000000000000000000000000000000000;hpb=0ba93256399fbad7ed8fabfa39c24dd47169dde3;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/archive/spec/unit/puppet/provider/archive/ruby_spec.rb b/3rdparty/modules/archive/spec/unit/puppet/provider/archive/ruby_spec.rb new file mode 100644 index 000000000..fa4cd9e81 --- /dev/null +++ b/3rdparty/modules/archive/spec/unit/puppet/provider/archive/ruby_spec.rb @@ -0,0 +1,97 @@ +require 'spec_helper' + +ruby_provider = Puppet::Type.type(:archive).provider(:ruby) + +RSpec.describe ruby_provider do + it_behaves_like 'an archive provider', ruby_provider + + describe 'ruby provider' do + let(:name) { '/tmp/example.zip' } + let(:resource_properties) do + { + name: name, + source: 's3://home.lan/example.zip' + } + end + let(:resource) { Puppet::Type::Archive.new(resource_properties) } + let(:provider) { ruby_provider.new(resource) } + + let(:s3_download_options) do + ['s3', 'cp', 's3://home.lan/example.zip', String] + end + + before do + allow(provider).to receive(:aws) + end + + context 'default resource property' do + it '#s3_download' do + provider.s3_download(name) + expect(provider).to have_received(:aws).with(s3_download_options) + end + + it '#extract nothing' do + expect(provider.extract).to be_nil + end + end + + describe '#checksum' do + subject { provider.checksum } + + let(:url) { nil } + let(:remote_hash) { nil } + + before do + resource[:checksum_url] = url if url + allow(PuppetX::Bodeco::Util).to receive(:content) .\ + with(url, any_args).and_return(remote_hash) + end + + context 'unset' do + it { is_expected.to be_nil } + end + + context 'with a url' do + let(:url) { 'http://example.com/checksum' } + + context 'responds with hash' do + let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' } + + it { is_expected.to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') } + end + context 'responds with hash and newline' do + let(:remote_hash) { "a0c38e1aeb175201b0dacd65e2f37e187657050a\n" } + + it { is_expected.to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') } + end + context 'responds with `sha1sum README.md` output' do + let(:remote_hash) { "a0c38e1aeb175201b0dacd65e2f37e187657050a README.md\n" } + + it { is_expected.to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') } + end + context 'responds with `openssl dgst -hex -sha256 README.md` output' do + let(:remote_hash) { "SHA256(README.md)= 8fa3f0ff1f2557657e460f0f78232679380a9bcdb8670e3dcb33472123b22428\n" } + + it { is_expected.to eq('8fa3f0ff1f2557657e460f0f78232679380a9bcdb8670e3dcb33472123b22428') } + end + end + end + + describe 'download options' do + let(:resource_properties) do + { + name: name, + source: 's3://home.lan/example.zip', + download_options: ['--region', 'eu-central-1'] + } + end + + context 'default resource property' do + it '#s3_download' do + provider.s3_download(name) + expect(provider).to have_received(:aws).with(s3_download_options << '--region' << 'eu-central-1') + end + end + end + end +end