From: Jozef Zigmund jzigmund@redhat.com
Writing specs --- .../admin/provider_accounts_controller.rb | 8 +-- src/app/models/provider_account.rb | 76 ++++++++++++------- src/app/models/provider_account_observer.rb | 2 +- src/app/models/provider_type.rb | 1 + src/app/services/data_service_active_record.rb | 8 +- src/app/views/admin/provider_accounts/_list.haml | 2 +- src/features/provider_account.feature | 4 +- .../provider_accounts_controller_spec.rb | 11 ++-- src/spec/factories/credential.rb | 41 +++++++++++ src/spec/factories/credential_definition.rb | 57 +++++++++++++++ src/spec/factories/provider.rb | 2 +- src/spec/factories/provider_account.rb | 29 +++++--- src/spec/factories/provider_type.rb | 4 + src/spec/models/credential_definition_spec.rb | 23 ++++++ src/spec/models/credential_spec.rb | 29 ++++++++ src/spec/models/instance_spec.rb | 4 +- src/spec/models/pool_family_spec.rb | 2 +- src/spec/models/provider_account_observer_spec.rb | 2 +- src/spec/models/provider_account_spec.rb | 24 ++++--- src/spec/models/quota_spec.rb | 1 + .../services/data_service_active_record_spec.rb | 7 ++- 21 files changed, 257 insertions(+), 80 deletions(-) create mode 100644 src/spec/factories/credential.rb create mode 100644 src/spec/factories/credential_definition.rb create mode 100644 src/spec/models/credential_definition_spec.rb create mode 100644 src/spec/models/credential_spec.rb
diff --git a/src/app/controllers/admin/provider_accounts_controller.rb b/src/app/controllers/admin/provider_accounts_controller.rb index 6affc73..a2d24ee 100644 --- a/src/app/controllers/admin/provider_accounts_controller.rb +++ b/src/app/controllers/admin/provider_accounts_controller.rb @@ -66,13 +66,7 @@ class Admin::ProviderAccountsController < ApplicationController @provider_account.quota.set_maximum_running_instances(limit)
if @provider_account.invalid? - if not @provider_account.valid_credentials? - flash.now[:error] = "The entered credential information is incorrect" - elsif @provider_account.errors.on(:username) - flash.now[:error] = "The access key '#{params[:provider_account][:username]}' has already been taken." - else - flash.now[:error] = "You must fill in all the required fields" - end + flash[:error] = "Credentials are invalid!" render :action => 'new' and return end
diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb index f24a0bf..11f123f 100644 --- a/src/app/models/provider_account.rb +++ b/src/app/models/provider_account.rb @@ -1,20 +1,15 @@ # == Schema Information -# Schema version: 20110207110131 +# Schema version: 20110309105149 # # Table name: provider_accounts # -# id :integer not null, primary key -# label :string(255) not null -# username :string(255) not null -# password :string(255) not null -# provider_id :integer not null -# quota_id :integer -# lock_version :integer default(0) -# account_number :string(255) -# x509_cert_priv :text -# x509_cert_pub :text -# created_at :datetime -# updated_at :datetime +# id :integer not null, primary key +# label :string(255) not null +# provider_id :integer not null +# quota_id :integer +# lock_version :integer default(0) +# created_at :datetime +# updated_at :datetime #
# @@ -46,7 +41,7 @@ class ProviderAccount < ActiveRecord::Base
searchable do text :name, :as => :code_substring - text :username, :as => :code_substring + text(:username, :as => :code_substring) { credentials_hash['username'] } end
# Relations @@ -59,7 +54,8 @@ class ProviderAccount < ActiveRecord::Base :order => "permissions.id ASC"
has_one :instance_key, :as => :instance_key_owner, :dependent => :destroy - has_many :credentials + has_many :credentials, :dependent => :destroy + accepts_nested_attributes_for :credentials
# Helpers attr_accessor :x509_cert_priv_file, :x509_cert_pub_file @@ -67,11 +63,6 @@ class ProviderAccount < ActiveRecord::Base # Validations validates_presence_of :provider validates_presence_of :label - validates_presence_of :username - validates_uniqueness_of :username, :scope => :provider_id - validates_presence_of :password - validates_presence_of :account_number,:if => Proc.new{ |account| account.provider.provider_type_id == ProviderType.find_by_codename("ec2").id} - validate :validate_presence_of_x509_certs validate :validate_credentials
# We're using this instead of <tt>validates_presence_of</tt> helper because @@ -131,7 +122,7 @@ class ProviderAccount < ActiveRecord::Base
def connect begin - return DeltaCloud.new(username, password, provider.url) + return DeltaCloud.new(credentials_hash['username'], credentials_hash['password'], provider.url) rescue Exception => e logger.error("Error connecting to framework: #{e.message}") logger.error("Backtrace: #{e.backtrace.join("\n")}") @@ -139,10 +130,11 @@ class ProviderAccount < ActiveRecord::Base end end
- def self.find_or_create(account) - a = ProviderAccount.find_by_username_and_provider_id(account["username"], account["provider_id"]) - return a.nil? ? ProviderAccount.new(account) : a - end + # def self.find_or_create(account) + # a = ProviderAccount.find_by_username_and_provider_id(account["username"], account["provider_id"]) + # a = + # return a.nil? ? ProviderAccount.new(account) : a + # end
def pools pools = [] @@ -152,7 +144,7 @@ class ProviderAccount < ActiveRecord::Base end
def name - label.blank? ? username : label + label.blank? ? credentials_hash['username'] : label end
# FIXME: for already-mapped accounts, update rather than add new @@ -177,7 +169,7 @@ class ProviderAccount < ActiveRecord::Base end
def valid_credentials? - DeltaCloud::valid_credentials?(username, password, provider.url) + DeltaCloud::valid_credentials?(credentials_hash['username'], credentials_hash['password'], provider.url) end
def build_credentials @@ -195,7 +187,7 @@ class ProviderAccount < ActiveRecord::Base EOT node = xml.at_xpath('/provider_credentials/ec2_credentials') node.at_xpath('./account_number').content = account_number - node.at_xpath('./access_key').content = username + node.at_xpath('./access_key').content = credentials_hash['username'] node.at_xpath('./secret_access_key').content = password node.at_xpath('./certificate').content = x509_cert_pub node.at_xpath('./key').content = x509_cert_priv @@ -207,4 +199,32 @@ EOT return nil unless client && client.feature?(:instances, :authentication_key) client.create_key(:name => "#{self.name}_#{Time.now.to_i}_key_#{self.object_id}") end + + def credentials_hash + @credentials_hash = {} + # Credential.all(:conditions => {:provider_account_id => id}, :include => :credential_definition).each do |cred| + credentials.each do |cred| + @credentials_hash[cred.credential_definition.name] = cred.value + end + @credentials_hash + end + + def credentials_hash=(hash={}) + cred_defs = provider.provider_type.credential_definitions + hash.each do |k,v| + cred_def = cred_defs.detect {|d| d.name == k.to_s} + raise "Key #{k} not found" unless cred_def + unless cred = credentials.detect {|c| c.credential_definition_id == cred_def.id} + cred = Credential.new(:value => v, :provider_account_id => id, :credential_definition_id => cred_def.id) + credentials << cred + end + cred.value = v + end + end + + def all_credentials(prov) + prov.provider_type.credential_definitions.map do |cd| + credentials.detect {|c| c.credential_definition_id == cd.id} || Credential.new(:credential_definition => cd, :value => nil) + end + end end diff --git a/src/app/models/provider_account_observer.rb b/src/app/models/provider_account_observer.rb index 6cd50e2..0f76ee4 100644 --- a/src/app/models/provider_account_observer.rb +++ b/src/app/models/provider_account_observer.rb @@ -15,7 +15,7 @@ class ProviderAccountObserver < ActiveRecord::Observer
def create_bucket(account) client = account.connect - bucket_name = "#{account.account_number}-imagefactory-amis" + bucket_name = "#{account.credentials_hash['account_id']}-imagefactory-amis" # TODO (jprovazn): getting particular bucket takes long time (core fetches all # buckets from provider), so we call directly create_bucket, if bucket exists, # exception should be thrown (actually existing bucket is returned - this diff --git a/src/app/models/provider_type.rb b/src/app/models/provider_type.rb index 1f1f58f..2346b7f 100644 --- a/src/app/models/provider_type.rb +++ b/src/app/models/provider_type.rb @@ -16,6 +16,7 @@ class ProviderType < ActiveRecord::Base
has_many :providers has_many :images + has_many :credential_definitions, :dependent => :destroy
validates_presence_of :name validates_uniqueness_of :name diff --git a/src/app/services/data_service_active_record.rb b/src/app/services/data_service_active_record.rb index 5833baa..0eb6ddd 100644 --- a/src/app/services/data_service_active_record.rb +++ b/src/app/services/data_service_active_record.rb @@ -65,11 +65,11 @@ class DataServiceActiveRecord data_points = [] free_instances = 0
- cloud_accounts = ProviderAccount.find(:all, :conditions => {:provider_id => provider.id}) - cloud_accounts.each do |cloud_account| - quota = cloud_account.quota + provider_accounts = ProviderAccount.find(:all, :conditions => {:provider_id => provider.id}) + provider_accounts.each do |provider_account| + quota = provider_account.quota if quota - data_points << TotalQuotaUsagePoint.new(cloud_account.username, quota.total_instances) + data_points << TotalQuotaUsagePoint.new(provider_account.credentials_hash['username'], quota.total_instances) free_instances += (quota.maximum_total_instances - quota.total_instances) end end diff --git a/src/app/views/admin/provider_accounts/_list.haml b/src/app/views/admin/provider_accounts/_list.haml index 687c32e..b431f9b 100644 --- a/src/app/views/admin/provider_accounts/_list.haml +++ b/src/app/views/admin/provider_accounts/_list.haml @@ -15,6 +15,6 @@ %input{:name => 'accounts_selected[]', :type => 'checkbox', :value => account.id, :id => "account_checkbox_#{account.id}", :checked => selected } = link_to account.name, admin_provider_account_path(account) %td - =account.username + =account.credentials_hash['username'] %td =account.provider.provider_type.name diff --git a/src/features/provider_account.feature b/src/features/provider_account.feature index af866e7..735d922 100644 --- a/src/features/provider_account.feature +++ b/src/features/provider_account.feature @@ -63,7 +63,7 @@ Feature: Manage Provider Accounts And I press "Delete" Then I should be on the admin provider accounts page And there should be no provider accounts - + @this Scenario: Search for Provider Accounts Given there is a provider named "testprovider" And there is a provider account named "testaccount" @@ -77,5 +77,5 @@ Feature: Manage Provider Accounts When I fill in "q" with "mock" And I press "Search" Then I should see the following: - | testaccount | mockuser | + | testaccount | mockuser | | otheraccount | mockuser | diff --git a/src/spec/controllers/provider_accounts_controller_spec.rb b/src/spec/controllers/provider_accounts_controller_spec.rb index 567538b..1e27bfa 100644 --- a/src/spec/controllers/provider_accounts_controller_spec.rb +++ b/src/spec/controllers/provider_accounts_controller_spec.rb @@ -23,6 +23,7 @@ describe Admin::ProviderAccountsController do
it "allows test account validity on create when passing test_account param" do UserSession.create(@admin) + @provider_account.credentials_hash = {} post :create, :provider_account => {:provider_id => @provider.id}, :test_account => true response.should be_success response.should render_template("new") @@ -34,7 +35,7 @@ describe Admin::ProviderAccountsController do post :create, :provider_account => {:provider_id => @provider.id} response.should be_success response.should render_template("new") - response.flash[:error].should == "The entered credential information is incorrect" + response.flash[:error].should == "Credentials are invalid!" end
it "should permit users with account modify permission to access edit cloud account interface" do @@ -46,15 +47,13 @@ describe Admin::ProviderAccountsController do
it "should allow users with account modify password to update a cloud account" do UserSession.create(@admin) - - @provider_account.password = "foobar" + @provider_account.credentials_hash = {:password => "foobar"} @provider_account.stub!(:valid_credentials?).and_return(true) @provider_account.quota = Quota.new @provider_account.save.should be_true - - post :update, :id => @provider_account.id, :provider_account => { :password => 'mockpassword' } + post :update, :id => @provider_account.id, :provider_account => { :credentials_hash => {:password => 'mockpassword'} } response.should redirect_to admin_provider_account_path(@provider_account) - ProviderAccount.find(@provider_account.id).password.should == "mockpassword" + ProviderAccount.find(@provider_account.id).credentials_hash['password'].should == "mockpassword" end
it "should allow users with account modify permission to delete a cloud account" do diff --git a/src/spec/factories/credential.rb b/src/spec/factories/credential.rb new file mode 100644 index 0000000..8cde3f8 --- /dev/null +++ b/src/spec/factories/credential.rb @@ -0,0 +1,41 @@ +Factory.define :credential do |c| + c.association :credential_definition + c.sequence(:value) {|n| "value#{n}"} +end + +# EC2 credentials +Factory.define :ec2_username_credential, :parent => :credential do |c| + c.value "mockuser" + c.credential_definition { CredentialDefinition.find_by_name('username',:conditions => {:provider_type_id => ProviderType.find_by_codename('ec2')})} +end + +Factory.define :ec2_password_credential, :parent => :credential do |c| + c.value "mockpassword" + c.credential_definition { CredentialDefinition.find_by_name('password',:conditions => {:provider_type_id => ProviderType.find_by_codename('ec2')})} +end + +Factory.define :ec2_account_id_credential, :parent => :credential do |c| + c.value "3141" + c.credential_definition { CredentialDefinition.find_by_name('account_id',:conditions => {:provider_type_id => ProviderType.find_by_codename('ec2')})} +end + +Factory.define :ec2_x509private_credential, :parent => :credential do |c| + c.value "x509 private key" + c.credential_definition { CredentialDefinition.find_by_name('x509private',:conditions => {:provider_type_id => ProviderType.find_by_codename('ec2')})} +end + +Factory.define :ec2_x509public_credential, :parent => :credential do |c| + c.value "x509 public key" + c.credential_definition { CredentialDefinition.find_by_name('x509public',:conditions => {:provider_type_id => ProviderType.find_by_codename('ec2')})} +end + +#Mock & Others credentials +Factory.define :username_credential, :parent => :credential do |c| + c.value "mockuser" + c.credential_definition { CredentialDefinition.find_by_name('username',:conditions => {:provider_type_id => ProviderType.find_by_codename('mock')})} +end + +Factory.define :password_credential, :parent => :credential do |c| + c.value "mockpassword" + c.credential_definition { CredentialDefinition.find_by_name('password',:conditions => {:provider_type_id => ProviderType.find_by_codename('mock')})} +end diff --git a/src/spec/factories/credential_definition.rb b/src/spec/factories/credential_definition.rb new file mode 100644 index 0000000..05cd9c5 --- /dev/null +++ b/src/spec/factories/credential_definition.rb @@ -0,0 +1,57 @@ +Factory.define :credential_definition do |f| + f.sequence(:name) { |n| "field#{n}" } + f.sequence(:label) { |n| "field#{n}" } + f.input_type 'text' + f.association :provider_type +end + +# EC2 Credential Definitions +Factory.define :ec2_username_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename('ec2') + f.name 'username' + f.label 'Username' + f.input_type 'text' +end + +Factory.define :ec2_password_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename('ec2') + f.name 'password' + f.label 'Password' + f.input_type 'password' +end + +Factory.define :ec2_account_id_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename('ec2') + f.name 'account_id' + f.label 'AWS Account ID' + f.input_type 'text' +end + +Factory.define :ec2_x509private_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename('ec2') + f.name 'x509private' + f.label 'EC2 x509 private key' + f.input_type 'file' +end + +Factory.define :ec2_x509public_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename('ec2') + f.name 'x509public' + f.label 'EC2 x509 public key' + f.input_type 'file' +end + +# Mock & Others Credential Defintions +Factory.define :mock_username_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename("mock") + f.name 'username' + f.label 'API Key' + f.input_type 'text' +end + +Factory.define :mock_password_cred_def, :parent => :credential_definition do |f| + f.provider_type ProviderType.find_by_codename("mock") + f.name 'password' + f.label 'Secret' + f.input_type 'password' +end diff --git a/src/spec/factories/provider.rb b/src/spec/factories/provider.rb index 34f3011..587bc59 100644 --- a/src/spec/factories/provider.rb +++ b/src/spec/factories/provider.rb @@ -5,7 +5,7 @@ Factory.define :provider do |p| end
Factory.define :mock_provider, :parent => :provider do |p| - p.provider_type { ProviderType.find_by_codename("mock") } + p.provider_type {ProviderType.find_by_codename("mock")} p.url 'http://localhost:3001/api' p.hardware_profiles { |hp| [hp.association(:mock_hwp1), hp.association(:mock_hwp2)] } p.after_create { |p| p.realms << Factory(:realm1, :provider => p) << Factory(:realm2, :provider => p) } diff --git a/src/spec/factories/provider_account.rb b/src/spec/factories/provider_account.rb index bad1567..d3944bd 100644 --- a/src/spec/factories/provider_account.rb +++ b/src/spec/factories/provider_account.rb @@ -1,23 +1,28 @@ Factory.define :provider_account do |f| - f.sequence(:username) { |n| "testUser#{n}" } - f.password "testPassword" f.sequence(:label) { |n| "test label#{n}" } - f.account_number "3141" - f.x509_cert_priv "x509 private key" - f.x509_cert_pub "x509 public key" f.association :provider f.association :quota - f.after_build {|acc| acc.stub!(:generate_auth_key).and_return(nil) if acc.respond_to?(:stub!)} + f.after_build do |acc| + acc.stub!(:generate_auth_key).and_return(nil) if acc.respond_to?(:stub!) + end end
Factory.define :mock_provider_account, :parent => :provider_account do |f| - f.username "mockuser" - f.password "mockpassword" - f.provider { |p| p.association(:mock_provider) } + f.association :provider, :factory => :mock_provider + f.after_build do |acc| + acc.credentials << Factory.build(:username_credential) + acc.credentials << Factory.build(:password_credential) + end end
Factory.define :ec2_provider_account, :parent => :provider_account do |f| - f.username "mockuser" - f.password "mockpassword" - f.provider { |p| p.association(:ec2_provider) } + f.association :provider, :factory => :ec2_provider + f.after_build do |acc| + acc.credentials << Factory.build(:ec2_username_credential) + acc.credentials << Factory.build(:ec2_password_credential) + acc.credentials << Factory.build(:ec2_account_id_credential) + acc.credentials << Factory.build(:ec2_x509private_credential) + acc.credentials << Factory.build(:ec2_x509public_credential) + end + end diff --git a/src/spec/factories/provider_type.rb b/src/spec/factories/provider_type.rb index 0fed927..2e73f4a 100644 --- a/src/spec/factories/provider_type.rb +++ b/src/spec/factories/provider_type.rb @@ -1,10 +1,14 @@ Factory.define :provider_type do |p| + p.sequence(:name) { |n| "name#{n}" } + p.sequence(:codename) { |n| "codename#{n}" } end
Factory.define :mock_provider_type, :parent => :provider_type do |p| p.name 'Mock' + p.codename 'mock' end
Factory.define :ec2_provider_type, :parent => :provider_type do |p| p.name 'Amazon EC2' + p.codename 'ec2' end diff --git a/src/spec/models/credential_definition_spec.rb b/src/spec/models/credential_definition_spec.rb new file mode 100644 index 0000000..9b39e21 --- /dev/null +++ b/src/spec/models/credential_definition_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +context CredentialDefinition do + before(:each) do + @cred_def = Factory.build(:credential_definition) + end + + it "default factory object should be valid" do + @cred_def.should be_valid + end + + + it "should not be valid without name" do + @cred_def.name = nil + @cred_def.should_not be_valid + end + + it "should not be valid without label" do + @cred_def.label = nil + @cred_def.should_not be_valid + end + +end diff --git a/src/spec/models/credential_spec.rb b/src/spec/models/credential_spec.rb new file mode 100644 index 0000000..4a1af05 --- /dev/null +++ b/src/spec/models/credential_spec.rb @@ -0,0 +1,29 @@ +require "spec_helper" + +describe Credential do + before(:each) do + @credential = Factory.build(:credential) + end + + it "default factory object is valid" do + @credential.should be_valid + end + + it "should not be valid without value" do + @credential.value = nil + @credential.should_not be_valid + end + + it "should not be valid without assigned credential definition" do + @credential.credential_definition_id = nil + @credential.should_not be_valid + end + + it "should not be valid without unique credential definition" do + @credential.save! + @second_credential = Factory.build(:credential, + :credential_definition_id => @credential.credential_definition_id, + :provider_account_id => @credential.provider_account_id) + @second_credential.should_not be_valid + end +end diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb index fd5d00f..8d279de 100644 --- a/src/spec/models/instance_spec.rb +++ b/src/spec/models/instance_spec.rb @@ -132,9 +132,7 @@ describe Instance do
it "should return empty list of instance actions when connect to provider fails" do provider = Factory.build(:mock_provider2) - cloud_account = Factory.build(:provider_account, :provider => provider, - :username => 'john doe', - :password => 'asdf') + cloud_account = Factory.build(:provider_account, :provider => provider) cloud_account.stub!(:connect).and_return(nil) cloud_account.stub!(:valid_credentials?).and_return(true) instance = Factory.create(:instance, :provider_account => cloud_account) diff --git a/src/spec/models/pool_family_spec.rb b/src/spec/models/pool_family_spec.rb index 68dfb42..3a40201 100644 --- a/src/spec/models/pool_family_spec.rb +++ b/src/spec/models/pool_family_spec.rb @@ -5,7 +5,7 @@ describe PoolFamily do before(:each) do @pool = Factory :pool @pool_family = @pool.pool_family - @provider_account = Factory :mock_provider_account + @provider_account = Factory.build :mock_provider_account @provider_account.pool_families << @pool_family @provider_account.save! end diff --git a/src/spec/models/provider_account_observer_spec.rb b/src/spec/models/provider_account_observer_spec.rb index cc8b210..6b7d62a 100644 --- a/src/spec/models/provider_account_observer_spec.rb +++ b/src/spec/models/provider_account_observer_spec.rb @@ -15,7 +15,7 @@ describe ProviderAccountObserver do provider_account = Factory.build :ec2_provider_account provider_account.stub!(:connect).and_return(@client) provider_account.stub!(:generate_auth_key).and_return(@key) - provider_account.save + provider_account.save! provider_account.instance_key.should_not == nil provider_account.instance_key.pem == "PEM" provider_account.instance_key.id == "1_user" diff --git a/src/spec/models/provider_account_spec.rb b/src/spec/models/provider_account_spec.rb index 09cf674..c4723df 100644 --- a/src/spec/models/provider_account_spec.rb +++ b/src/spec/models/provider_account_spec.rb @@ -3,14 +3,13 @@ require 'spec_helper' describe ProviderAccount do fixtures :all before(:each) do - @provider_account = Factory :mock_provider_account + @provider_account = Factory.build :mock_provider_account end
it "should not be destroyable if it has instances" do @provider_account.instances << Instance.new @provider_account.destroyable?.should be_false @provider_account.destroy.should be_false - @provider_account.instances.clear @provider_account.destroyable?.should be_true @provider_account.destroy.equal?(@provider_account).should be_true @@ -20,7 +19,8 @@ describe ProviderAccount do it "should check the validitiy of the cloud account login credentials" do mock_provider = Factory :mock_provider
- invalid_provider_account = Factory.build(:provider_account, :username => "wrong_username", :password => "wrong_password", :provider => mock_provider) + invalid_provider_account = Factory(:mock_provider_account, :provider => mock_provider) + invalid_provider_account.credentials_hash = {'username' => "wrong_username", 'password' => "wrong_password"} invalid_provider_account.should_not be_valid
valid_provider_account = Factory.build(:mock_provider_account, :provider => mock_provider) @@ -28,7 +28,8 @@ describe ProviderAccount do end
it "should fail to create a cloud account if the provider credentials are invalid" do - provider_account = Factory.build(:mock_provider_account, :password => "wrong_password") + provider_account = Factory.build(:mock_provider_account) + provider_account.credentials_hash = {'password' => "wrong_password"} provider_account.save.should == false end
@@ -69,13 +70,14 @@ describe ProviderAccount do </ec2_credentials> </provider_credentials> EOT - provider_account = Factory.build(:mock_provider_account, - :username => 'user', - :password => 'pass', - :account_number => '1234', - :x509_cert_priv => 'priv_key', - :x509_cert_pub => 'cert' - ) + provider_account = Factory.build(:ec2_provider_account) + provider_account.credentials_hash = { + 'username' => 'user', + 'password' => 'pass', + 'account_id' => '1234', + 'x509private' => 'priv_key', + 'x509public' => 'cert' + } provider_account.build_credentials.should eql(expected_xml) end end diff --git a/src/spec/models/quota_spec.rb b/src/spec/models/quota_spec.rb index 960b417..8455619 100644 --- a/src/spec/models/quota_spec.rb +++ b/src/spec/models/quota_spec.rb @@ -28,6 +28,7 @@ describe Quota do @pool.quota = Factory :unlimited_quota @pool.save!
+ @provider_account = Factory(:mock_provider_account, :quota_id => @provider_account_quota.id) @provider_account.quota = Factory :unlimited_quota @provider_account.save!
diff --git a/src/spec/services/data_service_active_record_spec.rb b/src/spec/services/data_service_active_record_spec.rb index efe75f5..d108e01 100644 --- a/src/spec/services/data_service_active_record_spec.rb +++ b/src/spec/services/data_service_active_record_spec.rb @@ -12,7 +12,8 @@ describe DataServiceActiveRecord do free = 0 for i in 0..2 quota = Factory(:quota, :maximum_total_instances => data[i][0], :total_instances => data[i][1]) - provider_account = Factory.build(:provider_account, :provider => provider, :username => "username" + i.to_s, :quota => quota) + provider_account = Factory.build(:provider_account, :provider => provider, :quota => quota) + provider_account.credentials_hash = {:username => "username" + i.to_s, :password => 'mockpassword'} provider_account.stub!(:valid_credentials?).and_return(true) provider_account.save!
@@ -41,6 +42,7 @@ describe DataServiceActiveRecord do :total_instances => 20)
provider_account = Factory.build(:provider_account, :provider => provider, :quota => quota) + provider_account.credentials_hash = {:username => 'test', :password =>'test'} provider_account.stub!(:valid_credentials?).and_return(true) provider_account.save!
@@ -126,7 +128,8 @@ describe DataServiceActiveRecord do
provider_accounts = [] expected_averages.each do |expected_average| - provider_account = Factory.build(:provider_account, :provider => provider, :username => "username" + expected_average[0].to_s) + provider_account = Factory.build(:provider_account, :provider => provider) + provider_account.credentials_hash = { :username => "username" + expected_average[0].to_s, :password => 'mockpassword' } provider_account.stub!(:valid_credentials?).and_return(true) provider_account.save!