diff --git a/lib/linux_admin/exceptions.rb b/lib/linux_admin/exceptions.rb index 8e08cb6..50a980c 100644 --- a/lib/linux_admin/exceptions.rb +++ b/lib/linux_admin/exceptions.rb @@ -5,4 +5,12 @@ def initialize(message, result) super(message) @result = result end -end \ No newline at end of file +end + +class LinuxAdmin + class CredentialError < CommandResultError + def initialize(result) + super("Invalid username or password", result) + end + end +end diff --git a/lib/linux_admin/registration_system/subscription_manager.rb b/lib/linux_admin/registration_system/subscription_manager.rb index 984b1c6..f1a5314 100644 --- a/lib/linux_admin/registration_system/subscription_manager.rb +++ b/lib/linux_admin/registration_system/subscription_manager.rb @@ -2,6 +2,12 @@ class LinuxAdmin class SubscriptionManager < RegistrationSystem + def run!(cmd, options = {}) + super(cmd, options) + rescue CommandResultError => err + raise CredentialError.new(err.result) if err.result.error.downcase.include?("invalid username or password") + raise + end def validate_credentials(options) !!organizations(options) @@ -23,8 +29,8 @@ def organizations(options) params.merge!(proxy_params(options)) params["--serverurl="] = options[:server_url] if options[:server_url] - output = run!(cmd, :params => params).output - parse_output(output).index_by {|i| i[:name]} + result = run!(cmd, :params => params) + parse_output(result.output).index_by {|i| i[:name]} end def register(options) diff --git a/spec/subscription_manager_spec.rb b/spec/subscription_manager_spec.rb index d861d44..cdfa7d7 100644 --- a/spec/subscription_manager_spec.rb +++ b/spec/subscription_manager_spec.rb @@ -93,9 +93,17 @@ }) end - it "#organizations" do - run_options = ["subscription-manager orgs", {:params=>{"--username="=>"SomeUser", "--password="=>"SomePass", "--proxy="=>"1.2.3.4", "--proxyuser="=>"ProxyUser", "--proxypassword="=>"ProxyPass", "--serverurl="=>"192.168.1.1"}}] - described_class.any_instance.should_receive(:run!).once.with(*run_options).and_return(double(:output => sample_output("subscription_manager/output_orgs"))) - expect(described_class.new.organizations({:username=>"SomeUser", :password=>"SomePass", :proxy_address=>"1.2.3.4", :proxy_username=>"ProxyUser", :proxy_password=>"ProxyPass", :server_url=>"192.168.1.1"})).to eq({"SomeOrg"=>{:name=>"SomeOrg", :key=>"1234567"}}) + context "#organizations" do + it "with valid credentials" do + run_options = ["subscription-manager orgs", {:params=>{"--username="=>"SomeUser", "--password="=>"SomePass", "--proxy="=>"1.2.3.4", "--proxyuser="=>"ProxyUser", "--proxypassword="=>"ProxyPass", "--serverurl="=>"192.168.1.1"}}] + described_class.any_instance.should_receive(:run!).once.with(*run_options).and_return(double(:output => sample_output("subscription_manager/output_orgs"))) + expect(described_class.new.organizations({:username=>"SomeUser", :password=>"SomePass", :proxy_address=>"1.2.3.4", :proxy_username=>"ProxyUser", :proxy_password=>"ProxyPass", :server_url=>"192.168.1.1"})).to eq({"SomeOrg"=>{:name=>"SomeOrg", :key=>"1234567"}}) + end + + it "with invalid credentials" do + run_options = ["subscription-manager orgs", {:params=>{"--username="=>"BadUser", "--password="=>"BadPass"}}] + described_class.any_instance.should_receive(:run).once.with(*run_options).and_return(CommandResult.new("", "Invalid username or password. To create a login, please visit https://www.redhat.com/wapps/ugc/register.html", 255)) + expect { described_class.new.organizations({:username=>"BadUser", :password=>"BadPass"}) }.to raise_error(LinuxAdmin::CredentialError) + end end end