X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fkeystone%2Fspec%2Funit%2Fprovider%2Fkeystone_tenant%2Fopenstack_spec.rb;h=fd17e4250cbb0835759b4c6cab3129b8e9174a0f;hb=2dc39f2a756f82040d82cba324b21f44fad8ef3f;hp=11861fc8b26fde7e5c5fc6ec13582cf2bb37640e;hpb=b8fa2c1a5ec9dbcd1d2f9e9b41afdde4c603aa35;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/keystone/spec/unit/provider/keystone_tenant/openstack_spec.rb b/3rdparty/modules/keystone/spec/unit/provider/keystone_tenant/openstack_spec.rb index 11861fc8b..fd17e4250 100644 --- a/3rdparty/modules/keystone/spec/unit/provider/keystone_tenant/openstack_spec.rb +++ b/3rdparty/modules/keystone/spec/unit/provider/keystone_tenant/openstack_spec.rb @@ -4,103 +4,233 @@ require 'puppet/provider/keystone_tenant/openstack' provider_class = Puppet::Type.type(:keystone_tenant).provider(:openstack) +class Puppet::Provider::Keystone + 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 + describe provider_class do - describe 'when updating a tenant' do - - let(:tenant_attrs) do - { - :name => 'foo', - :description => 'foo', - :ensure => 'present', - :enabled => 'True', - :auth => { - 'username' => 'test', - 'password' => 'abc123', - 'tenant_name' => 'foo', - 'auth_url' => 'http://127.0.0.1:5000/v2.0', - } - } - end + after :each do + provider_class.reset + end - let(:resource) do - Puppet::Type::Keystone_tenant.new(tenant_attrs) - end + let(:tenant_attrs) do + { + :name => 'foo', + :description => 'foo', + :ensure => 'present', + :enabled => 'True', + } + end - let(:provider) do - provider_class.new(resource) - end + let(:resource) do + Puppet::Type::Keystone_tenant.new(tenant_attrs) + end - describe '#create' do - it 'creates a tenant' do - provider.class.stubs(:openstack) - .with('project', 'list', '--quiet', '--format', 'csv', [['--long', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - .returns('"ID","Name","Description","Enabled" -"1cb05cfed7c24279be884ba4f6520262","foo","foo",True + let(:provider) do + provider_class.new(resource) + end + + def before_hook(domainlist) + if domainlist + provider.class.expects(:openstack).once + .with('domain', 'list', '--quiet', '--format', 'csv', []) + .returns('"ID","Name","Enabled","Description" +"foo_domain_id","foo_domain",True,"foo domain" +"bar_domain_id","bar_domain",True,"bar domain" +"another_domain_id","another_domain",True,"another domain" +"disabled_domain_id","disabled_domain",False,"disabled domain" +"default","Default",True,"the default domain" ') - provider.class.stubs(:openstack) - .with('project', 'create', '--format', 'shell', [['foo', '--enable', '--description', 'foo', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - .returns('description="foo" + end + end + + before :each, :domainlist => true do + before_hook(true) + end + + before :each, :domainlist => false do + before_hook(false) + end + + shared_examples 'authenticated with environment variables' 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' + end + + describe 'when managing a tenant' do + + it_behaves_like 'authenticated with environment variables' do + describe '#create', :domainlist => true do + it 'creates a tenant' do + provider.class.expects(:openstack) + .with('project', 'create', '--format', 'shell', ['foo', '--enable', '--description', 'foo', '--domain', 'Default']) + .returns('description="foo" enabled="True" name="foo" +id="foo" +domain_id="foo_domain_id" ') - provider.create - expect(provider.exists?).to be_truthy + provider.create + expect(provider.exists?).to be_truthy + end end - end - describe '#destroy' do - it 'destroys a tenant' do - provider.class.stubs(:openstack) - .with('project', 'list', '--quiet', '--format', 'csv', [['--long', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - .returns('"ID","Name","Description","Enabled"') - provider.class.stubs(:openstack) - .with('project', 'delete', [['foo', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - provider.destroy - expect(provider.exists?).to be_falsey + describe '#destroy', :domainlist => false do + it 'destroys a tenant' do + provider.instance_variable_get('@property_hash')[:id] = 'my-project-id' + provider.class.expects(:openstack) + .with('project', 'delete', 'my-project-id') + provider.destroy + expect(provider.exists?).to be_falsey + end end - end + context 'when tenant does not exist', :domainlist => false do + subject(:response) do + response = provider.exists? + end - describe '#exists' do - context 'when tenant exists' do + it { expect(response).to be_falsey } + end - subject(:response) do - provider.class.stubs(:openstack) - .with('project', 'list', '--quiet', '--format', 'csv', [['--long', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - .returns('"ID","Name","Description","Enabled" -"1cb05cfed7c24279be884ba4f6520262","foo","foo",True + describe '#instances', :domainlist => true do + it 'finds every tenant' do + provider.class.expects(:openstack) + .with('project', 'list', '--quiet', '--format', 'csv', '--long') + .returns('"ID","Name","Domain ID","Description","Enabled" +"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True +"2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True ') - response = provider.exists? + instances = provider.class.instances + expect(instances[0].name).to eq('foo') + expect(instances[0].domain).to eq('bar_domain') + expect(instances[1].name).to eq('foo::foo_domain') end + end + end + + describe 'v3 domains with no domain in resource', :domainlist => true do - it { is_expected.to be_truthy } + let(:tenant_attrs) do + { + :name => 'foo', + :description => 'foo', + :ensure => 'present', + :enabled => 'True' + } end - context 'when tenant does not exist' do + it 'adds default domain to commands' do + mock = { + 'identity' => {'default_domain_id' => 'foo_domain_id'} + } + 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') + provider.class.expects(:openstack) + .with('project', 'create', '--format', 'shell', ['foo', '--enable', '--description', 'foo', '--domain', 'foo_domain']) + .returns('description="foo" +enabled="True" +name="foo" +id="project-id" +domain_id="foo_domain_id" +') + provider.create + expect(provider.exists?).to be_truthy + expect(provider.id).to eq("project-id") + end - subject(:response) do - provider.class.stubs(:openstack) - .with('project', 'list', '--quiet', '--format', 'csv', [['--long', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - .returns('"ID","Name","Description","Enabled"') - response = provider.exists? - end + end - it { is_expected.to be_falsey } + describe 'v3 domains with domain in resource', :domainlist => false do + + let(:tenant_attrs) do + { + :name => 'foo', + :description => 'foo', + :ensure => 'present', + :enabled => 'True', + :domain => 'foo_domain' + } + end + + it 'uses given domain in commands' do + provider.class.expects(:openstack) + .with('project', 'create', '--format', 'shell', ['foo', '--enable', '--description', 'foo', '--domain', 'foo_domain']) + .returns('description="foo" +enabled="True" +name="foo" +id="project-id" +domain_id="foo_domain_id" +') + provider.create + expect(provider.exists?).to be_truthy + expect(provider.id).to eq("project-id") end end - describe '#instances' do - it 'finds every tenant' do - provider.class.stubs(:openstack) - .with('project', 'list', '--quiet', '--format', 'csv', [['--long', '--os-username', 'test', '--os-password', 'abc123', '--os-tenant-name', 'foo', '--os-auth-url', 'http://127.0.0.1:5000/v2.0']]) - .returns('"ID","Name","Description","Enabled" -"1cb05cfed7c24279be884ba4f6520262","foo","foo",True + describe 'v3 domains with domain in name/title', :domainlist => false do + + let(:tenant_attrs) do + { + :name => 'foo::foo_domain', + :description => 'foo', + :ensure => 'present', + :enabled => 'True' + } + end + + it 'uses given domain in commands' do + provider.class.expects(:openstack) + .with('project', 'create', '--format', 'shell', ['foo', '--enable', '--description', 'foo', '--domain', 'foo_domain']) + .returns('description="foo" +enabled="True" +name="foo" +id="project-id" +domain_id="foo_domain_id" ') - instances = provider.instances - expect(instances.count).to eq(1) + provider.create + expect(provider.exists?).to be_truthy + expect(provider.id).to eq("project-id") end end + describe 'v3 domains with domain in name/title and in resource', :domainlist => false do + + let(:tenant_attrs) do + { + :name => 'foo::bar_domain', + :description => 'foo', + :ensure => 'present', + :enabled => 'True', + :domain => 'foo_domain' + } + end + + it 'uses given domain in commands' do + provider.class.expects(:openstack) + .with('project', 'create', '--format', 'shell', ['foo', '--enable', '--description', 'foo', '--domain', 'foo_domain']) + .returns('description="foo" +enabled="True" +name="foo" +id="project-id" +domain_id="foo_domain_id" +') + provider.create + expect(provider.exists?).to be_truthy + expect(provider.id).to eq("project-id") + end + end end end