Merge pull request #145 from nmburgan/maint/master/fix_specs

(maint) Use latest Faraday/webmock, update specs
This commit is contained in:
Brandon High 2021-07-13 10:02:14 -07:00 committed by GitHub
commit 3b40cbe498
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 66 additions and 30 deletions

View file

@ -12,5 +12,5 @@ group :test do
gem 'rb-readline' gem 'rb-readline'
gem 'rspec', '~> 3.10.0' gem 'rspec', '~> 3.10.0'
gem 'rubocop', '~> 1.6' gem 'rubocop', '~> 1.6'
gem 'webmock', '1.21.0' gem 'webmock', '~> 3.13'
end end

View file

@ -2,6 +2,7 @@
require 'simplecov' require 'simplecov'
require 'coveralls' require 'coveralls'
require 'base64'
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
SimpleCov::Formatter::HTMLFormatter, SimpleCov::Formatter::HTMLFormatter,
@ -26,3 +27,19 @@ RSpec.configure do |config|
config.tty = true config.tty = true
config.formatter = :documentation config.formatter = :documentation
end end
def get_headers(username: nil, password: nil, token: nil, content_type: nil, content_length: nil)
headers = {
'Accept' => '*/*',
'Accept-Encoding' => /gzip/,
'User-Agent' => /Faraday/,
}
if username && password
auth = Base64.encode64("#{username}:#{password}").chomp
headers['Authorization'] = "Basic #{auth}"
end
headers['X-Auth-Token'] = token if token
headers['Content-Type'] = content_type if content_type
headers['Content-Length'] = content_length.to_s if content_length
headers
end

View file

@ -3,7 +3,11 @@
require 'spec_helper' require 'spec_helper'
require_relative '../../../lib/vmfloaty/auth' require_relative '../../../lib/vmfloaty/auth'
user = 'first.last'
pass = 'password'
describe Pooler do describe Pooler do
before :each do before :each do
@abs_url = 'https://abs.example.com/api/v2' @abs_url = 'https://abs.example.com/api/v2'
end end
@ -15,18 +19,20 @@ describe Pooler do
end end
it 'returns a token from abs' do it 'returns a token from abs' do
stub_request(:post, 'https://first.last:password@abs.example.com/api/v2/token') stub_request(:post, 'https://abs.example.com/api/v2/token')
.with(headers: get_headers(username: user, password: pass, content_length: 0))
.to_return(status: 200, body: @get_token_response, headers: {}) .to_return(status: 200, body: @get_token_response, headers: {})
token = Auth.get_token(false, @abs_url, 'first.last', 'password') token = Auth.get_token(false, @abs_url, user, pass)
expect(token).to eq @token expect(token).to eq @token
end end
it 'raises a token error if something goes wrong' do it 'raises a token error if something goes wrong' do
stub_request(:post, 'https://first.last:password@abs.example.com/api/v2/token') stub_request(:post, 'https://abs.example.com/api/v2/token')
.with(headers: get_headers(username: user, password: pass, content_length: 0))
.to_return(status: 500, body: '{"ok":false}', headers: {}) .to_return(status: 500, body: '{"ok":false}', headers: {})
expect { Auth.get_token(false, @abs_url, 'first.last', 'password') }.to raise_error(TokenError) expect { Auth.get_token(false, @abs_url, user, pass) }.to raise_error(TokenError)
end end
end end
@ -37,22 +43,24 @@ describe Pooler do
end end
it 'deletes the specified token' do it 'deletes the specified token' do
stub_request(:delete, 'https://first.last:password@abs.example.com/api/v2/token/utpg2i2xswor6h8ttjhu3d47z53yy47y') stub_request(:delete, 'https://abs.example.com/api/v2/token/utpg2i2xswor6h8ttjhu3d47z53yy47y')
.with(headers: get_headers(username: user, password: pass))
.to_return(status: 200, body: @delete_token_response, headers: {}) .to_return(status: 200, body: @delete_token_response, headers: {})
expect(Auth.delete_token(false, @abs_url, 'first.last', 'password', expect(Auth.delete_token(false, @abs_url, user, pass,
@token)).to eq JSON.parse(@delete_token_response) @token)).to eq JSON.parse(@delete_token_response)
end end
it 'raises a token error if something goes wrong' do it 'raises a token error if something goes wrong' do
stub_request(:delete, 'https://first.last:password@abs.example.com/api/v2/token/utpg2i2xswor6h8ttjhu3d47z53yy47y') stub_request(:delete, 'https://abs.example.com/api/v2/token/utpg2i2xswor6h8ttjhu3d47z53yy47y')
.with(headers: get_headers(username: user, password: pass))
.to_return(status: 500, body: '{"ok":false}', headers: {}) .to_return(status: 500, body: '{"ok":false}', headers: {})
expect { Auth.delete_token(false, @abs_url, 'first.last', 'password', @token) }.to raise_error(TokenError) expect { Auth.delete_token(false, @abs_url, user, pass, @token) }.to raise_error(TokenError)
end end
it 'raises a token error if no token provided' do it 'raises a token error if no token provided' do
expect { Auth.delete_token(false, @abs_url, 'first.last', 'password', nil) }.to raise_error(TokenError) expect { Auth.delete_token(false, @abs_url, user, pass, nil) }.to raise_error(TokenError)
end end
end end
@ -64,7 +72,7 @@ describe Pooler do
it 'checks the status of a token' do it 'checks the status of a token' do
stub_request(:get, "#{@abs_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y") stub_request(:get, "#{@abs_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y")
.with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3' }) .with(headers: get_headers)
.to_return(status: 200, body: @token_status_response, headers: {}) .to_return(status: 200, body: @token_status_response, headers: {})
expect(Auth.token_status(false, @abs_url, @token)).to eq JSON.parse(@token_status_response) expect(Auth.token_status(false, @abs_url, @token)).to eq JSON.parse(@token_status_response)
@ -72,7 +80,7 @@ describe Pooler do
it 'raises a token error if something goes wrong' do it 'raises a token error if something goes wrong' do
stub_request(:get, "#{@abs_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y") stub_request(:get, "#{@abs_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y")
.with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3' }) .with(headers: get_headers)
.to_return(status: 500, body: '{"ok":false}', headers: {}) .to_return(status: 500, body: '{"ok":false}', headers: {})
expect { Auth.token_status(false, @abs_url, @token) }.to raise_error(TokenError) expect { Auth.token_status(false, @abs_url, @token) }.to raise_error(TokenError)

View file

@ -152,7 +152,11 @@ describe ABS do
[ [
{ "state":"allocated", "last_processed":"2020-01-17 22:29:13 +0000", "allocated_resources":[{"hostname":"craggy-chord.delivery.puppetlabs.net", "type":"centos-7-x86_64", "engine":"vmpooler"}, {"hostname":"visible-revival.delivery.puppetlabs.net", "type":"centos-7-x86_64", "engine":"vmpooler"}], "audit_log":{"2020-01-17 22:28:45 +0000":"Allocated craggy-chord.delivery.puppetlabs.net, visible-revival.delivery.puppetlabs.net for job 1579300120799"}, "request":{"resources":{"centos-7-x86_64":2}, "job":{"id":"1579300120799", "tags":{"user":"test-user"}, "user":"test-user", "time-received":1579300120}, "priority":3}} { "state":"allocated", "last_processed":"2020-01-17 22:29:13 +0000", "allocated_resources":[{"hostname":"craggy-chord.delivery.puppetlabs.net", "type":"centos-7-x86_64", "engine":"vmpooler"}, {"hostname":"visible-revival.delivery.puppetlabs.net", "type":"centos-7-x86_64", "engine":"vmpooler"}], "audit_log":{"2020-01-17 22:28:45 +0000":"Allocated craggy-chord.delivery.puppetlabs.net, visible-revival.delivery.puppetlabs.net for job 1579300120799"}, "request":{"resources":{"centos-7-x86_64":2}, "job":{"id":"1579300120799", "tags":{"user":"test-user"}, "user":"test-user", "time-received":1579300120}, "priority":3}}
]' ]'
@return_request = { '{"job_id":"1579300120799","hosts":{"hostname":"craggy-chord.delivery.puppetlabs.net","type":"centos-7-x86_64","engine":"vmpooler"},{"hostname":"visible-revival.delivery.puppetlabs.net","type":"centos-7-x86_64","engine":"vmpooler"}}' => true } @return_request = {
"job_id" => "1579300120799",
"hosts" => [{"hostname"=>"craggy-chord.delivery.puppetlabs.net","type"=>"centos-7-x86_64","engine"=>"vmpooler"},
{"hostname"=>"visible-revival.delivery.puppetlabs.net","type"=>"centos-7-x86_64","engine"=>"vmpooler"}]
}
# rubocop:enable Layout/LineLength # rubocop:enable Layout/LineLength
@token = 'utpg2i2xswor6h8ttjhu3d47z53yy47y' @token = 'utpg2i2xswor6h8ttjhu3d47z53yy47y'
@test_user = 'test-user' @test_user = 'test-user'
@ -164,7 +168,7 @@ describe ABS do
stub_request(:get, 'https://abs.example.com/api/v2/status/queue') stub_request(:get, 'https://abs.example.com/api/v2/status/queue')
.to_return(status: 200, body: @active_requests_response, headers: {}) .to_return(status: 200, body: @active_requests_response, headers: {})
stub_request(:post, 'https://abs.example.com/api/v2/return') stub_request(:post, 'https://abs.example.com/api/v2/return')
.with(body: @return_request) .with(headers: get_headers(content_type: 'application/x-www-form-urlencoded', token: @token), body: @return_request.to_json)
.to_return(status: 200, body: 'OK', headers: {}) .to_return(status: 200, body: 'OK', headers: {})
ret = ABS.delete(false, @abs_url, @hosts, @token, @test_user) ret = ABS.delete(false, @abs_url, @hosts, @token, @test_user)

View file

@ -3,6 +3,9 @@
require 'spec_helper' require 'spec_helper'
require_relative '../../lib/vmfloaty/auth' require_relative '../../lib/vmfloaty/auth'
user = 'first.last'
pass = 'password'
describe Pooler do describe Pooler do
before :each do before :each do
@vmpooler_url = 'https://vmpooler.example.com' @vmpooler_url = 'https://vmpooler.example.com'
@ -15,18 +18,20 @@ describe Pooler do
end end
it 'returns a token from vmpooler' do it 'returns a token from vmpooler' do
stub_request(:post, 'https://first.last:password@vmpooler.example.com/token') stub_request(:post, 'https://vmpooler.example.com/token')
.with(headers: get_headers(username: user, password: pass, content_length: 0))
.to_return(status: 200, body: @get_token_response, headers: {}) .to_return(status: 200, body: @get_token_response, headers: {})
token = Auth.get_token(false, @vmpooler_url, 'first.last', 'password') token = Auth.get_token(false, @vmpooler_url, user, pass)
expect(token).to eq @token expect(token).to eq @token
end end
it 'raises a token error if something goes wrong' do it 'raises a token error if something goes wrong' do
stub_request(:post, 'https://first.last:password@vmpooler.example.com/token') stub_request(:post, 'https://vmpooler.example.com/token')
.with(headers: get_headers(username: user, password: pass, content_length: 0))
.to_return(status: 500, body: '{"ok":false}', headers: {}) .to_return(status: 500, body: '{"ok":false}', headers: {})
expect { Auth.get_token(false, @vmpooler_url, 'first.last', 'password') }.to raise_error(TokenError) expect { Auth.get_token(false, @vmpooler_url, user, pass) }.to raise_error(TokenError)
end end
end end
@ -37,15 +42,17 @@ describe Pooler do
end end
it 'deletes the specified token' do it 'deletes the specified token' do
stub_request(:delete, 'https://first.last:password@vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y') stub_request(:delete, 'https://vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y')
.with(headers: get_headers(username: user, password: pass))
.to_return(status: 200, body: @delete_token_response, headers: {}) .to_return(status: 200, body: @delete_token_response, headers: {})
expect(Auth.delete_token(false, @vmpooler_url, 'first.last', 'password', expect(Auth.delete_token(false, @vmpooler_url, user, pass,
@token)).to eq JSON.parse(@delete_token_response) @token)).to eq JSON.parse(@delete_token_response)
end end
it 'raises a token error if something goes wrong' do it 'raises a token error if something goes wrong' do
stub_request(:delete, 'https://first.last:password@vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y') stub_request(:delete, 'https://vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y')
.with(headers: get_headers(username: user, password: pass))
.to_return(status: 500, body: '{"ok":false}', headers: {}) .to_return(status: 500, body: '{"ok":false}', headers: {})
expect { Auth.delete_token(false, @vmpooler_url, 'first.last', 'password', @token) }.to raise_error(TokenError) expect { Auth.delete_token(false, @vmpooler_url, 'first.last', 'password', @token) }.to raise_error(TokenError)
@ -64,6 +71,7 @@ describe Pooler do
it 'checks the status of a token' do it 'checks the status of a token' do
stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y") stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y")
.with(headers: get_headers)
.to_return(status: 200, body: @token_status_response, headers: {}) .to_return(status: 200, body: @token_status_response, headers: {})
expect(Auth.token_status(false, @vmpooler_url, @token)).to eq JSON.parse(@token_status_response) expect(Auth.token_status(false, @vmpooler_url, @token)).to eq JSON.parse(@token_status_response)
@ -71,6 +79,7 @@ describe Pooler do
it 'raises a token error if something goes wrong' do it 'raises a token error if something goes wrong' do
stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y") stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y")
.with(headers: get_headers)
.to_return(status: 500, body: '{"ok":false}', headers: {}) .to_return(status: 500, body: '{"ok":false}', headers: {})
expect { Auth.token_status(false, @vmpooler_url, @token) }.to raise_error(TokenError) expect { Auth.token_status(false, @vmpooler_url, @token) }.to raise_error(TokenError)

View file

@ -8,9 +8,7 @@ require 'vmfloaty/nonstandard_pooler'
describe NonstandardPooler do describe NonstandardPooler do
before :each do before :each do
@nspooler_url = 'https://nspooler.example.com' @nspooler_url = 'https://nspooler.example.com'
@auth_token_headers = { @auth_token_headers = get_headers(token: 'token-value')
'X-Auth-Token' => 'token-value'
}
end end
describe '#list' do describe '#list' do
@ -121,7 +119,7 @@ describe NonstandardPooler do
it 'raises an AuthError if the token is invalid' do it 'raises an AuthError if the token is invalid' do
stub_request(:post, "#{@nspooler_url}/host/solaris-11-sparc") stub_request(:post, "#{@nspooler_url}/host/solaris-11-sparc")
.with(headers: @auth_token_headers) .with(headers: get_headers(token: 'token-value'))
.to_return(status: 401, body: '{"ok":false,"reason": "token: token-value does not exist"}', headers: {}) .to_return(status: 401, body: '{"ok":false,"reason": "token: token-value does not exist"}', headers: {})
vm_hash = { 'solaris-11-sparc' => 1 } vm_hash = { 'solaris-11-sparc' => 1 }
@ -174,7 +172,7 @@ describe NonstandardPooler do
end end
it 'modifies the reason of a vm' do it 'modifies the reason of a vm' do
modify_request_body = { '{"reserved_for_reason":"testing"}' => true } modify_request_body = { '{"reserved_for_reason":"testing"}' => nil }
stub_request(:put, "#{@nspooler_url}/host/myfakehost") stub_request(:put, "#{@nspooler_url}/host/myfakehost")
.with(body: modify_request_body, .with(body: modify_request_body,
headers: @auth_token_headers) headers: @auth_token_headers)

View file

@ -119,8 +119,8 @@ describe Pooler do
it 'modifies the TTL of a vm' do it 'modifies the TTL of a vm' do
modify_hash = { lifetime: 12 } modify_hash = { lifetime: 12 }
stub_request(:put, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6") stub_request(:put, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6")
.with(body: { '{"lifetime":12}' => true }, .with(body: { '{"lifetime":12}' => nil },
headers: { 'Content-Type' => 'application/x-www-form-urlencoded', 'X-Auth-Token' => 'mytokenfile' }) headers: get_headers(content_type: 'application/x-www-form-urlencoded', token: 'mytokenfile'))
.to_return(status: 200, body: @modify_response_body_success, headers: {}) .to_return(status: 200, body: @modify_response_body_success, headers: {})
modify_req = Pooler.modify(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', modify_hash) modify_req = Pooler.modify(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', modify_hash)

View file

@ -26,5 +26,5 @@ Gem::Specification.new do |s|
s.add_dependency 'colorize', '~> 0.8.1' s.add_dependency 'colorize', '~> 0.8.1'
s.add_dependency 'commander', '>= 4.4.3', '< 4.6.0' s.add_dependency 'commander', '>= 4.4.3', '< 4.6.0'
s.add_dependency 'faraday', '~> 0.17.0' s.add_dependency 'faraday', '~> 1.5', '>= 1.5.1'
end end