summaryrefslogtreecommitdiffstats
path: root/spec/unit/indirector
diff options
context:
space:
mode:
authorLuke Kanies <luke@puppetlabs.com>2011-03-25 14:15:12 -0700
committerLuke Kanies <luke@puppetlabs.com>2011-03-25 14:32:18 -0700
commite16a38349c596c4a6ea682173e0cc704dedc98a7 (patch)
tree7222ea83fc10d9bec621e881b5815503d7150ed5 /spec/unit/indirector
parent29268f3fda3c6e29f60d05e5aa387ff0424e7b1e (diff)
downloadpuppet-e16a38349c596c4a6ea682173e0cc704dedc98a7.tar.gz
puppet-e16a38349c596c4a6ea682173e0cc704dedc98a7.tar.xz
puppet-e16a38349c596c4a6ea682173e0cc704dedc98a7.zip
Fixing #6851 - ResourceType#find/search loads types
Previously we could only find types from site.pp, but we now automatically load the specified type (for find) or all types. This also adds a TypeLoader#import_all capable of importing all manifests (ruby or puppet) on a given system. Signed-off-by: Luke Kanies <luke@puppetlabs.com> Reviewed-by: Daniel Pittman <daniel@puppetlabs.com>
Diffstat (limited to 'spec/unit/indirector')
-rwxr-xr-xspec/unit/indirector/resource_type/parser_spec.rb64
1 files changed, 56 insertions, 8 deletions
diff --git a/spec/unit/indirector/resource_type/parser_spec.rb b/spec/unit/indirector/resource_type/parser_spec.rb
index 739e58b35..27e61486c 100755
--- a/spec/unit/indirector/resource_type/parser_spec.rb
+++ b/spec/unit/indirector/resource_type/parser_spec.rb
@@ -3,13 +3,15 @@
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/resource_type/parser'
+require 'puppet_spec/files'
describe Puppet::Indirector::ResourceType::Parser do
+ include PuppetSpec::Files
+
before do
@terminus = Puppet::Indirector::ResourceType::Parser.new
@request = Puppet::Indirector::Request.new(:resource_type, :find, "foo")
- @krt = Puppet::Resource::TypeCollection.new(@request.environment)
- @request.environment.stubs(:known_resource_types).returns @krt
+ @krt = @request.environment.known_resource_types
end
it "should be registered with the resource_type indirection" do
@@ -17,16 +19,29 @@ describe Puppet::Indirector::ResourceType::Parser do
end
describe "when finding" do
- it "should use the request's environment's list of known resource types" do
- @request.environment.known_resource_types.expects(:hostclass).returns nil
+ it "should return any found type from the request's environment" do
+ type = Puppet::Resource::Type.new(:hostclass, "foo")
+ @request.environment.known_resource_types.add(type)
- @terminus.find(@request)
+ @terminus.find(@request).should == type
end
- it "should return any found type" do
- type = @krt.add(Puppet::Resource::Type.new(:hostclass, "foo"))
+ it "should attempt to load the type if none is found in memory" do
+ dir = tmpdir("find_a_type")
+ FileUtils.mkdir_p(dir)
+ Puppet[:modulepath] = dir
- @terminus.find(@request).should == type
+ # Make a new request, since we've reset the env
+ @request = Puppet::Indirector::Request.new(:resource_type, :find, "foo::bar")
+
+ manifest_path = File.join(dir, "foo", "manifests")
+ FileUtils.mkdir_p(manifest_path)
+
+ File.open(File.join(manifest_path, "bar.pp"), "w") { |f| f.puts "class foo::bar {}" }
+
+ result = @terminus.find(@request)
+ result.should be_instance_of(Puppet::Resource::Type)
+ result.name.should == "foo::bar"
end
it "should return nil if no type can be found" do
@@ -68,8 +83,41 @@ describe Puppet::Indirector::ResourceType::Parser do
result.should be_include(define)
end
+ it "should not return the 'main' class" do
+ main = @krt.add(Puppet::Resource::Type.new(:hostclass, ""))
+
+ # So there is a return value
+ foo = @krt.add(Puppet::Resource::Type.new(:hostclass, "foo"))
+
+ @terminus.search(@request).should_not be_include(main)
+ end
+
it "should return nil if no types can be found" do
@terminus.search(@request).should be_nil
end
+
+ it "should load all resource types from all search paths" do
+ dir = tmpdir("searching_in_all")
+ first = File.join(dir, "first")
+ second = File.join(dir, "second")
+ FileUtils.mkdir_p(first)
+ FileUtils.mkdir_p(second)
+ Puppet[:modulepath] = "#{first}:#{second}"
+
+ # Make a new request, since we've reset the env
+ @request = Puppet::Indirector::Request.new(:resource_type, :search, "*")
+
+ onepath = File.join(first, "one", "manifests")
+ FileUtils.mkdir_p(onepath)
+ twopath = File.join(first, "two", "manifests")
+ FileUtils.mkdir_p(twopath)
+
+ File.open(File.join(onepath, "oneklass.pp"), "w") { |f| f.puts "class one::oneklass {}" }
+ File.open(File.join(twopath, "twoklass.pp"), "w") { |f| f.puts "class two::twoklass {}" }
+
+ result = @terminus.search(@request)
+ result.find { |t| t.name == "one::oneklass" }.should be_instance_of(Puppet::Resource::Type)
+ result.find { |t| t.name == "two::twoklass" }.should be_instance_of(Puppet::Resource::Type)
+ end
end
end