mirror of
https://github.com/inspec/inspec
synced 2024-12-21 02:23:13 +00:00
2d44b6e5e0
* Leverage existance check in Compliance::Fetcher.resolve to not re-download locally cached profiles * Move logic from Compliance::API.exist? to Compliance::API.profiles to reuse code in cases where we need to access profiles' metadata directly. * Declare @upstream_sha256 if target is a string * Handle other fetchers that don't support upstream_sha256 within Inspec::CachedFetcher.initialize * Add initialize for Compliance::Fetcher to not pollute Fetchers::Url with its logic * Add Compliance::Fetcher.sha256 to leverage upstream_sha256 instead of relying on inherited method from Fetchers::Url * Revert changes to cached fetcher that are unnecessary after refactor * Pacify the god of ruby syntax * Move Compliance::API.profiles filtering logic to end of method to leverage normalization of mapped_profiles * Add and update unit tests to support caching with Compliance::Fetcher.upstream_sha256 Signed-off-by: Josh Hudson <jhudson@chef.io>
57 lines
2.2 KiB
Ruby
57 lines
2.2 KiB
Ruby
require 'helper'
|
|
|
|
describe Inspec::CachedFetcher do
|
|
describe 'when original fetcher is Compliance::Fetcher' do
|
|
let(:profiles_result) do
|
|
[{ 'name'=>'ssh-baseline',
|
|
'title'=>'InSpec Profile',
|
|
'maintainer'=>'The Authors',
|
|
'copyright'=>'The Authors',
|
|
'copyright_email'=>'you@example.com',
|
|
'license'=>'Apache-2.0',
|
|
'summary'=>'An InSpec Compliance Profile',
|
|
'version'=>'0.1.1',
|
|
'owner'=>'admin',
|
|
'supports'=>[],
|
|
'depends'=>[],
|
|
'sha256'=>'132j1kjdasfasdoaefaewo12312',
|
|
'groups'=>[],
|
|
'controls'=>[],
|
|
'attributes'=>[],
|
|
'latest_version'=>'' }]
|
|
end
|
|
before do
|
|
Compliance::Configuration.expects(:new).returns({ 'token' => '123abc', 'server' => 'https://a2.instance.com' })
|
|
end
|
|
|
|
it 'downloads the profile from the compliance service when sha256 not in the cache' do
|
|
prof = profiles_result[0]
|
|
Compliance::API.stubs(:profiles).returns(['success', profiles_result])
|
|
cache = Inspec::Cache.new
|
|
entry_path = cache.base_path_for(prof['sha256'])
|
|
mock_fetch = Minitest::Mock.new
|
|
mock_fetch.expect :call, "#{entry_path}.tar.gz", [entry_path]
|
|
cf = Inspec::CachedFetcher.new("compliance://#{prof['owner']}/#{prof['name']}", cache)
|
|
cache.stubs(:exists?).with(prof['sha256']).returns(false)
|
|
cf.fetcher.stub(:fetch, mock_fetch) do
|
|
cf.fetch
|
|
end
|
|
mock_fetch.verify
|
|
end
|
|
|
|
it 'does not download the profile when the sha256 exists in the inspec cache' do
|
|
prof = profiles_result[0]
|
|
Compliance::API.stubs(:profiles).returns(['success', profiles_result])
|
|
cache = Inspec::Cache.new
|
|
entry_path = cache.base_path_for(prof['sha256'])
|
|
mock_prefered_entry_for = Minitest::Mock.new
|
|
mock_prefered_entry_for.expect :call, entry_path, [prof['sha256']]
|
|
cf = Inspec::CachedFetcher.new("compliance://#{prof['owner']}/#{prof['name']}", cache)
|
|
cache.stubs(:exists?).with(prof['sha256']).returns(true)
|
|
cache.stub(:prefered_entry_for, mock_prefered_entry_for) do
|
|
cf.fetch
|
|
end
|
|
mock_prefered_entry_for.verify
|
|
end
|
|
end
|
|
end
|