mirror of
https://github.com/puppetlabs/beaker-vmpooler.git
synced 2026-01-26 02:58:42 -05:00
(BKR-1481) Rewrite beaker-vmpooler to use shared .fog parsing (#11)
* (BKR-1481) Rewrite beaker-vmpooler to use shared .fog parsing * (BKR-1481) Rename Fog Credential Method * (BKR-1481) Cleanup spec tests Spec tests don't need to replicate spec tests of core functionality.
This commit is contained in:
parent
b8804eb5f1
commit
c0938fe1c8
2 changed files with 31 additions and 100 deletions
|
|
@ -27,29 +27,17 @@ module Beaker
|
||||||
|
|
||||||
def load_credentials(dot_fog = '.fog')
|
def load_credentials(dot_fog = '.fog')
|
||||||
creds = {}
|
creds = {}
|
||||||
|
begin
|
||||||
if fog = read_fog_file(dot_fog)
|
fog = get_fog_credentials(dot_fog)
|
||||||
if fog[:default] && fog[:default][:vmpooler_token]
|
if fog[:vmpooler_token]
|
||||||
creds[:vmpooler_token] = fog[:default][:vmpooler_token]
|
creds[:vmpooler_token] = fog[:vmpooler_token]
|
||||||
else
|
else
|
||||||
@logger.warn "Credentials file (#{dot_fog}) is missing a :default section with a :vmpooler_token value; proceeding without authentication"
|
@logger.warn "vmpooler_token not found in credentials file (#{dot_fog})\nProceeding without authentication"
|
||||||
end
|
end
|
||||||
else
|
rescue ArgumentError => e
|
||||||
@logger.warn "Credentials file (#{dot_fog}) is empty; proceeding without authentication"
|
@logger.warn "Invalid credentials file:\n(#{e.class}) #{e.message}\nProceeding without authentication"
|
||||||
end
|
end
|
||||||
|
|
||||||
creds
|
creds
|
||||||
|
|
||||||
rescue TypeError, Psych::SyntaxError => e
|
|
||||||
@logger.warn "#{e.class}: Credentials file (#{dot_fog}) has invalid syntax; proceeding without authentication"
|
|
||||||
creds
|
|
||||||
rescue Errno::ENOENT
|
|
||||||
@logger.warn "Credentials file (#{dot_fog}) not found; proceeding without authentication"
|
|
||||||
creds
|
|
||||||
end
|
|
||||||
|
|
||||||
def read_fog_file(dot_fog = '.fog')
|
|
||||||
YAML.load_file(dot_fog)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def connection_preference(host)
|
def connection_preference(host)
|
||||||
|
|
|
||||||
|
|
@ -168,96 +168,39 @@ module Beaker
|
||||||
|
|
||||||
describe "#load_credentials" do
|
describe "#load_credentials" do
|
||||||
|
|
||||||
it 'continues without credentials when fog file is missing' do
|
it 'loads credentials from a fog file' do
|
||||||
allow_any_instance_of( Beaker::Vmpooler ).to \
|
credentials = { :vmpooler_token => "example_token" }
|
||||||
receive(:read_fog_file).and_raise(Errno::ENOENT.new)
|
make_opts = { :dot_fog => '.fog' }
|
||||||
|
|
||||||
|
expect_any_instance_of( Beaker::Vmpooler ).to receive( :get_fog_credentials ).and_return(credentials)
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
||||||
|
expect( vmpooler.credentials ).to be == credentials
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'continues without credentials when there are problems loading the fog file' do
|
||||||
|
logger = double( 'logger' )
|
||||||
|
make_opts = { :logger => logger, :dot_fog => '.fog' }
|
||||||
|
|
||||||
|
expect_any_instance_of( Beaker::Vmpooler ).to receive( :get_fog_credentials ).and_raise( ArgumentError, 'something went wrong' )
|
||||||
|
expect( logger ).to receive( :warn ).with( /Invalid credentials file.*something went wrong.*Proceeding without authentication/m )
|
||||||
|
|
||||||
|
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
||||||
|
|
||||||
expect( vmpooler.credentials ).to be == {}
|
expect( vmpooler.credentials ).to be == {}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'continues without credentials when fog file is empty' do
|
it 'continues without credentials when fog file has no vmpooler_token' do
|
||||||
allow_any_instance_of( Beaker::Vmpooler ).to \
|
logger = double( 'logger' )
|
||||||
receive(:read_fog_file).and_return(false)
|
make_opts = { :logger => logger, :dot_fog => '.fog' }
|
||||||
|
|
||||||
|
expect_any_instance_of( Beaker::Vmpooler ).to receive( :get_fog_credentials ).and_return( {} )
|
||||||
|
expect( logger ).to receive( :warn ).with( /vmpooler_token not found in credentials file.*Proceeding without authentication/m )
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
||||||
|
|
||||||
expect( vmpooler.credentials ).to be == {}
|
expect( vmpooler.credentials ).to be == {}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'continues without credentials when fog file contains no :default section' do
|
|
||||||
data = { :some => { :other => :data } }
|
|
||||||
|
|
||||||
allow_any_instance_of( Beaker::Vmpooler ).to \
|
|
||||||
receive(:read_fog_file).and_return(data)
|
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
|
||||||
expect( vmpooler.credentials ).to be == { }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'continues without credentials when fog file :default section has no :vmpooler_token' do
|
|
||||||
data = { :default => { :something_else => "TOKEN" } }
|
|
||||||
|
|
||||||
allow_any_instance_of( Beaker::Vmpooler ).to \
|
|
||||||
receive(:read_fog_file).and_return(data)
|
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
|
||||||
expect( vmpooler.credentials ).to be == { }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'continues without credentials when there are formatting errors in the fog file' do
|
|
||||||
data = { "'default'" => { :vmpooler_token => "b2wl8prqe6ddoii70md" } }
|
|
||||||
|
|
||||||
allow_any_instance_of( Beaker::Vmpooler ).to \
|
|
||||||
receive(:read_fog_file).and_return(data)
|
|
||||||
|
|
||||||
logger = double('logger')
|
|
||||||
|
|
||||||
expect(logger).to receive(:warn).with(/is missing a :default section with a :vmpooler_token value/)
|
|
||||||
make_opts = {:logger => logger}
|
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
|
||||||
expect( vmpooler.credentials ).to be == { }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'throws a TypeError and continues without credentials when there are syntax errors in the fog file' do
|
|
||||||
data = "'default'\n :vmpooler_token: z2wl8prqe0ddoii70ad"
|
|
||||||
|
|
||||||
allow( File ).to receive( :open ).and_yield( StringIO.new(data) )
|
|
||||||
logger = double('logger')
|
|
||||||
|
|
||||||
expect(logger).to receive(:warn).with(/TypeError: .* has invalid syntax/)
|
|
||||||
make_opts = {:logger => logger}
|
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
|
||||||
|
|
||||||
expect( vmpooler.credentials ).to be == { }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'throws a Psych::SyntaxError and continues without credentials when there are syntax errors in the fog file' do
|
|
||||||
|
|
||||||
data = ";default;\n :vmpooler_token: z2wl8prqe0ddoii707d"
|
|
||||||
|
|
||||||
allow( File ).to receive( :open ).and_yield( StringIO.new(data) )
|
|
||||||
|
|
||||||
logger = double('logger')
|
|
||||||
|
|
||||||
expect(logger).to receive(:warn).with(/Psych::SyntaxError: .* invalid syntax/)
|
|
||||||
make_opts = {:logger => logger}
|
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
|
||||||
|
|
||||||
expect( vmpooler.credentials ).to be == { }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'stores vmpooler token when found in fog file' do
|
|
||||||
data = { :default => { :vmpooler_token => "TOKEN" } }
|
|
||||||
|
|
||||||
allow_any_instance_of( Beaker::Vmpooler ).to \
|
|
||||||
receive(:read_fog_file).and_return(data)
|
|
||||||
|
|
||||||
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
|
|
||||||
expect( vmpooler.credentials ).to be == { :vmpooler_token => "TOKEN" }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue