summaryrefslogtreecommitdiffstats
path: root/spec/integration/util
diff options
context:
space:
mode:
Diffstat (limited to 'spec/integration/util')
-rwxr-xr-xspec/integration/util/feature.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/spec/integration/util/feature.rb b/spec/integration/util/feature.rb
new file mode 100755
index 000000000..f1ddd5d43
--- /dev/null
+++ b/spec/integration/util/feature.rb
@@ -0,0 +1,54 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+require 'puppet/util/feature'
+require 'puppet_spec/files'
+
+describe Puppet::Util::Feature do
+ include PuppetSpec::Files
+
+ it "should be able to load features from disk" do
+ libdir = tmpfile("feature_lib")
+ Dir.mkdir(libdir)
+
+ $: << libdir
+
+ $features = Puppet::Util::Feature.new("feature_lib")
+
+ Dir.mkdir(File.join(libdir, "feature_lib"))
+
+ File.open(File.join(libdir, "feature_lib", "able_to_load.rb"), "w") do |f|
+ f.puts "$features.add(:able_to_load) { true }"
+ end
+
+ $features.should be_able_to_load
+ end
+
+
+ def test_dynamic_loading
+ $features = @features
+ cleanup { $features = nil }
+ # Now create a feature and make sure it loads.
+ FileUtils.mkdir_p(@path)
+ nope = File.join(@path, "nope.rb")
+ File.open(nope, "w") { |f|
+ f.puts "$features.add(:nope, :libs => %w{nosuchlib})"
+ }
+ assert_nothing_raised("Failed to autoload features") do
+ assert(! @features.nope?, "'nope' returned true")
+ end
+
+ # First make sure "yep?" returns false
+ assert_nothing_raised("Missing feature threw an exception") do
+ assert(! @features.notyep?, "'notyep' returned true before definition")
+ end
+
+ yep = File.join(@path, "yep.rb")
+ File.open(yep, "w") { |f|
+ f.puts "$features.add(:yep, :libs => %w{puppet})"
+ }
+
+ assert(@features.yep?, "false 'yep' is apparently cached or feature could not be loaded")
+ end
+end