summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Lewis <nick@puppetlabs.com>2011-05-31 15:37:30 -0700
committerNick Lewis <nick@puppetlabs.com>2011-05-31 15:37:30 -0700
commit97927e321d1e24554ad21b92ef4afb1bd64c0167 (patch)
treedf2f82066114918911670749887812674e4a72e1
parent59173268a5c6525a4a5df55b362775d07bc6b52d (diff)
parent9404a7a3bb8da660e26897d052cdd03c291fb0bb (diff)
downloadfacter-master.tar.gz
facter-master.tar.xz
facter-master.zip
Merge branch 'ticket/master/7670'HEADmaster
-rw-r--r--acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb18
-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.rb7
-rw-r--r--lib/facter/util/collection.rb6
-rw-r--r--spec/spec_helper.rb1
-rwxr-xr-xspec/unit/interfaces_spec.rb7
-rw-r--r--spec/unit/memory_spec.rb4
-rwxr-xr-xspec/unit/operatingsystem_spec.rb2
-rwxr-xr-xspec/unit/util/loader_spec.rb4
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|