X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fkeystone%2Fspec%2Funit%2Fprovider%2Fkeystone_spec.rb;h=44d265f52a2e82335dc1febc21ac625ba3e17601;hb=2dc39f2a756f82040d82cba324b21f44fad8ef3f;hp=de9ceb0d1893a19075d31ae0b4dc637838bcc568;hpb=b8fa2c1a5ec9dbcd1d2f9e9b41afdde4c603aa35;p=dsa-puppet.git diff --git a/3rdparty/modules/keystone/spec/unit/provider/keystone_spec.rb b/3rdparty/modules/keystone/spec/unit/provider/keystone_spec.rb index de9ceb0d..44d265f5 100644 --- a/3rdparty/modules/keystone/spec/unit/provider/keystone_spec.rb +++ b/3rdparty/modules/keystone/spec/unit/provider/keystone_spec.rb @@ -3,15 +3,19 @@ require 'spec_helper' require 'puppet/provider/keystone' require 'tempfile' - klass = Puppet::Provider::Keystone class Puppet::Provider::Keystone + @credentials = Puppet::Provider::Openstack::CredentialsV3.new + def self.reset @admin_endpoint = nil @tenant_hash = nil @admin_token = nil @keystone_file = nil + @domain_id_to_name = nil + @default_domain_id = nil + @domain_hash = nil end end @@ -21,20 +25,15 @@ describe Puppet::Provider::Keystone do klass.reset end - describe 'when retrieving the security token' do - it 'should return nothing if there is no keystone config file' do - ini_file = Puppet::Util::IniConfig::File.new - t = Tempfile.new('foo') - path = t.path - t.unlink - ini_file.read(path) + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(false) expect(klass.get_admin_token).to be_nil end it 'should return nothing if the keystone config file does not have a DEFAULT section' do mock = {} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') expect(klass.get_admin_token).to be_nil @@ -42,6 +41,7 @@ describe Puppet::Provider::Keystone do it 'should fail if the keystone config file does not contain an admin token' do mock = {'DEFAULT' => {'not_a_token' => 'foo'}} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') expect(klass.get_admin_token).to be_nil @@ -49,67 +49,125 @@ describe Puppet::Provider::Keystone do it 'should parse the admin token if it is in the config file' do mock = {'DEFAULT' => {'admin_token' => 'foo'}} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_token.should == 'foo' + expect(klass.get_admin_token).to eq('foo') end it 'should use the specified bind_host in the admin endpoint' do mock = {'DEFAULT' => {'admin_bind_host' => '192.168.56.210', 'admin_port' => '35357' }} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'http://192.168.56.210:35357/v2.0/' + expect(klass.get_admin_endpoint).to eq('http://192.168.56.210:35357/v3/') end it 'should use localhost in the admin endpoint if bind_host is 0.0.0.0' do mock = {'DEFAULT' => { 'admin_bind_host' => '0.0.0.0', 'admin_port' => '35357' }} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'http://127.0.0.1:35357/v2.0/' + expect(klass.get_admin_endpoint).to eq('http://127.0.0.1:35357/v3/') end it 'should use [::1] in the admin endpoint if bind_host is ::0' do mock = {'DEFAULT' => { 'admin_bind_host' => '::0', 'admin_port' => '35357' }} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'http://[::1]:35357/v2.0/' + expect(klass.get_admin_endpoint).to eq('http://[::1]:35357/v3/') end it 'should use localhost in the admin endpoint if bind_host is unspecified' do mock = {'DEFAULT' => { 'admin_port' => '35357' }} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'http://127.0.0.1:35357/v2.0/' + expect(klass.get_admin_endpoint).to eq('http://127.0.0.1:35357/v3/') end it 'should use https if ssl is enabled' do mock = {'DEFAULT' => {'admin_bind_host' => '192.168.56.210', 'admin_port' => '35357' }, 'ssl' => {'enable' => 'True'}} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'https://192.168.56.210:35357/v2.0/' + expect(klass.get_admin_endpoint).to eq('https://192.168.56.210:35357/v3/') end it 'should use http if ssl is disabled' do mock = {'DEFAULT' => {'admin_bind_host' => '192.168.56.210', 'admin_port' => '35357' }, 'ssl' => {'enable' => 'False'}} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'http://192.168.56.210:35357/v2.0/' + expect(klass.get_admin_endpoint).to eq('http://192.168.56.210:35357/v3/') end it 'should use the defined admin_endpoint if available' do mock = {'DEFAULT' => {'admin_endpoint' => 'https://keystone.example.com' }, 'ssl' => {'enable' => 'False'}} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'https://keystone.example.com/v2.0/' + expect(klass.get_admin_endpoint).to eq('https://keystone.example.com/v3/') end it 'should handle an admin_endpoint with a trailing slash' do mock = {'DEFAULT' => {'admin_endpoint' => 'https://keystone.example.com/' }, 'ssl' => {'enable' => 'False'}} + File.expects(:exists?).with("/etc/keystone/keystone.conf").returns(true) Puppet::Util::IniConfig::File.expects(:new).returns(mock) mock.expects(:read).with('/etc/keystone/keystone.conf') - klass.get_admin_endpoint.should == 'https://keystone.example.com/v2.0/' + expect(klass.get_admin_endpoint).to eq('https://keystone.example.com/v3/') end end + describe 'when using domains' do + it 'name_and_domain should return the resource domain' do + expect(klass.name_and_domain('foo::in_name', 'from_resource', 'default')).to eq(['foo', 'from_resource']) + end + it 'name_and_domain should return the default domain' do + expect(klass.name_and_domain('foo', nil, 'default')).to eq(['foo', 'default']) + end + it 'name_and_domain should return the domain part of the name' do + expect(klass.name_and_domain('foo::in_name', nil, 'default')).to eq(['foo', 'in_name']) + end + it 'should return the default domain name using the default_domain_id from keystone.conf' do + ENV['OS_USERNAME'] = 'test' + ENV['OS_PASSWORD'] = 'abc123' + ENV['OS_PROJECT_NAME'] = 'test' + ENV['OS_AUTH_URL'] = 'http://127.0.0.1:35357/v3' + mock = { + 'DEFAULT' => { + 'admin_endpoint' => 'http://127.0.0.1:35357', + 'admin_token' => 'admin_token' + }, + 'identity' => {'default_domain_id' => 'somename'} + } + File.expects(:exists?).with('/etc/keystone/keystone.conf').returns(true) + Puppet::Util::IniConfig::File.expects(:new).returns(mock) + mock.expects(:read).with('/etc/keystone/keystone.conf') + klass.expects(:openstack) + .with('domain', 'list', '--quiet', '--format', 'csv', []) + .returns('"ID","Name","Enabled","Description" +"somename","SomeName",True,"default domain" +') + expect(klass.name_and_domain('foo')).to eq(['foo', 'SomeName']) + end + it 'should return Default if default_domain_id is not configured' do + ENV['OS_USERNAME'] = 'test' + ENV['OS_PASSWORD'] = 'abc123' + ENV['OS_PROJECT_NAME'] = 'test' + ENV['OS_AUTH_URL'] = 'http://127.0.0.1:35357/v3' + mock = {} + Puppet::Util::IniConfig::File.expects(:new).returns(mock) + File.expects(:exists?).with('/etc/keystone/keystone.conf').returns(true) + mock.expects(:read).with('/etc/keystone/keystone.conf') + klass.expects(:openstack) + .with('domain', 'list', '--quiet', '--format', 'csv', []) + .returns('"ID","Name","Enabled","Description" +"default","Default",True,"default domain" +') + expect(klass.name_and_domain('foo')).to eq(['foo', 'Default']) + end + end end