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

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

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

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

@ -200,6 +200,17 @@ describe Puppet::Provider::Keystone do
end
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
expect(klass.name_and_domain('foo::in_name', 'from_resource', 'default')).to eq(['foo', 'from_resource'])
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'])
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',
@ -232,10 +239,6 @@ describe Puppet::Provider::Keystone do
expect(klass.name_and_domain('foo')).to eq(['foo', 'SomeName'])
end
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)
.with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description"
@ -255,10 +258,6 @@ describe Puppet::Provider::Keystone do
expect(another_class.default_domain).to eq('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)
@ -271,10 +270,6 @@ describe Puppet::Provider::Keystone do
expect(klass.name_and_domain('foo')).to eq(['foo', 'Default'])
end
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)
.with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description"
@ -283,10 +278,6 @@ describe Puppet::Provider::Keystone do
expect(klass.domain_name_from_id('somename')).to eq('SomeName')
end
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)
.with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description"
@ -302,10 +293,6 @@ id="another"
expect(klass.domain_name_from_id('another')).to eq('AnOther')
end
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)
.with('domain', 'list', '--quiet', '--format', 'csv', [])
.returns('"ID","Name","Enabled","Description"

@ -39,7 +39,8 @@ describe provider_class do
"another_domain_id","another_domain",True,"another domain"
"disabled_domain_id","disabled_domain",False,"disabled domain"
"default","Default",True,"the default domain"
')
'
)
end
end
@ -51,16 +52,19 @@ describe provider_class do
before_hook(false)
end
shared_examples 'authenticated with environment variables' 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
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)
@ -70,7 +74,8 @@ enabled="True"
name="foo"
id="foo"
domain_id="foo_domain_id"
')
'
)
provider.create
expect(provider.exists?).to be_truthy
end
@ -101,7 +106,8 @@ domain_id="foo_domain_id"
.returns('"ID","Name","Domain ID","Description","Enabled"
"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
"2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True
')
'
)
instances = provider.class.instances
expect(instances[0].name).to eq('foo')
expect(instances[0].domain).to eq('bar_domain')
@ -135,7 +141,8 @@ 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")
@ -163,7 +170,8 @@ 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")
@ -189,7 +197,8 @@ 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")
@ -217,7 +226,8 @@ 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")
@ -225,4 +235,3 @@ domain_id="foo_domain_id"
end
end
end
end

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

@ -137,7 +137,15 @@ describe provider_class do
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)
set_env
rolelistprojectuser = [['role-id-1','foo','foo','foo'],
['role-id-2','bar','foo','foo']]
csvlist = list_to_csv(rolelistprojectuser)
@ -186,15 +194,7 @@ describe provider_class do
before_common(true, true, true)
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
it_behaves_like 'authenticated with environment variables' do
let(:user_role_attrs) do
{
:name => 'foo@foo',
@ -290,4 +290,3 @@ describe provider_class do
end
end
end
end