From 458f69e43c0eb4f136841124342b3dad6c3d84a4 Mon Sep 17 00:00:00 2001 From: BogdanIrimie Date: Fri, 24 Jul 2020 15:33:20 +0300 Subject: [PATCH] (FACT-2699) Detect augeas from gem if augparse is not available. --- lib/facter/resolvers/augeas_resolver.rb | 14 +++++----- spec/facter/resolvers/augeas_resolver_spec.rb | 27 ++++--------------- 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/lib/facter/resolvers/augeas_resolver.rb b/lib/facter/resolvers/augeas_resolver.rb index 80321521bb..0e21e61e5e 100644 --- a/lib/facter/resolvers/augeas_resolver.rb +++ b/lib/facter/resolvers/augeas_resolver.rb @@ -28,14 +28,12 @@ def read_augeas_from_cli def read_augeas_from_gem require 'augeas' - return ::Augeas.create { |aug| aug.get('/augeas/version') } if ::Augeas.respond_to?(:create) - - # it is used for legacy augeas <= 0.5.0 - return ::Augeas.open { |aug| aug.get('/augeas/version') } if ::Augeas.respond_to?(:open) - rescue StandardError => e - log.debug('ruby-augeas not available') - log.log_exception(e) - nil + if Gem.loaded_specs['augeas'] + ::Augeas.create { |aug| aug.get('/augeas/version') } + else + # it is used for legacy augeas <= 0.5.0 (ruby-augeas gem) + ::Augeas.open { |aug| aug.get('/augeas/version') } + end end end end diff --git a/spec/facter/resolvers/augeas_resolver_spec.rb b/spec/facter/resolvers/augeas_resolver_spec.rb index afc9fb74bf..eec11b108b 100644 --- a/spec/facter/resolvers/augeas_resolver_spec.rb +++ b/spec/facter/resolvers/augeas_resolver_spec.rb @@ -33,11 +33,8 @@ end context 'when augeas gem > 0.5.0 is installed' do - let(:augeas_mock) { instance_spy(Augeas) } - before do - allow(Augeas).to receive(:respond_to?).with(:create).and_return(true) - allow(Augeas).to receive(:respond_to?).with(:create, true).and_return(true) + allow(Gem).to receive(:loaded_specs).and_return({ 'augeas' => true }) allow(Augeas).to receive(:create).and_return('1.12.0') end @@ -47,12 +44,8 @@ end context 'when augeas gem <= 0.5.0 is installed' do - let(:augeas_mock) { instance_spy(Augeas) } - before do - allow(Augeas).to receive(:respond_to?).with(:create).and_return(false) - allow(Augeas).to receive(:respond_to?).with(:open).and_return(true) - allow(Augeas).to receive(:respond_to?).with(:open, true).and_return(true) + allow(Gem).to receive(:loaded_specs).and_return({}) allow(Augeas).to receive(:open).and_return('1.12.0') end @@ -62,26 +55,16 @@ end context 'when augeas gem is not installed' do - let(:exception) { StandardError.new('error_message') } + let(:exception) { LoadError.new('load_error_message') } before do allow(Facter::Resolvers::Augeas).to receive(:require).with('augeas').and_raise(exception) end - it 'returns nil' do - expect(augeas.resolve(:augeas_version)).to be_nil - end - - it 'logs a debug message' do - augeas.resolve(:augeas_version) - - expect(log_spy).to have_received(:debug).with('ruby-augeas not available') - end - - it 'logs an exception' do + it 'raises a LoadError error' do augeas.resolve(:augeas_version) - expect(log_spy).to have_received(:log_exception).with(exception) + expect(log_spy).to have_received(:debug).with('resolving fact augeas_version, but load_error_message') end end end