Fix leaking environment variables in tests

In rspec provider tests the environment variables are used to
authenticate the calls.  The environment was set in a shared example.
The problem is that rspec read all those environment variables when it
compile the tests.  Then the last shared environment red by rspec was
setting the environment for all the test.  This was leading to
unpredictable behavior.

This fix this problem by setting the environment variables before each
test at rspec run time.

Change-Id: I28c952273d6f981c953cb3e2c960a98609ece263
Closes-Bug: 1482243
This commit is contained in:
Sofer Athlan-Guyot 2015-09-21 18:01:45 +02:00 committed by Gilles Dubreuil
parent 40a1d04410
commit 42d918040d
8 changed files with 862 additions and 821 deletions
spec/unit/provider
keystone_domain
keystone_endpoint
keystone_role
keystone_service
keystone_spec.rb
keystone_tenant
keystone_user
keystone_user_role

@ -8,7 +8,7 @@ provider_class = Puppet::Type.type(:keystone_domain).provider(:openstack)
describe provider_class do describe provider_class do
shared_examples 'authenticated with environment variables' do let(:set_env) do
ENV['OS_USERNAME'] = 'test' ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123' ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test' ENV['OS_PROJECT_NAME'] = 'test'
@ -41,12 +41,15 @@ describe provider_class do
AnotherKlass AnotherKlass
end end
before :each do
set_env
end
after :each do after :each do
provider_class.reset provider_class.reset
another_class.reset another_class.reset
end end
it_behaves_like 'authenticated with environment variables' do
describe '#create' do describe '#create' do
it 'creates a domain' do it 'creates a domain' do
# keystone.conf # keystone.conf
@ -62,7 +65,8 @@ describe provider_class do
name="foo" name="foo"
description="foo" description="foo"
enabled=True enabled=True
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
end end
@ -95,7 +99,8 @@ enabled=True
.with('domain', 'list', '--quiet', '--format', 'csv', []) .with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Description","Enabled" .returns('"ID","Name","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo",True
') '
)
instances = provider_class.instances instances = provider_class.instances
expect(instances.count).to eq(1) expect(instances.count).to eq(1)
end end
@ -126,7 +131,8 @@ enabled=True
name="foo" name="foo"
description="foo" description="foo"
enabled=True enabled=True
') '
)
expect(provider.class.default_domain_id).to eq('default') expect(provider.class.default_domain_id).to eq('default')
expect(another_class.default_domain_id).to eq('default') expect(another_class.default_domain_id).to eq('default')
provider.create provider.create
@ -192,5 +198,4 @@ enabled=True
end end
end end
end end
end
end end

@ -6,7 +6,7 @@ provider_class = Puppet::Type.type(:keystone_endpoint).provider(:openstack)
describe provider_class do describe provider_class do
shared_examples 'authenticated with environment variables' do let(:set_env) do
ENV['OS_USERNAME'] = 'test' ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123' ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test' ENV['OS_PROJECT_NAME'] = 'test'
@ -33,14 +33,18 @@ describe provider_class do
provider_class.new(resource) provider_class.new(resource)
end end
it_behaves_like 'authenticated with environment variables' do before(:each) do
set_env
end
describe '#create' do describe '#create' do
it 'creates an endpoint' do it 'creates an endpoint' do
provider.class.stubs(:openstack) provider.class.stubs(:openstack)
.with('endpoint', 'list', '--quiet', '--format', 'csv', '--long') .with('endpoint', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Region","Service Name","Service Type","PublicURL","AdminURL","InternalURL" .returns('"ID","Region","Service Name","Service Type","PublicURL","AdminURL","InternalURL"
"1cb05cfed7c24279be884ba4f6520262","foo","bar","","http://127.0.0.1:5000/v2.0","http://127.0.0.1:5001/v2.0","http://127.0.0.1:5002/v2.0" "1cb05cfed7c24279be884ba4f6520262","foo","bar","","http://127.0.0.1:5000/v2.0","http://127.0.0.1:5001/v2.0","http://127.0.0.1:5002/v2.0"
') '
)
provider.class.stubs(:openstack) provider.class.stubs(:openstack)
.with('endpoint', 'create', '--format', 'shell', ['bar', '--region', 'foo', '--publicurl', 'http://127.0.0.1:5000', '--internalurl', 'http://127.0.0.1:5001', '--adminurl', 'http://127.0.0.1:5002']) .with('endpoint', 'create', '--format', 'shell', ['bar', '--region', 'foo', '--publicurl', 'http://127.0.0.1:5000', '--internalurl', 'http://127.0.0.1:5001', '--adminurl', 'http://127.0.0.1:5002'])
.returns('adminurl="http://127.0.0.1:5002" .returns('adminurl="http://127.0.0.1:5002"
@ -51,7 +55,8 @@ region="foo"
service_id="8137d72980fd462192f276585a002426" service_id="8137d72980fd462192f276585a002426"
service_name="bar" service_name="bar"
service_type="test" service_type="test"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
end end
@ -63,7 +68,8 @@ service_type="test"
.with('endpoint', 'list', '--quiet', '--format', 'csv', '--long') .with('endpoint', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Region","Service Name","Service Type","PublicURL","AdminURL","InternalURL" .returns('"ID","Region","Service Name","Service Type","PublicURL","AdminURL","InternalURL"
"1cb05cfed7c24279be884ba4f6520262","foo","bar","test","http://127.0.0.1:5000","http://127.0.0.1:5001","http://127.0.0.1:5002" "1cb05cfed7c24279be884ba4f6520262","foo","bar","test","http://127.0.0.1:5000","http://127.0.0.1:5001","http://127.0.0.1:5002"
') '
)
provider.class.stubs(:openstack) provider.class.stubs(:openstack)
.with('endpoint', 'delete', []) .with('endpoint', 'delete', [])
provider.destroy provider.destroy
@ -90,11 +96,11 @@ service_type="test"
.with('endpoint', 'list', '--quiet', '--format', 'csv', '--long') .with('endpoint', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Region","Service Name","Service Type","PublicURL","AdminURL","InternalURL" .returns('"ID","Region","Service Name","Service Type","PublicURL","AdminURL","InternalURL"
"3a5c4378981e4112a0d44902a43e16ef","foo","bar","test","http://127.0.0.1:5000","http://127.0.0.1:5001","http://127.0.0.1:5002" "3a5c4378981e4112a0d44902a43e16ef","foo","bar","test","http://127.0.0.1:5000","http://127.0.0.1:5001","http://127.0.0.1:5002"
') '
)
instances = Puppet::Type::Keystone_endpoint::ProviderOpenstack.instances instances = Puppet::Type::Keystone_endpoint::ProviderOpenstack.instances
expect(instances.count).to eq(1) expect(instances.count).to eq(1)
end end
end end
end end
end
end end

@ -6,15 +6,18 @@ provider_class = Puppet::Type.type(:keystone_role).provider(:openstack)
describe provider_class do describe provider_class do
shared_examples 'authenticated with environment variables' do let(:set_env) do
ENV['OS_USERNAME'] = 'test' ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123' ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test' ENV['OS_PROJECT_NAME'] = 'test'
ENV['OS_AUTH_URL'] = 'http://127.0.0.1:5000' ENV['OS_AUTH_URL'] = 'http://127.0.0.1:5000'
end end
before(:each) do
set_env
end
describe 'when creating a role' do describe 'when creating a role' do
it_behaves_like 'authenticated with environment variables' do
let(:role_attrs) do let(:role_attrs) do
{ {
:name => 'foo', :name => 'foo',
@ -65,11 +68,11 @@ describe provider_class do
.with('role', 'list', '--quiet', '--format', 'csv', []) .with('role', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name" .returns('"ID","Name"
"1cb05cfed7c24279be884ba4f6520262","foo" "1cb05cfed7c24279be884ba4f6520262","foo"
') '
)
instances = Puppet::Type::Keystone_role::ProviderOpenstack.instances instances = Puppet::Type::Keystone_role::ProviderOpenstack.instances
expect(instances.count).to eq(1) expect(instances.count).to eq(1)
end end
end end
end end
end
end end

@ -6,13 +6,17 @@ provider_class = Puppet::Type.type(:keystone_service).provider(:openstack)
describe provider_class do describe provider_class do
shared_examples 'authenticated with environment variables' do let(:set_env) do
ENV['OS_USERNAME'] = 'test' ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123' ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test' ENV['OS_PROJECT_NAME'] = 'test'
ENV['OS_AUTH_URL'] = 'http://127.0.0.1:5000/v3' ENV['OS_AUTH_URL'] = 'http://127.0.0.1:5000/v3'
end end
before(:each) do
set_env
end
describe 'when managing a service' do describe 'when managing a service' do
let(:service_attrs) do let(:service_attrs) do
@ -32,14 +36,14 @@ describe provider_class do
provider_class.new(resource) provider_class.new(resource)
end end
it_behaves_like 'authenticated with environment variables' do
describe '#create' do describe '#create' do
it 'creates a service' do it 'creates a service' do
provider.class.stubs(:openstack) provider.class.stubs(:openstack)
.with('service', 'list', '--quiet', '--format', 'csv', '--long') .with('service', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Name","Type","Description" .returns('"ID","Name","Type","Description"
"1cb05cfed7c24279be884ba4f6520262","foo","foo","foo" "1cb05cfed7c24279be884ba4f6520262","foo","foo","foo"
') '
)
provider.class.stubs(:openstack) provider.class.stubs(:openstack)
.with('service', 'create', '--format', 'shell', ['foo', '--name', 'foo', '--description', 'foo']) .with('service', 'create', '--format', 'shell', ['foo', '--name', 'foo', '--description', 'foo'])
.returns('description="foo" .returns('description="foo"
@ -47,11 +51,11 @@ enabled="True"
id="8f0dd4c0abc44240998fbb3f5089ecbf" id="8f0dd4c0abc44240998fbb3f5089ecbf"
name="foo" name="foo"
type="foo" type="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
end end
end
describe '#destroy' do describe '#destroy' do
it 'destroys a service' do it 'destroys a service' do
@ -59,7 +63,8 @@ type="foo"
.with('service', 'list', '--quiet', '--format', 'csv', '--long') .with('service', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Name","Type","Description" .returns('"ID","Name","Type","Description"
"1cb05cfed7c24279be884ba4f6520262","foo","foo","foo" "1cb05cfed7c24279be884ba4f6520262","foo","foo","foo"
') '
)
provider.class.stubs(:openstack) provider.class.stubs(:openstack)
.with('service', 'delete', []) .with('service', 'delete', [])
provider.destroy provider.destroy
@ -83,7 +88,8 @@ type="foo"
.with('service', 'list', '--quiet', '--format', 'csv', '--long') .with('service', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Name","Type","Description" .returns('"ID","Name","Type","Description"
"8f0dd4c0abc44240998fbb3f5089ecbf","foo","foo","foo" "8f0dd4c0abc44240998fbb3f5089ecbf","foo","foo","foo"
') '
)
instances = Puppet::Type::Keystone_service::ProviderOpenstack.instances instances = Puppet::Type::Keystone_service::ProviderOpenstack.instances
expect(instances.count).to eq(1) expect(instances.count).to eq(1)
end end

@ -200,6 +200,17 @@ describe Puppet::Provider::Keystone do
end end
describe 'when using domains' do describe 'when using domains' 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/v3'
end
before(:each) do
set_env
end
it 'name_and_domain should return the resource domain' 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']) expect(klass.name_and_domain('foo::in_name', 'from_resource', 'default')).to eq(['foo', 'from_resource'])
end end
@ -210,10 +221,6 @@ describe Puppet::Provider::Keystone do
expect(klass.name_and_domain('foo::in_name', nil, 'default')).to eq(['foo', 'in_name']) expect(klass.name_and_domain('foo::in_name', nil, 'default')).to eq(['foo', 'in_name'])
end end
it 'should return the default domain name using the default_domain_id from keystone.conf' do 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 = { mock = {
'DEFAULT' => { 'DEFAULT' => {
'admin_endpoint' => 'http://127.0.0.1:35357', 'admin_endpoint' => 'http://127.0.0.1:35357',
@ -232,10 +239,6 @@ describe Puppet::Provider::Keystone do
expect(klass.name_and_domain('foo')).to eq(['foo', 'SomeName']) expect(klass.name_and_domain('foo')).to eq(['foo', 'SomeName'])
end end
it 'should return the default_domain_id from one class set in another class' do it 'should return the default_domain_id from one class set in another class' 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'
klass.expects(:openstack) klass.expects(:openstack)
.with('domain', 'list', '--quiet', '--format', 'csv', []) .with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description" .returns('"ID","Name","Enabled","Description"
@ -255,10 +258,6 @@ describe Puppet::Provider::Keystone do
expect(another_class.default_domain).to eq('SomeName') expect(another_class.default_domain).to eq('SomeName')
end end
it 'should return Default if default_domain_id is not configured' do 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 = {} mock = {}
Puppet::Util::IniConfig::File.expects(:new).returns(mock) Puppet::Util::IniConfig::File.expects(:new).returns(mock)
File.expects(:exists?).with('/etc/keystone/keystone.conf').returns(true) File.expects(:exists?).with('/etc/keystone/keystone.conf').returns(true)
@ -271,10 +270,6 @@ describe Puppet::Provider::Keystone do
expect(klass.name_and_domain('foo')).to eq(['foo', 'Default']) expect(klass.name_and_domain('foo')).to eq(['foo', 'Default'])
end end
it 'should list all domains when requesting a domain name from an ID' do it 'should list all domains when requesting a domain name from an ID' 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'
klass.expects(:openstack) klass.expects(:openstack)
.with('domain', 'list', '--quiet', '--format', 'csv', []) .with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description" .returns('"ID","Name","Enabled","Description"
@ -283,10 +278,6 @@ describe Puppet::Provider::Keystone do
expect(klass.domain_name_from_id('somename')).to eq('SomeName') expect(klass.domain_name_from_id('somename')).to eq('SomeName')
end end
it 'should lookup a domain when not found in the hash' do it 'should lookup a domain when not found in the hash' 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'
klass.expects(:openstack) klass.expects(:openstack)
.with('domain', 'list', '--quiet', '--format', 'csv', []) .with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description" .returns('"ID","Name","Enabled","Description"
@ -302,10 +293,6 @@ id="another"
expect(klass.domain_name_from_id('another')).to eq('AnOther') expect(klass.domain_name_from_id('another')).to eq('AnOther')
end end
it 'should print an error when there is no such domain' do it 'should print an error when there is no such domain' 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'
klass.expects(:openstack) klass.expects(:openstack)
.with('domain', 'list', '--quiet', '--format', 'csv', []) .with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description" .returns('"ID","Name","Enabled","Description"

@ -39,7 +39,8 @@ describe provider_class do
"another_domain_id","another_domain",True,"another domain" "another_domain_id","another_domain",True,"another domain"
"disabled_domain_id","disabled_domain",False,"disabled domain" "disabled_domain_id","disabled_domain",False,"disabled domain"
"default","Default",True,"the default domain" "default","Default",True,"the default domain"
') '
)
end end
end end
@ -51,16 +52,19 @@ describe provider_class do
before_hook(false) before_hook(false)
end end
shared_examples 'authenticated with environment variables' do let(:set_env) do
ENV['OS_USERNAME'] = 'test' ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123' ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test' ENV['OS_PROJECT_NAME'] = 'test'
ENV['OS_AUTH_URL'] = 'http://127.0.0.1:35357/v3' ENV['OS_AUTH_URL'] = 'http://127.0.0.1:35357/v3'
end end
before(:each) do
set_env
end
describe 'when managing a tenant' do describe 'when managing a tenant' do
it_behaves_like 'authenticated with environment variables' do
describe '#create', :domainlist => true do describe '#create', :domainlist => true do
it 'creates a tenant' do it 'creates a tenant' do
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -70,7 +74,8 @@ enabled="True"
name="foo" name="foo"
id="foo" id="foo"
domain_id="foo_domain_id" domain_id="foo_domain_id"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
end end
@ -101,7 +106,8 @@ domain_id="foo_domain_id"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True "2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True
') '
)
instances = provider.class.instances instances = provider.class.instances
expect(instances[0].name).to eq('foo') expect(instances[0].name).to eq('foo')
expect(instances[0].domain).to eq('bar_domain') expect(instances[0].domain).to eq('bar_domain')
@ -135,7 +141,8 @@ enabled="True"
name="foo" name="foo"
id="project-id" id="project-id"
domain_id="foo_domain_id" domain_id="foo_domain_id"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("project-id") expect(provider.id).to eq("project-id")
@ -163,7 +170,8 @@ enabled="True"
name="foo" name="foo"
id="project-id" id="project-id"
domain_id="foo_domain_id" domain_id="foo_domain_id"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("project-id") expect(provider.id).to eq("project-id")
@ -189,7 +197,8 @@ enabled="True"
name="foo" name="foo"
id="project-id" id="project-id"
domain_id="foo_domain_id" domain_id="foo_domain_id"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("project-id") expect(provider.id).to eq("project-id")
@ -217,12 +226,12 @@ enabled="True"
name="foo" name="foo"
id="project-id" id="project-id"
domain_id="foo_domain_id" domain_id="foo_domain_id"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("project-id") expect(provider.id).to eq("project-id")
expect(provider.name).to eq('foo::bar_domain') expect(provider.name).to eq('foo::bar_domain')
end end
end end
end
end end

@ -13,7 +13,7 @@ end
describe provider_class do describe provider_class do
shared_examples 'authenticated with environment variables' do let(:set_env) do
ENV['OS_USERNAME'] = 'test' ENV['OS_USERNAME'] = 'test'
ENV['OS_PASSWORD'] = 'abc123' ENV['OS_PASSWORD'] = 'abc123'
ENV['OS_PROJECT_NAME'] = 'test' ENV['OS_PROJECT_NAME'] = 'test'
@ -46,6 +46,7 @@ describe provider_class do
end end
def before_hook(delete, missing, noproject, user_cached, project_only) def before_hook(delete, missing, noproject, user_cached, project_only)
set_env
unless noproject unless noproject
project_class.expects(:openstack).once project_class.expects(:openstack).once
.with('domain', 'list', '--quiet', '--format', 'csv', []) .with('domain', 'list', '--quiet', '--format', 'csv', [])
@ -55,7 +56,8 @@ describe provider_class do
"bar_domain_id","bar_domain",True,"bar domain" "bar_domain_id","bar_domain",True,"bar domain"
"another_domain_id","another_domain",True,"another domain" "another_domain_id","another_domain",True,"another domain"
"disabled_domain_id","disabled_domain",False,"disabled domain" "disabled_domain_id","disabled_domain",False,"disabled domain"
') '
)
end end
if project_only if project_only
@ -70,7 +72,8 @@ describe provider_class do
"bar_domain_id","bar_domain",True,"bar domain" "bar_domain_id","bar_domain",True,"bar domain"
"another_domain_id","another_domain",True,"another domain" "another_domain_id","another_domain",True,"another domain"
"disabled_domain_id","disabled_domain",False,"disabled domain" "disabled_domain_id","disabled_domain",False,"disabled domain"
') '
)
if user_cached if user_cached
return # using cached user, so no user list return # using cached user, so no user list
end end
@ -84,7 +87,8 @@ describe provider_class do
"1cb05cfed7c24279be884ba4f6520262","foo",' + project + ',"foo_domain_id","foo description","foo@example.com",True "1cb05cfed7c24279be884ba4f6520262","foo",' + project + ',"foo_domain_id","foo description","foo@example.com",True
"2cb05cfed7c24279be884ba4f6520262","foo",' + project + ',"bar_domain_id","foo description","foo@example.com",True "2cb05cfed7c24279be884ba4f6520262","foo",' + project + ',"bar_domain_id","foo description","foo@example.com",True
"3cb05cfed7c24279be884ba4f6520262","foo",' + project + ',"another_domain_id","foo description","foo@example.com",True "3cb05cfed7c24279be884ba4f6520262","foo",' + project + ',"another_domain_id","foo description","foo@example.com",True
'] '
]
nn = 1 nn = 1
if delete if delete
nn = 2 nn = 2
@ -117,7 +121,7 @@ describe provider_class do
before_hook(false, false, false, true, false) before_hook(false, false, false, true, false)
end end
before :each, :nohooks => true do before :each, :nohooks => true do
# do nothing set_env
end end
before :each, :project_only => true do before :each, :project_only => true do
before_hook(false, false, false, false, true) before_hook(false, false, false, false, true)
@ -127,7 +131,6 @@ describe provider_class do
end end
describe 'when managing a user' do describe 'when managing a user' do
it_behaves_like 'authenticated with environment variables' do
describe '#create', :project_only => true do describe '#create', :project_only => true do
it 'creates a user' do it 'creates a user' do
project_class.expects(:openstack) project_class.expects(:openstack)
@ -135,12 +138,14 @@ describe provider_class do
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True "2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns(' .returns('
name="_member_" name="_member_"
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'add', ['_member_', '--project', '2cb05cfed7c24279be884ba4f6520262', '--user', '12b23f07d4a3448d8189521ab09610b0']) .with('role', 'add', ['_member_', '--project', '2cb05cfed7c24279be884ba4f6520262', '--user', '12b23f07d4a3448d8189521ab09610b0'])
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -150,7 +155,8 @@ enabled="True"
id="12b23f07d4a3448d8189521ab09610b0" id="12b23f07d4a3448d8189521ab09610b0"
name="foo" name="foo"
username="foo" username="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
end end
@ -195,12 +201,14 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long']) .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"foo_project_id1","foo","foo_domain_id","",True "foo_project_id1","foo","foo_domain_id","",True
') '
)
provider.instance_variable_get('@property_hash')[:id] = '1cb05cfed7c24279be884ba4f6520262' provider.instance_variable_get('@property_hash')[:id] = '1cb05cfed7c24279be884ba4f6520262'
tenant = provider.tenant tenant = provider.tenant
expect(tenant).to eq('foo') expect(tenant).to eq('foo')
@ -213,14 +221,16 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long']) .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"foo_project_id1","foo","foo_domain_id","",True "foo_project_id1","foo","foo_domain_id","",True
"bar_project_id2","bar","bar_domain_id","",True "bar_project_id2","bar","bar_domain_id","",True
"foo_project_id2","foo","another_domain_id","",True "foo_project_id2","foo","another_domain_id","",True
') '
)
tenant = provider.tenant tenant = provider.tenant
expect(tenant).to eq('foo') expect(tenant).to eq('foo')
end end
@ -235,7 +245,8 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns('name="_member_"') .returns('name="_member_"')
@ -253,7 +264,8 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns('name="_member_"') .returns('name="_member_"')
@ -269,7 +281,8 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.raises(Puppet::ExecutionFailure, 'no such role _member_') .raises(Puppet::ExecutionFailure, 'no such role _member_')
@ -290,7 +303,8 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns('name="_member_"') .returns('name="_member_"')
@ -301,7 +315,6 @@ username="foo"
end end
end end
end end
end
describe "#password" do describe "#password" do
let(:user_attrs) do let(:user_attrs) do
@ -324,11 +337,6 @@ username="foo"
provider_class.new(resource) provider_class.new(resource)
end end
shared_examples 'with auth-url environment variable' do
ENV['OS_AUTH_URL'] = 'http://127.0.0.1:5000'
end
it_behaves_like 'with auth-url environment variable' do
it 'checks the password', :noproject_user_cached => true do it 'checks the password', :noproject_user_cached => true do
provider.instance_variable_get('@property_hash')[:id] = '1cb05cfed7c24279be884ba4f6520262' provider.instance_variable_get('@property_hash')[:id] = '1cb05cfed7c24279be884ba4f6520262'
mock_creds = Puppet::Provider::Openstack::CredentialsV3.new mock_creds = Puppet::Provider::Openstack::CredentialsV3.new
@ -342,14 +350,16 @@ username="foo"
.with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long']) .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"project-id-1","foo","foo_domain_id","foo",True "project-id-1","foo","foo_domain_id","foo",True
') '
)
Puppet::Provider::Openstack.expects(:openstack) Puppet::Provider::Openstack.expects(:openstack)
.with('token', 'issue', ['--format', 'value']) .with('token', 'issue', ['--format', 'value'])
.returns('2015-05-14T04:06:05Z .returns('2015-05-14T04:06:05Z
e664a386befa4a30878dcef20e79f167 e664a386befa4a30878dcef20e79f167
8dce2ae9ecd34c199d2877bf319a3d06 8dce2ae9ecd34c199d2877bf319a3d06
ac43ec53d5a74a0b9f51523ae41a29f0 ac43ec53d5a74a0b9f51523ae41a29f0
') '
)
password = provider.password password = provider.password
expect(password).to eq('foo') expect(password).to eq('foo')
end end
@ -360,7 +370,8 @@ ac43ec53d5a74a0b9f51523ae41a29f0
.with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long']) .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"project-id-1","foo","foo_domain_id","foo",True "project-id-1","foo","foo_domain_id","foo",True
') '
)
Puppet::Provider::Openstack.expects(:openstack) Puppet::Provider::Openstack.expects(:openstack)
.with('token', 'issue', ['--format', 'value']) .with('token', 'issue', ['--format', 'value'])
.raises(Puppet::ExecutionFailure, 'HTTP 401 invalid authentication') .raises(Puppet::ExecutionFailure, 'HTTP 401 invalid authentication')
@ -381,19 +392,20 @@ ac43ec53d5a74a0b9f51523ae41a29f0
Puppet::Provider::Openstack.expects(:openstack) Puppet::Provider::Openstack.expects(:openstack)
.with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long']) .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
') '
)
Puppet::Provider::Openstack.expects(:openstack) Puppet::Provider::Openstack.expects(:openstack)
.with('token', 'issue', ['--format', 'value']) .with('token', 'issue', ['--format', 'value'])
.returns('2015-05-14T04:06:05Z .returns('2015-05-14T04:06:05Z
e664a386befa4a30878dcef20e79f167 e664a386befa4a30878dcef20e79f167
8dce2ae9ecd34c199d2877bf319a3d06 8dce2ae9ecd34c199d2877bf319a3d06
ac43ec53d5a74a0b9f51523ae41a29f0 ac43ec53d5a74a0b9f51523ae41a29f0
') '
)
password = provider.password password = provider.password
expect(password).to eq('foo') expect(password).to eq('foo')
end end
end end
end
describe 'when updating a user with unmanaged password', :nohooks => true do describe 'when updating a user with unmanaged password', :nohooks => true do
@ -426,7 +438,6 @@ ac43ec53d5a74a0b9f51523ae41a29f0
end end
end end
it_behaves_like 'authenticated with environment variables' do
describe 'v3 domains with no domain in resource', :user_cached => true do describe 'v3 domains with no domain in resource', :user_cached => true do
let(:user_attrs) do let(:user_attrs) do
{ {
@ -449,18 +460,21 @@ ac43ec53d5a74a0b9f51523ae41a29f0
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long']) .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
.returns('"ID","Name" .returns('"ID","Name"
') '
)
project_class.expects(:openstack) project_class.expects(:openstack)
.with('project', 'list', '--quiet', '--format', 'csv', '--long') .with('project', 'list', '--quiet', '--format', 'csv', '--long')
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns(' .returns('
name="_member_" name="_member_"
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '1cb05cfed7c24279be884ba4f6520262']) .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '1cb05cfed7c24279be884ba4f6520262'])
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -470,7 +484,8 @@ enabled="True"
id="1cb05cfed7c24279be884ba4f6520262" id="1cb05cfed7c24279be884ba4f6520262"
name="foo" name="foo"
username="foo" username="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("1cb05cfed7c24279be884ba4f6520262") expect(provider.id).to eq("1cb05cfed7c24279be884ba4f6520262")
@ -496,12 +511,14 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns(' .returns('
name="_member_" name="_member_"
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262']) .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -511,7 +528,8 @@ enabled="True"
id="2cb05cfed7c24279be884ba4f6520262" id="2cb05cfed7c24279be884ba4f6520262"
name="foo" name="foo"
username="foo" username="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262") expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
@ -536,12 +554,14 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns(' .returns('
name="_member_" name="_member_"
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262']) .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -551,7 +571,8 @@ enabled="True"
id="2cb05cfed7c24279be884ba4f6520262" id="2cb05cfed7c24279be884ba4f6520262"
name="foo" name="foo"
username="foo" username="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262") expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
@ -578,12 +599,14 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True "2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns(' .returns('
name="_member_" name="_member_"
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262']) .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -593,7 +616,8 @@ enabled="True"
id="2cb05cfed7c24279be884ba4f6520262" id="2cb05cfed7c24279be884ba4f6520262"
name="foo" name="foo"
username="foo" username="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262") expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
@ -620,12 +644,14 @@ username="foo"
.returns('"ID","Name","Domain ID","Description","Enabled" .returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True "1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True "2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'show', '--format', 'shell', '_member_') .with('role', 'show', '--format', 'shell', '_member_')
.returns(' .returns('
name="_member_" name="_member_"
') '
)
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262']) .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
provider.class.expects(:openstack) provider.class.expects(:openstack)
@ -635,12 +661,12 @@ enabled="True"
id="2cb05cfed7c24279be884ba4f6520262" id="2cb05cfed7c24279be884ba4f6520262"
name="foo" name="foo"
username="foo" username="foo"
') '
)
provider.create provider.create
expect(provider.exists?).to be_truthy expect(provider.exists?).to be_truthy
expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262") expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
expect(provider.name).to eq('foo::bar_domain') expect(provider.name).to eq('foo::bar_domain')
end end
end end
end
end end

@ -137,7 +137,15 @@ describe provider_class do
end end
end end
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:5000'
end
def before_common(destroy, nolist=false, instances=false) def before_common(destroy, nolist=false, instances=false)
set_env
rolelistprojectuser = [['role-id-1','foo','foo','foo'], rolelistprojectuser = [['role-id-1','foo','foo','foo'],
['role-id-2','bar','foo','foo']] ['role-id-2','bar','foo','foo']]
csvlist = list_to_csv(rolelistprojectuser) csvlist = list_to_csv(rolelistprojectuser)
@ -186,15 +194,7 @@ describe provider_class do
before_common(true, true, true) before_common(true, true, true)
end 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:5000'
end
describe 'when updating a user\'s role' do describe 'when updating a user\'s role' do
it_behaves_like 'authenticated with environment variables' do
let(:user_role_attrs) do let(:user_role_attrs) do
{ {
:name => 'foo@foo', :name => 'foo@foo',
@ -251,14 +251,14 @@ describe provider_class do
.returns('"ID","Name" .returns('"ID","Name"
"foo-role-id","foo" "foo-role-id","foo"
"bar-role-id","bar" "bar-role-id","bar"
') ')
provider.class.expects(:openstack) provider.class.expects(:openstack)
.with('role assignment', 'list', '--quiet', '--format', 'csv', []) .with('role assignment', 'list', '--quiet', '--format', 'csv', [])
.returns(' .returns('
"Role","User","Group","Project","Domain" "Role","User","Group","Project","Domain"
"foo-role-id","user-id-1","","project-id-1","" "foo-role-id","user-id-1","","project-id-1",""
"bar-role-id","user-id-1","","project-id-1","" "bar-role-id","user-id-1","","project-id-1",""
') ')
instances = provider.class.instances instances = provider.class.instances
expect(instances.count).to eq(1) expect(instances.count).to eq(1)
expect(instances[0].name).to eq('foo@example.com@foo') expect(instances[0].name).to eq('foo@example.com@foo')
@ -289,5 +289,4 @@ describe provider_class do
end end
end end
end end
end
end end