diff options
-rw-r--r-- | acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb | 18 | ||||
-rw-r--r-- | acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb (renamed from accecptance/tests/ticket_7039_facter_multiple_facts_one_file.rb) | 0 | ||||
-rw-r--r-- | lib/facter/application.rb | 7 | ||||
-rw-r--r-- | lib/facter/util/collection.rb | 6 | ||||
-rw-r--r-- | spec/spec_helper.rb | 1 | ||||
-rwxr-xr-x | spec/unit/interfaces_spec.rb | 7 | ||||
-rw-r--r-- | spec/unit/memory_spec.rb | 4 | ||||
-rwxr-xr-x | spec/unit/operatingsystem_spec.rb | 2 | ||||
-rwxr-xr-x | spec/unit/util/loader_spec.rb | 4 |
9 files changed, 38 insertions, 11 deletions
diff --git a/acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb b/acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb new file mode 100644 index 0000000..3c7c4d9 --- /dev/null +++ b/acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb @@ -0,0 +1,18 @@ +test_name "#7670: Facter should properly detect operatingsystem on Ubuntu after a clear" + +script_contents = <<-OS_DETECT + require 'facter' + Facter['operatingsystem'].value + Facter.clear + exit Facter['operatingsystem'].value == 'Ubuntu' +OS_DETECT + +script_name = "/tmp/facter_os_detection_test_#{$$}" + +agents.each do |agent| + next unless agent['platform'].include? 'ubuntu' + + create_remote_file(agent, script_name, script_contents) + + on(agent, "ruby #{script_name}") +end diff --git a/accecptance/tests/ticket_7039_facter_multiple_facts_one_file.rb b/acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb index fb78628..fb78628 100644 --- a/accecptance/tests/ticket_7039_facter_multiple_facts_one_file.rb +++ b/acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb diff --git a/lib/facter/application.rb b/lib/facter/application.rb index bd68149..9b6da1d 100644 --- a/lib/facter/application.rb +++ b/lib/facter/application.rb @@ -10,10 +10,6 @@ module Facter names = argv # Create the facts hash that is printed to standard out. - # Pre-load all of the facts, since we can have multiple facts - # per file, and since we can't know ahead of time which file a - # fact will be in, we'll need to load every file. - facts = Facter.to_hash unless names.empty? facts = {} names.each do |name| @@ -26,6 +22,9 @@ module Facter end end + # Print everything if they didn't ask for specific facts. + facts ||= Facter.to_hash + # Print the facts as YAML and exit if options[:yaml] require 'yaml' diff --git a/lib/facter/util/collection.rb b/lib/facter/util/collection.rb index 3f8e0f8..b3d3a45 100644 --- a/lib/facter/util/collection.rb +++ b/lib/facter/util/collection.rb @@ -66,9 +66,13 @@ class Facter::Util::Collection def fact(name) name = canonize(name) + # Try to load the fact if necessary loader.load(name) unless @facts[name] - return @facts[name] + # Try HARDER + loader.load_all unless @facts[name] + + @facts[name] end # Flush all cached values. diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 28e7b72..483d4dc 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -18,6 +18,7 @@ RSpec.configure do |config| # Ensure that we don't accidentally cache between test cases. config.before :each do + Facter::Util::Loader.any_instance.stubs(:load_all) Facter.clear end end diff --git a/spec/unit/interfaces_spec.rb b/spec/unit/interfaces_spec.rb index 8b295d6..cfe4226 100755 --- a/spec/unit/interfaces_spec.rb +++ b/spec/unit/interfaces_spec.rb @@ -3,17 +3,14 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') require 'facter' +require 'facter/util/ip' describe "Per Interface IP facts" do - before do - Facter.loadfacts - end - it "should replace the ':' in an interface list with '_'" do # So we look supported Facter.fact(:kernel).stubs(:value).returns("SunOS") - Facter::Util::IP.expects(:get_interfaces).returns %w{eth0:1 eth1:2} + Facter::Util::IP.stubs(:get_interfaces).returns %w{eth0:1 eth1:2} Facter.fact(:interfaces).value.should == %{eth0_1,eth1_2} end end diff --git a/spec/unit/memory_spec.rb b/spec/unit/memory_spec.rb index 5cae8cb..fe4ec36 100644 --- a/spec/unit/memory_spec.rb +++ b/spec/unit/memory_spec.rb @@ -6,7 +6,9 @@ require 'facter' describe "Memory facts" do before do - Facter.loadfacts + # We need these facts loaded, but they belong to a file with a + # different name, so load the file explicitly. + Facter.collection.loader.load(:memory) end after do diff --git a/spec/unit/operatingsystem_spec.rb b/spec/unit/operatingsystem_spec.rb index 91cd311..9a7971d 100755 --- a/spec/unit/operatingsystem_spec.rb +++ b/spec/unit/operatingsystem_spec.rb @@ -34,6 +34,7 @@ describe "Operating System fact" do it "should identify Oracle VM as OVS" do Facter.fact(:kernel).stubs(:value).returns("Linux") + Facter.stubs(:value).with(:lsbdistid).returns(nil) FileTest.stubs(:exists?).returns false FileTest.expects(:exists?).with("/etc/ovs-release").returns true @@ -44,6 +45,7 @@ describe "Operating System fact" do it "should identify VMWare ESX" do Facter.fact(:kernel).stubs(:value).returns("Linux") + Facter.stubs(:value).with(:lsbdistid).returns(nil) FileTest.stubs(:exists?).returns false FileTest.expects(:exists?).with("/etc/vmware-release").returns true diff --git a/spec/unit/util/loader_spec.rb b/spec/unit/util/loader_spec.rb index 90530e8..1bc909f 100755 --- a/spec/unit/util/loader_spec.rb +++ b/spec/unit/util/loader_spec.rb @@ -19,6 +19,10 @@ end describe Facter::Util::Loader do + before :each do + Facter::Util::Loader.any_instance.unstub(:load_all) + end + def with_env(values) old = {} values.each do |var, value| |