--- /dev/null
+require 'puppet'
+require 'spec_helper'
+require 'puppet/provider/openstack'
+require 'puppet/provider/openstack/credentials'
+
+
+describe Puppet::Provider::Openstack::Credentials do
+
+ let(:creds) do
+ creds = Puppet::Provider::Openstack::CredentialsV2_0.new
+ end
+
+ describe "#set with valid value" do
+ it 'works with valid value' do
+ expect(creds.class.defined?('auth_url')).to be_truthy
+ creds.set('auth_url', 'http://localhost:5000/v2.0')
+ expect(creds.auth_url).to eq('http://localhost:5000/v2.0')
+ end
+ end
+
+ describe "#set with invalid value" do
+ it 'works with invalid value' do
+ expect(creds.class.defined?('foo')).to be_falsey
+ creds.set('foo', 'junk')
+ expect(creds.respond_to?(:foo)).to be_falsey
+ expect(creds.instance_variable_defined?(:@foo)).to be_falsey
+ expect { creds.foo }.to raise_error(NoMethodError, /undefined method/)
+ end
+ end
+
+ describe '#service_token_set?' do
+ context "with service credentials" do
+ it 'is successful' do
+ creds.token = 'token'
+ creds.url = 'url'
+ expect(creds.service_token_set?).to be_truthy
+ expect(creds.user_password_set?).to be_falsey
+ end
+
+ it 'fails' do
+ creds.token = 'token'
+ expect(creds.service_token_set?).to be_falsey
+ expect(creds.user_password_set?).to be_falsey
+ end
+ end
+ end
+
+ describe '#password_set?' do
+ context "with user credentials" do
+ it 'is successful' do
+ creds.auth_url = 'auth_url'
+ creds.password = 'password'
+ creds.project_name = 'project_name'
+ creds.username = 'username'
+ expect(creds.user_password_set?).to be_truthy
+ expect(creds.service_token_set?).to be_falsey
+ end
+
+ it 'fails' do
+ creds.auth_url = 'auth_url'
+ creds.password = 'password'
+ creds.project_name = 'project_name'
+ expect(creds.user_password_set?).to be_falsey
+ expect(creds.service_token_set?).to be_falsey
+ end
+ end
+ end
+
+ describe '#set?' do
+ context "without any credential" do
+ it 'fails' do
+ expect(creds.set?).to be_falsey
+ end
+ end
+ end
+
+ describe '#version' do
+ it 'is version 2' do
+ expect(creds.version).to eq('2.0')
+ end
+ end
+
+ describe '#unset' do
+ context "with all instance variables set" do
+ it 'resets all but the identity_api_version' do
+ creds.auth_url = 'auth_url'
+ creds.password = 'password'
+ creds.project_name = 'project_name'
+ creds.username = 'username'
+ creds.token = 'token'
+ creds.url = 'url'
+ creds.identity_api_version = 'identity_api_version'
+ creds.unset
+ expect(creds.auth_url).to eq('')
+ expect(creds.password).to eq('')
+ expect(creds.project_name).to eq('')
+ expect(creds.username).to eq('')
+ expect(creds.token).to eq('')
+ expect(creds.url).to eq('')
+ expect(creds.identity_api_version).to eq('identity_api_version')
+ newcreds = Puppet::Provider::Openstack::CredentialsV3.new
+ expect(newcreds.identity_api_version).to eq('3')
+ end
+ end
+ end
+
+ describe '#to_env' do
+ context "with an exhaustive data set" do
+ it 'successfully returns content' do
+ creds.auth_url = 'auth_url'
+ creds.password = 'password'
+ creds.project_name = 'project_name'
+ creds.username = 'username'
+ creds.token = 'token'
+ creds.url = 'url'
+ creds.identity_api_version = 'identity_api_version'
+ expect(creds.to_env).to eq({
+ 'OS_USERNAME' => 'username',
+ 'OS_PASSWORD' => 'password',
+ 'OS_PROJECT_NAME' => 'project_name',
+ 'OS_AUTH_URL' => 'auth_url',
+ 'OS_TOKEN' => 'token',
+ 'OS_URL' => 'url',
+ 'OS_IDENTITY_API_VERSION' => 'identity_api_version'
+ })
+ end
+ end
+ end
+
+ describe 'using v3' do
+ let(:creds) do
+ creds = Puppet::Provider::Openstack::CredentialsV3.new
+ end
+ describe 'with v3' do
+ it 'uses v3 identity api' do
+ creds.identity_api_version == '3'
+ end
+ end
+ describe '#password_set? with username and project_name' do
+ it 'is successful' do
+ creds.auth_url = 'auth_url'
+ creds.password = 'password'
+ creds.project_name = 'project_name'
+ creds.username = 'username'
+ expect(creds.user_password_set?).to be_truthy
+ end
+ end
+ describe '#password_set? with user_id and project_id' do
+ it 'is successful' do
+ creds.auth_url = 'auth_url'
+ creds.password = 'password'
+ creds.project_id = 'projid'
+ creds.user_id = 'userid'
+ expect(creds.user_password_set?).to be_truthy
+ end
+ end
+ end
+end