Sofer Athlan-Guyot 5167a2c804 Refactor of keystone_domain provider.
This remove the @@default_domain_id from the code.  It is no longer
necessary to have a global class variable sharing this id.  All is now
encapsulated inside the keystone_domain class.

The change come mainly from the new policy regarding default domain[1]
which simplifies the logic, and the code.

[1] https://etherpad.openstack.org/p/keystone_no_domain

Change-Id: I71ab37165db6b0fe8472e7dfc8abcf72e0caac4a
2015-11-19 23:03:51 +00:00

182 lines
5.2 KiB
Ruby

require 'puppet'
require 'spec_helper'
require 'puppet/provider/keystone_domain/openstack'
setup_provider_tests
provider_class = Puppet::Type.type(:keystone_domain).provider(:openstack)
describe provider_class do
let(:set_env) do
ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test'
ENV['OS_AUTH_URL'] = 'http://127.0.0.1:35357/v2.0'
end
describe 'when managing a domain' do
let(:domain_attrs) do
{
:name => 'foo',
:description => 'foo',
:ensure => 'present',
:enabled => 'True'
}
end
let(:resource) do
Puppet::Type::Keystone_domain.new(domain_attrs)
end
let(:provider) do
provider_class.new(resource)
end
let(:another_class) do
class AnotherKlass < Puppet::Provider::Keystone
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
end
AnotherKlass
end
before :each do
set_env
end
after :each do
provider_class.reset
another_class.reset
end
describe '#create' do
it 'creates a domain' do
provider_class.expects(:current_default_domain_id).returns('default')
entry = mock
provider.expects(:keystone_conf_default_domain_id_entry).returns(entry)
provider.class.expects(:openstack)
.with('domain', 'create', '--format', 'shell', ['foo', '--enable', '--description', 'foo'])
.returns('id="1cb05cfed7c24279be884ba4f6520262"
name="foo"
description="foo"
enabled=True
')
provider.create
expect(provider.exists?).to be_truthy
end
end
describe '#destroy' do
it 'destroys a domain' do
provider_class.expects(:current_default_domain_id).returns('default')
entry = mock
provider.expects(:keystone_conf_default_domain_id_entry).returns(entry)
provider_class.expects(:openstack)
.with('domain', 'set', ['foo', '--disable'])
provider_class.expects(:openstack)
.with('domain', 'delete', 'foo')
provider.destroy
expect(provider.exists?).to be_falsey
end
end
describe '#instances' do
it 'finds every domain' do
provider_class.expects(:openstack)
.with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo",True
')
provider_class.expects(:current_default_domain_id).returns('default')
instances = provider_class.instances
expect(instances.count).to eq(1)
end
end
describe '#create default' do
let(:domain_attrs) do
{
:name => 'new_default',
:description => 'New default domain.',
:ensure => 'present',
:enabled => 'True',
:is_default => 'True'
}
end
context 'default_domain_id defined in keystone.conf' do
it 'creates a default domain' do
provider_class.expects(:openstack)
.with('domain', 'create', '--format', 'shell',
['new_default', '--enable', '--description', 'New default domain.'])
.returns('id="1cb05cfed7c24279be884ba4f6520262"
name="foo"
description="foo"
enabled=True
')
provider_class.expects(:current_default_domain_id).returns('default')
entry = mock
provider.expects(:keystone_conf_default_domain_id_entry).returns(entry)
entry.expects(:create).returns(nil)
provider.create
expect(provider.exists?).to be_truthy
end
end
end
describe '#destroy default' do
it 'destroys a default domain' do
provider_class.expects(:current_default_domain_id).returns('my-domainid')
entry = mock
provider.expects(:keystone_conf_default_domain_id_entry).returns(entry)
provider.expects(:is_default).returns(:true)
provider.expects(:id).twice.returns('my-domainid')
provider.class.expects(:openstack)
.with('domain', 'set', ['foo', '--disable'])
provider.class.expects(:openstack)
.with('domain', 'delete', 'foo')
entry.expects(:destroy)
provider.destroy
expect(provider.exists?).to be_falsey
end
end
describe '#flush' do
let(:domain_attrs) do
{
:name => 'foo',
:description => 'new description',
:ensure => 'present',
:enabled => 'True',
:is_default => 'False'
}
end
it 'changes the description' do
provider.class.expects(:openstack)
.with('domain', 'set', ['foo', '--description', 'new description'])
provider.description=('new description')
provider.flush
end
it 'changes is_default' do
provider_class.expects(:current_default_domain_id).returns('previous_default_domain-id')
entry = mock
provider.expects(:keystone_conf_default_domain_id_entry).returns(entry)
provider.expects(:id).twice.returns('current_default_domain')
entry.expects(:create)
provider.is_default=(:true)
provider.flush
end
end
end
end