From 821710cfa4e03c2bd0c2914c668a3525f294829f Mon Sep 17 00:00:00 2001 From: Florin Dragos Date: Tue, 6 Oct 2020 14:48:43 +0300 Subject: [PATCH] (maint) Fix external fact cache --- lib/facter/framework/core/cache_manager.rb | 29 +++++++++++++--------- spec/facter/cache_manager_spec.rb | 4 +-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/facter/framework/core/cache_manager.rb b/lib/facter/framework/core/cache_manager.rb index 4654aa4a17..33b9a8d6d6 100644 --- a/lib/facter/framework/core/cache_manager.rb +++ b/lib/facter/framework/core/cache_manager.rb @@ -56,13 +56,15 @@ def fact_cache_enabled?(fact_name) private def resolve_fact(searched_fact) - return unless fact_cache_enabled?(searched_fact.name) + fact_name = if searched_fact.file + File.basename(searched_fact.file) + else + searched_fact.name + end - fact = if searched_fact.file - @fact_groups.get_fact(File.basename(searched_fact.file)) - else - @fact_groups.get_fact(searched_fact.name) - end + return unless fact_cache_enabled?(fact_name) + + fact = @fact_groups.get_fact(fact_name) return unless fact @@ -97,14 +99,17 @@ def create_facts(searched_fact, data) end def cache_fact(fact) - group_name = if fact.file - File.basename(fact.file) - else - @fact_groups.get_fact_group(fact.name) - end + fact_name = if fact.file + File.basename(fact.file) + else + fact.name + end + + group_name = @fact_groups.get_fact_group(fact_name) + return if !group_name || fact.value.nil? - return unless fact_cache_enabled?(fact.name) + return unless fact_cache_enabled?(fact_name) @groups[group_name] ||= {} @groups[group_name][fact.name] = fact.value diff --git a/spec/facter/cache_manager_spec.rb b/spec/facter/cache_manager_spec.rb index ee540348cb..b38366054c 100644 --- a/spec/facter/cache_manager_spec.rb +++ b/spec/facter/cache_manager_spec.rb @@ -13,7 +13,7 @@ user_query: '', type: :custom, file: nil) end let(:searched_external_fact) do - instance_spy(Facter::SearchedFact, name: 'ext_file.txt', fact_class: nil, filter_tokens: [], + instance_spy(Facter::SearchedFact, name: 'my_external_fact', fact_class: nil, filter_tokens: [], user_query: '', type: :file, file: '/tmp/ext_file.txt') end let(:searched_facts) { [searched_core_fact, searched_custom_fact, searched_external_fact] } @@ -103,7 +103,7 @@ sf, _cf = cache_manager.resolve_facts(searched_facts) expect(sf).to be_an_instance_of(Array).and contain_exactly( an_object_having_attributes(name: 'my_custom_fact', type: :custom), - an_object_having_attributes(name: 'ext_file.txt', type: :file) + an_object_having_attributes(name: 'my_external_fact', type: :file) ) end