(BKR-1481) Rewrite beaker-vmpooler to use shared .fog parsing

This commit is contained in:
Dakota Schneider 2018-06-21 13:11:45 -07:00
parent b8804eb5f1
commit 456c96d372
2 changed files with 27 additions and 54 deletions

View file

@ -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 = parse_fog_file(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)

View file

@ -169,16 +169,15 @@ module Beaker
describe "#load_credentials" do describe "#load_credentials" do
it 'continues without credentials when fog file is missing' do it 'continues without credentials when fog file is missing' do
allow_any_instance_of( Beaker::Vmpooler ).to \ expect( File ).to receive( :exist? ) { false }
receive(:read_fog_file).and_raise(Errno::ENOENT.new)
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 is empty' do it 'continues without credentials when fog file is empty' do
allow_any_instance_of( Beaker::Vmpooler ).to \ expect( File ).to receive( :exist? ) { true }
receive(:read_fog_file).and_return(false) expect( File ).to receive( :open ) { "" }
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 == {}
@ -187,8 +186,8 @@ module Beaker
it 'continues without credentials when fog file contains no :default section' do it 'continues without credentials when fog file contains no :default section' do
data = { :some => { :other => :data } } data = { :some => { :other => :data } }
allow_any_instance_of( Beaker::Vmpooler ).to \ expect( File ).to receive( :exist? ) { true }
receive(:read_fog_file).and_return(data) expect( YAML ).to receive( :load_file ) { data }
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 == { }
@ -197,8 +196,8 @@ module Beaker
it 'continues without credentials when fog file :default section has no :vmpooler_token' do it 'continues without credentials when fog file :default section has no :vmpooler_token' do
data = { :default => { :something_else => "TOKEN" } } data = { :default => { :something_else => "TOKEN" } }
allow_any_instance_of( Beaker::Vmpooler ).to \ expect( File ).to receive( :exist? ) { true }
receive(:read_fog_file).and_return(data) expect( YAML ).to receive( :load_file ) { data }
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 == { }
@ -207,41 +206,27 @@ module Beaker
it 'continues without credentials when there are formatting errors in the fog file' do it 'continues without credentials when there are formatting errors in the fog file' do
data = { "'default'" => { :vmpooler_token => "b2wl8prqe6ddoii70md" } } data = { "'default'" => { :vmpooler_token => "b2wl8prqe6ddoii70md" } }
allow_any_instance_of( Beaker::Vmpooler ).to \ expect( File ).to receive( :exist? ) { true }
receive(:read_fog_file).and_return(data) expect( YAML ).to receive( :load_file ) { data }
logger = double( 'logger' ) logger = double( 'logger' )
expect(logger).to receive(:warn).with(/is missing a :default section with a :vmpooler_token value/) expect( logger ).to receive( :warn ).with( /is missing the required section: `default`/ )
make_opts = { :logger => logger } make_opts = { :logger => logger }
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 'throws a TypeError and continues without credentials when there are syntax errors in the fog file' do it '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" data = ";default;\n :vmpooler_token: z2wl8prqe0ddoii707d"
expect( File ).to receive( :exist? ) { true }
allow( File ).to receive( :open ).and_yield( StringIO.new( data ) ) allow( File ).to receive( :open ).and_yield( StringIO.new( data ) )
logger = double( 'logger' ) logger = double( 'logger' )
expect(logger).to receive(:warn).with(/Psych::SyntaxError: .* invalid syntax/) expect( logger ).to receive( :warn ).with( /Psych::SyntaxError/ )
make_opts = { :logger => logger } make_opts = { :logger => logger }
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
@ -252,8 +237,8 @@ module Beaker
it 'stores vmpooler token when found in fog file' do it 'stores vmpooler token when found in fog file' do
data = { :default => { :vmpooler_token => "TOKEN" } } data = { :default => { :vmpooler_token => "TOKEN" } }
allow_any_instance_of( Beaker::Vmpooler ).to \ expect( File ).to receive( :exist? ) { true }
receive(:read_fog_file).and_return(data) expect( YAML ).to receive( :load_file ) { data }
vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts )
expect( vmpooler.credentials ).to be == { :vmpooler_token => "TOKEN" } expect( vmpooler.credentials ).to be == { :vmpooler_token => "TOKEN" }