From 1756bec99b9136463e5d35f1de4119b813ce40cc Mon Sep 17 00:00:00 2001 From: luke Date: Thu, 8 Feb 2007 05:11:49 +0000 Subject: Fixing #484. Moving unit tests at the same time. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2181 980ebf18-57e1-0310-9a29-db15c13687c0 --- test/util/autoload.rb | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100755 test/util/autoload.rb (limited to 'test/util/autoload.rb') diff --git a/test/util/autoload.rb b/test/util/autoload.rb new file mode 100755 index 000000000..34f40df24 --- /dev/null +++ b/test/util/autoload.rb @@ -0,0 +1,130 @@ +#!/usr/bin/env ruby + +$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/ + +require 'puppet' +require 'puppet/util/autoload' +require 'puppettest' + +class TestAutoload < Test::Unit::TestCase + include PuppetTest + @things = [] + def self.newthing(name) + @things << name + end + + def self.thing?(name) + @things.include? name + end + + def self.clear + @things.clear + end + + def mkfile(name, path) + # Now create a file to load + File.open(path, "w") do |f| + f.puts %{ +TestAutoload.newthing(:#{name.to_s}) + } + end + end + + def teardown + super + self.class.clear + end + + def test_load + dir = tempfile() + $: << dir + cleanup do + $:.delete(dir) + end + + Dir.mkdir(dir) + + rbdir = File.join(dir, "yayness") + + Dir.mkdir(rbdir) + + # An object for specifying autoload + klass = self.class + + loader = nil + assert_nothing_raised { + loader = Puppet::Util::Autoload.new(klass, :yayness) + } + + assert_equal(loader.object_id, Puppet::Util::Autoload[klass].object_id, + "Did not retrieve loader object by class") + + # Make sure we don't fail on missing files + assert_nothing_raised { + assert_equal(false, loader.load(:mything), + "got incorrect return on failed load") + } + + # Now create a couple of files for testing + path = File.join(rbdir, "mything.rb") + mkfile(:mything, path) + opath = File.join(rbdir, "othing.rb") + mkfile(:othing, opath) + + # Now try to actually load it. + assert_nothing_raised { + assert_equal(true, loader.load(:mything), + "got incorrect return on failed load") + } + + assert(loader.loaded?(:mything), "Not considered loaded") + + assert(klass.thing?(:mything), + "Did not get loaded thing") + + # Now clear everything, and test loadall + assert_nothing_raised { + loader.clear + } + + self.class.clear + + assert_nothing_raised { + loader.loadall + } + + [:mything, :othing].each do |thing| + assert(loader.loaded?(thing), "#{thing.to_s} not considered loaded") + + assert(klass.thing?(thing), + "Did not get loaded #{thing.to_s}") + end + end + + # Make sure that autoload dynamically modifies $: with the libdir as + # appropriate. + def test_autoload_uses_libdir + dir = Puppet[:libdir] + unless FileTest.directory?(dir) + Dir.mkdir(dir) + end + + loader = File.join(dir, "test") + Dir.mkdir(loader) + name = "funtest" + file = File.join(loader, "funtest.rb") + File.open(file, "w") do |f| + f.puts "$loaded = true" + end + + auto = Puppet::Util::Autoload.new(self, "test") + + # Now make sure autoloading modifies $: as necessary + assert(! $:.include?(dir), "search path already includes libdir") + + assert_nothing_raised do + assert(auto.load("funtest"), "did not successfully load funtest") + end + assert($:.include?(dir), "libdir did not get added to search path") + end +end -- cgit