Files
puppet-keystone/spec/classes/keystone_federation_identity_provider_spec.rb
Takashi Kajinami e13958ad9e Refactor api service management
Drop validation of service name which is not implemented for
the other daemons. This allows us to simplify handling of the provided
service name.

Also remove the "dead" support for standalone keystone service in
CentOS/RHEL because the service is no longer available in these
operating systems.

Change-Id: I4aacfc55e43bc15a1e9f821353633d651dc29dfa
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-09-28 01:33:14 +09:00

124 lines
5.1 KiB
Ruby

require 'spec_helper'
describe 'keystone::federation::identity_provider' do
let :params do
{
:user => 'keystone',
:certfile => '/etc/keystone/ssl/certs/signing_cert.pem',
:keyfile => '/etc/keystone/ssl/private/signing_key.pem',
:idp_entity_id => 'https://keystone.example.com/v3/OS-FEDERATION/saml2/idp',
:idp_sso_endpoint => 'https://keystone.example.com/v3/OS-FEDERATION/saml2/sso',
:idp_metadata_path => '/etc/keystone/saml2_idp_metadata.xml'
}
end
let :optional_params do
{
:idp_organization_name => 'ExampleCompany',
:idp_organization_display_name => 'Example',
:idp_organization_url => 'www.example.com',
:idp_contact_company => 'someone',
:idp_contact_name => 'name',
:idp_contact_surname => 'surname',
:idp_contact_email => 'name@example.com',
:idp_contact_telephone => '+55000000000',
:idp_contact_type => 'other'
}
end
shared_examples 'keystone::federation::identity_provider' do
let :pre_condition do
<<-EOS
include apache
class { 'keystone':
service_name => 'httpd',
}
include keystone::wsgi::apache
EOS
end
context 'with required params' do
it { is_expected.to contain_class('keystone::params') }
it { is_expected.to contain_package('xmlsec1').with(
:ensure => 'present',
)}
it {
is_expected.to contain_keystone_config('saml/certfile').with_value(params[:certfile])
is_expected.to contain_keystone_config('saml/keyfile').with_value(params[:keyfile])
is_expected.to contain_keystone_config('saml/idp_entity_id').with_value(params[:idp_entity_id])
is_expected.to contain_keystone_config('saml/idp_sso_endpoint').with_value(params[:idp_sso_endpoint])
is_expected.to contain_keystone_config('saml/idp_metadata_path').with_value(params[:idp_metadata_path])
}
it { is_expected.to contain_exec('saml_idp_metadata').with(
:command => "keystone-manage saml_idp_metadata > #{params[:idp_metadata_path]}",
:creates => "#{params[:idp_metadata_path]}",
)}
it { is_expected.to contain_file("#{params[:idp_metadata_path]}").with(
:ensure => 'file',
:mode => '0600',
:owner => 'keystone',
)}
end
context 'with keystone optional params' do
before do
params.merge!(optional_params)
end
it {
is_expected.to contain_keystone_config('saml/certfile').with_value(params[:certfile])
is_expected.to contain_keystone_config('saml/keyfile').with_value(params[:keyfile])
is_expected.to contain_keystone_config('saml/idp_entity_id').with_value(params[:idp_entity_id])
is_expected.to contain_keystone_config('saml/idp_sso_endpoint').with_value(params[:idp_sso_endpoint])
is_expected.to contain_keystone_config('saml/idp_metadata_path').with_value(params[:idp_metadata_path])
is_expected.to contain_keystone_config('saml/idp_organization_name').with_value(params[:idp_organization_name])
is_expected.to contain_keystone_config('saml/idp_organization_display_name').with_value(params[:idp_organization_display_name])
is_expected.to contain_keystone_config('saml/idp_organization_url').with_value(params[:idp_organization_url])
is_expected.to contain_keystone_config('saml/idp_contact_company').with_value(params[:idp_contact_company])
is_expected.to contain_keystone_config('saml/idp_contact_name').with_value(params[:idp_contact_name])
is_expected.to contain_keystone_config('saml/idp_contact_surname').with_value(params[:idp_contact_surname])
is_expected.to contain_keystone_config('saml/idp_contact_email').with_value(params[:idp_contact_email])
is_expected.to contain_keystone_config('saml/idp_contact_telephone').with_value(params[:idp_contact_telephone])
is_expected.to contain_keystone_config('saml/idp_contact_type').with_value(params[:idp_contact_type])
}
end
context 'with invalid values for idp_contact_type' do
before do
params.merge!(:idp_contact_type => 'foobar')
end
it { is_expected.to raise_error(Puppet::Error, /Allowed values for idp_contact_type are: technical, support, administrative, billing and other/) }
end
end
shared_examples 'keystone::federation::identity_provider without Apache' do
let :pre_condition do
'include keystone'
end
context 'with default parameters' do
it { is_expected.to raise_error(Puppet::Error, /Keystone need to be running under Apache for Federation work./) }
end
end
on_supported_os({
:supported_os => OSDefaults.get_supported_os
}).each do |os,facts|
context "on #{os}" do
let (:facts) do
facts.merge!(OSDefaults.get_facts())
end
it_behaves_like 'keystone::federation::identity_provider'
if facts[:os]['name'] == 'Debian'
it_behaves_like 'keystone::federation::identity_provider without Apache'
end
end
end
end