diff --git a/lib/vmfloaty.rb b/lib/vmfloaty.rb index 41e5d37..b5ef327 100644 --- a/lib/vmfloaty.rb +++ b/lib/vmfloaty.rb @@ -55,11 +55,15 @@ class Vmfloaty raise "You did not provide a user to authenticate to vmpooler with" end pass = password "Enter your password please:", '*' - token = Auth.get_token(verbose, url, user, pass) - unless token.nil? - puts "\nToken retrieved!" - puts token + begin + token = Auth.get_token(verbose, url, user, pass) + rescue => e + STDERR.puts e + exit 1 end + + puts "\nToken retrieved!" + puts token end response = Pooler.retrieve(verbose, os_types, token, url) @@ -91,16 +95,18 @@ class Vmfloaty if active # list active vms - status = Auth.token_status(verbose, url, token) - unless status.nil? - # print vms - vms = status[token]['vms'] - if vms.nil? - STDERR.puts "You have no running vms" - exit 0 - end - else - STDERR.puts "Could not retrieve active vms" + begin + status = Auth.token_status(verbose, url, token) + rescue => e + STDERR.puts e + exit 1 + end + + # print vms + vms = status[token]['vms'] + if vms.nil? + STDERR.puts "You have no running vms" + exit 0 end running_vms = vms['running'] @@ -199,10 +205,10 @@ class Vmfloaty if delete_all # get vms with token - status = Auth.token_status(verbose, url, token) - - if status.nil? - STDERR.puts "Could not retrieve status with token" + begin + status = Auth.token_status(verbose, url, token) + rescue => e + STDERR.puts e exit 1 end @@ -348,27 +354,33 @@ class Vmfloaty case action when "get" pass = password "Enter your password please:", '*' - token = Auth.get_token(verbose, url, user, pass) - unless token.nil? - puts token - else - STDERR.puts 'Could not make a request for a token' + begin + token = Auth.get_token(verbose, url, user, pass) + rescue => e + STDERR.puts e + exit 1 end + puts token + exit 0 when "delete" pass = password "Enter your password please:", '*' - result = Auth.delete_token(verbose, url, user, pass, token) - unless result.nil? - puts result - else - STDERR.puts 'Could not make a request to delete a token' + begin + result = Auth.delete_token(verbose, url, user, pass, token) + rescue => e + STDERR.puts e + exit 1 end + puts result + exit 1 when "status" - status = Auth.token_status(verbose, url, token) - unless status.nil? - puts status - else - STDERR.puts 'Could not make a request to get token status' + begin + status = Auth.token_status(verbose, url, token) + rescue => e + STDERR.puts e + exit 1 end + puts status + exit 0 when nil STDERR.puts "No action provided" else @@ -407,12 +419,14 @@ class Vmfloaty raise "You did not provide a user to authenticate to vmpooler with" end pass = password "Enter your password please:", '*' - token = Auth.get_token(verbose, url, user, pass) - unless token.nil? + begin + token = Auth.get_token(verbose, url, user, pass) + rescue => e + STDERR.puts e + STDERR.puts 'Could not get token...requesting vm without a token anyway...' + else puts "\nToken retrieved!" puts token - else - STDERR.puts 'Could not get token...requesting vm without a token anyway...' end end diff --git a/lib/vmfloaty/auth.rb b/lib/vmfloaty/auth.rb index 9ca9d4e..2afc170 100644 --- a/lib/vmfloaty/auth.rb +++ b/lib/vmfloaty/auth.rb @@ -1,6 +1,7 @@ require 'faraday' require 'json' require 'vmfloaty/http' +require 'vmfloaty/errors' class Auth def self.get_token(verbose, url, user, password) @@ -12,15 +13,13 @@ class Auth if res_body["ok"] return res_body["token"] else - STDERR.puts "There was a problem with your request:\n#{res_body}" - return nil + raise TokenError, "HTTP #{resp.status}: There was a problem requesting a token:\n#{res_body}" end end def self.delete_token(verbose, url, user, password, token) if token.nil? STDERR.puts 'You did not provide a token' - return nil end conn = Http.get_conn_with_auth(verbose, url, user, password) @@ -30,15 +29,13 @@ class Auth if res_body["ok"] return res_body else - STDERR.puts "There was a problem with your request:\n#{res_body}" - return nil + raise TokenError, "HTTP #{response.status}: There was a problem deleting a token:\n#{res_body}" end end def self.token_status(verbose, url, token) if token.nil? STDERR.puts 'You did not provide a token' - return nil end conn = Http.get_conn(verbose, url) @@ -49,8 +46,7 @@ class Auth if res_body["ok"] return res_body else - STDERR.puts "There was a problem with your request:\n#{res_body}" - return nil + raise TokenError, "HTTP #{response.status}: There was a problem getting the status of a token:\n#{res_body}" end end end diff --git a/lib/vmfloaty/errors.rb b/lib/vmfloaty/errors.rb index b92211d..03e7861 100644 --- a/lib/vmfloaty/errors.rb +++ b/lib/vmfloaty/errors.rb @@ -3,3 +3,9 @@ class AuthError < StandardError super end end + +class TokenError < StandardError + def initialize(msg="Could not do operation with token provided") + super + end +end diff --git a/spec/vmfloaty/auth_spec.rb b/spec/vmfloaty/auth_spec.rb index 7cef87a..c6e1d98 100644 --- a/spec/vmfloaty/auth_spec.rb +++ b/spec/vmfloaty/auth_spec.rb @@ -20,6 +20,14 @@ describe Pooler do token = Auth.get_token(false, @vmpooler_url, "first.last", "password") expect(token).to eq @token end + + it "raises a token error if something goes wrong" do + stub_request(:post, "https://first.last:password@vmpooler.example.com/token"). + with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'0', 'User-Agent'=>'Faraday v0.9.2'}). + to_return(:status => 500, :body => "{\"ok\":false}", :headers => {}) + + expect{ Auth.get_token(false, @vmpooler_url, "first.last", "password") }.to raise_error(TokenError) + end end describe "#delete_token" do @@ -35,6 +43,14 @@ describe Pooler do expect(Auth.delete_token(false, @vmpooler_url, "first.last", "password", @token)).to eq JSON.parse(@delete_token_response) end + + it "raises a token error if something goes wrong" do + stub_request(:delete, "https://first.last:password@vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y"). + with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.2'}). + to_return(:status => 500, :body => "{\"ok\":false}", :headers => {}) + + expect{ Auth.delete_token(false, @vmpooler_url, "first.last", "password", @token) }.to raise_error(TokenError) + end end describe "#token_status" do @@ -50,5 +66,13 @@ describe Pooler do expect(Auth.token_status(false, @vmpooler_url, @token)).to eq JSON.parse(@token_status_response) end + + it "raises a token error if something goes wrong" do + stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y"). + with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.2'}). + to_return(:status => 500, :body => "{\"ok\":false}", :headers => {}) + + expect{ Auth.token_status(false, @vmpooler_url, @token) }.to raise_error(TokenError) + end end end