mirror of
https://github.com/inspec/inspec
synced 2024-12-20 10:03:28 +00:00
0e187f6117
* Enable customization of supermarket_url It looks like this was originally supposed to work, but at some point the default value was put in the method body rather than in the method parameters. This change allows you to configure the supermarket_url in test kitchen like so: ``` verifier: inspec_tests: - name: linux-hardening supermarket: som3guy/apache-disa-stig supermarket_url: https://my.supermarket.com ``` Signed-off-by: Ryan Larson <ryan.mango.larson@gmail.com>
131 lines
5.3 KiB
Ruby
131 lines
5.3 KiB
Ruby
require 'helper'
|
|
require 'inspec-supermarket/api'
|
|
|
|
def default_url?(supermarket_url)
|
|
supermarket_url == Supermarket::API::SUPERMARKET_URL
|
|
end
|
|
|
|
describe Supermarket::API do
|
|
let(:subject) { Supermarket::API }
|
|
|
|
[Supermarket::API::SUPERMARKET_URL, 'https://my.custom.supermarket'].each do |supermarket_url|
|
|
|
|
describe "With #{default_url?(supermarket_url) ? 'default' : supermarket_url} Supermarket URL" do
|
|
|
|
let(:profile_search_response_body) do
|
|
{
|
|
'start' => 0,
|
|
'total' => 1,
|
|
'items' => [
|
|
{
|
|
'tool_name' => 'test_name',
|
|
'tool_type' => 'compliance_profile',
|
|
'tool_source_url' => supermarket_url,
|
|
'tool_description' => 'test_description',
|
|
'tool_owner' => 'test_owner',
|
|
'tool' => "#{supermarket_url}/api/v1/tools/test_name"
|
|
}
|
|
]
|
|
}
|
|
end
|
|
|
|
let(:profile_name) { 'supermarket://test_owner/test_name' }
|
|
|
|
describe '#profiles' do
|
|
it 'returns the profile list' do
|
|
stub_request(:get, "#{supermarket_url}/api/v1/tools-search?items=100&type=compliance_profile").
|
|
to_return(:status => 200, :body => profile_search_response_body.to_json)
|
|
test_profile = default_url?(supermarket_url) ? subject.profiles.first : subject.profiles(supermarket_url).first
|
|
|
|
test_profile.must_equal(profile_search_response_body['items'].first.merge({'slug' => 'test_name'}))
|
|
end
|
|
end
|
|
|
|
describe '#profile_name' do
|
|
it 'returns the profile name and owner from a supermarket://owner/name path' do
|
|
tool_owner, tool_name = subject.profile_name('supermarket://test_tool_owner/test_tool_name')
|
|
|
|
tool_owner.must_equal('test_tool_owner')
|
|
tool_name.must_equal('test_tool_name')
|
|
end
|
|
end
|
|
|
|
describe '#info' do
|
|
let(:profile_list_response_body) do
|
|
{
|
|
'name' => 'test_name',
|
|
'slug' => 'test_slug',
|
|
'type' => 'test_type',
|
|
'source_url' => supermarket_url,
|
|
'description' => 'test_description',
|
|
'instructions' => 'test_instructions',
|
|
'owner' => 'test_owner'
|
|
}
|
|
end
|
|
|
|
it 'returns profile info' do
|
|
stub_request(:get, "#{supermarket_url}/api/v1/tools/test_name").
|
|
to_return(:status => 200, :body => profile_list_response_body.to_json)
|
|
|
|
profile_info = default_url?(supermarket_url) ? subject.info('test_owner/test_name') : subject.info('test_owner/test_name', supermarket_url)
|
|
|
|
profile_info.must_equal(profile_list_response_body)
|
|
end
|
|
end
|
|
|
|
describe '#same?' do
|
|
let(:tool_url) { "#{supermarket_url}/api/v1/tools/test_name" }
|
|
|
|
it 'is the same on a match' do
|
|
supermarket_tool = {'tool_owner' => 'test_owner', 'tool' => tool_url}
|
|
same = default_url?(supermarket_url) ? subject.same?(profile_name, supermarket_tool) : subject.same?(profile_name, supermarket_tool, supermarket_url)
|
|
same.must_equal(true)
|
|
end
|
|
|
|
it 'is not the same on a mismatched owner' do
|
|
supermarket_tool = {'tool_owner' => 'wrong_owner', 'tool' => tool_url}
|
|
same = default_url?(supermarket_url) ? subject.same?(profile_name, supermarket_tool) : subject.same?(profile_name, supermarket_tool, supermarket_url)
|
|
same.must_equal(false)
|
|
end
|
|
|
|
it 'is not the same on a mismatched supermarket tool' do
|
|
supermarket_tool = {'tool_owner' => 'test_owner', 'tool' => 'garbage'}
|
|
same = default_url?(supermarket_url) ? subject.same?(profile_name, supermarket_tool) : subject.same?(profile_name, supermarket_tool, supermarket_url)
|
|
same.must_equal(false)
|
|
end
|
|
end
|
|
|
|
describe '#find' do
|
|
let(:empty_profile_search_response_body) do
|
|
{start: 0, total: 0, items: []}
|
|
end
|
|
|
|
it 'returns nil if profiles are empty' do
|
|
stub_request(:get, "#{supermarket_url}/api/v1/tools-search?items=100&type=compliance_profile").
|
|
to_return(:status => 200, :body => empty_profile_search_response_body.to_json)
|
|
|
|
search = default_url?(supermarket_url) ? subject.find(profile_name) : subject.find(profile_name, supermarket_url)
|
|
search.must_be_nil
|
|
end
|
|
|
|
it 'returns nil if profile not found' do
|
|
stub_request(:get, "#{supermarket_url}/api/v1/tools-search?items=100&type=compliance_profile").
|
|
to_return(:status => 200, :body => profile_search_response_body.to_json)
|
|
|
|
profile_name_cant_find = 'supermarket://cant_find/not_found'
|
|
search = default_url?(supermarket_url) ? subject.find(profile_name_cant_find) : subject.find(profile_name_cant_find, supermarket_url)
|
|
search.must_be_nil
|
|
end
|
|
|
|
it 'returns profile if it is found' do
|
|
stub_request(:get, "#{supermarket_url}/api/v1/tools-search?items=100&type=compliance_profile").
|
|
to_return(:status => 200, :body => profile_search_response_body.to_json)
|
|
|
|
profile = default_url?(supermarket_url) ? subject.find(profile_name) : subject.find(profile_name, supermarket_url)
|
|
|
|
profile.must_equal(profile_search_response_body['items'].first.merge({'slug' => 'test_name'}))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|