summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/facter.rb7
-rw-r--r--tests/tc_simple.rb32
2 files changed, 38 insertions, 1 deletions
diff --git a/lib/facter.rb b/lib/facter.rb
index 20b94bb..c663c8c 100644
--- a/lib/facter.rb
+++ b/lib/facter.rb
@@ -914,7 +914,12 @@ class Facter
# the facts won't get reloaded if someone calls
# "loadfacts". Really only important in testing, but,
# well, it's important in testing.
- load file
+ begin
+ load file
+ rescue => detail
+ warn "Could not load %s: %s" %
+ [file, detail]
+ end
end
end
end
diff --git a/tests/tc_simple.rb b/tests/tc_simple.rb
index 5155fde..1c3edd5 100644
--- a/tests/tc_simple.rb
+++ b/tests/tc_simple.rb
@@ -9,16 +9,22 @@ $:.unshift libdir
require 'test/unit'
require 'facter'
+require 'fileutils'
if __FILE__ == $0
Facter.debugging(true)
end
class TestFacter < Test::Unit::TestCase
+ def tearhook(&block)
+ @tearhooks << block
+ end
+
def setup
Facter.loadfacts
@tmpfiles = []
+ @tearhooks = []
end
def teardown
@@ -528,6 +534,32 @@ some random stuff
assert(! Facter.kernel?("nosuchkernel"), "Fake kernel matched")
}
end
+
+ # Make sure that facter doesn't fail when it gets bad files.
+ def test_ignore_bad_files
+ # Create a broken file
+ dir = "/tmp/factertest-brokenfile"
+ @tmpfiles << dir
+ libdir = File.join(dir, "facter")
+
+ FileUtils.mkdir_p(libdir)
+
+ $: << libdir
+ tearhook { $:.delete libdir }
+
+ file = File.join(libdir, "file.rb")
+
+
+ File.open(file, "w") do |f|
+ f.puts "asdflkjaeflkj23rljadflkjasdfuhasd8;;lkjadsf;j24iojlkajsdf"
+ end
+
+ assert_nothing_raised {
+ Facter.loadfacts()
+ }
+
+
+ end
end
# $Id$