summaryrefslogtreecommitdiff
path: root/spec/unit/puppet/parser
diff options
context:
space:
mode:
authorDan Bode <dan@puppetlabs.com>2011-11-14 10:32:49 -0800
committerDan Bode <dan@puppetlabs.com>2011-11-14 13:22:55 -0800
commit05c67671fd442c4fc2f20293075495bb97879855 (patch)
treec4e3c3655fc798749447935e0cf9cfe4df4a5df2 /spec/unit/puppet/parser
parent86e86089fb41cb6fb2d6b7e358ed2afe0506fbeb (diff)
(#10802) add new function get_module_path
This commit adds a new function called get_module_path. get_module_path returns the absolute path of a specified module. The code and functionality is very similar to how templates and files are detected inside of modules. the function has been tested against puppet 2.6.10 and 2.7.x
Diffstat (limited to 'spec/unit/puppet/parser')
-rw-r--r--spec/unit/puppet/parser/functions/get_module_path_spec.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/spec/unit/puppet/parser/functions/get_module_path_spec.rb b/spec/unit/puppet/parser/functions/get_module_path_spec.rb
new file mode 100644
index 0000000..d8340f4
--- /dev/null
+++ b/spec/unit/puppet/parser/functions/get_module_path_spec.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env rspec
+require 'puppet'
+require 'fileutils'
+require 'spec_helper'
+describe Puppet::Parser::Functions.function(:get_module_path) do
+ include PuppetSpec::Files
+
+ def get_scope(environment = 'production')
+ scope = Puppet::Parser::Scope.new
+ scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => environment))
+ scope
+ end
+ it 'should only allow one argument' do
+ expect { get_scope.function_get_module_path([]) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+ expect { get_scope.function_get_module_path(['1','2','3']) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+ end
+ it 'should raise an exception when the module cannot be found' do
+ expect { get_scope.function_get_module_path(['foo']) }.should raise_error(Puppet::ParseError, /Could not find module/)
+ end
+ describe 'when locating a module' do
+ let(:modulepath) { tmpdir('modulepath') }
+ let(:foo_path) { File.join(modulepath, 'foo') }
+ before(:each) { FileUtils.mkdir(foo_path) }
+ it 'should be able to find module paths from the modulepath setting' do
+ Puppet[:modulepath] = modulepath
+ get_scope.function_get_module_path(['foo']).should == foo_path
+ end
+ it 'should be able to find module paths when the modulepath is a list' do
+ Puppet[:modulepath] = modulepath + ":/tmp"
+ get_scope.function_get_module_path(['foo']).should == foo_path
+ end
+ it 'should be able to find module paths from the environment' do
+ conf_file = tmpfile('conffile')
+ File.open(conf_file, 'w') do |fh|
+ fh.write("[dansenvironment]\nmodulepath = #{modulepath}")
+ end
+ Puppet[:config] = conf_file
+ Puppet.parse_config
+ get_scope('dansenvironment').function_get_module_path(['foo']).should ==foo_path
+ end
+ end
+end