summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2012-07-19 17:37:39 -0700
committerJeff McCune <jeff@puppetlabs.com>2012-07-23 09:21:22 -0700
commitc1297755d4af11eb918ad987983ebd8398e38f58 (patch)
treedd3cb4e354d91f8ee472202f54dd91bdf1b9d451
parent98ff3abd09ed447da37f09dce1ed2d95d0d05397 (diff)
(Maint) Fix up the get_module_path parser function
This patch switches the spec tests for the get_module_path function to use mock objects. The underlying Puppet::Module.find method has reasonable test coverage inside of Puppet core so we might as well break the tight dependency while we're fixing up the specs to use the new parser scope. The behavior of the parser function itself should still have complete coverage even though the tests have switched to mock the implementation inside of Puppet.
-rw-r--r--lib/puppet/parser/functions/get_module_path.rb2
-rw-r--r--spec/unit/puppet/parser/functions/get_module_path_spec.rb52
2 files changed, 28 insertions, 26 deletions
diff --git a/lib/puppet/parser/functions/get_module_path.rb b/lib/puppet/parser/functions/get_module_path.rb
index 4d2b50b..1421b91 100644
--- a/lib/puppet/parser/functions/get_module_path.rb
+++ b/lib/puppet/parser/functions/get_module_path.rb
@@ -7,7 +7,7 @@ module Puppet::Parser::Functions
$module_path = get_module_path('stdlib')
EOT
) do |args|
- raise(Puppet::ParseError, "get_module_name(): Wrong number of arguments, expects one") unless args.size == 1
+ raise(Puppet::ParseError, "get_module_path(): Wrong number of arguments, expects one") unless args.size == 1
if module_path = Puppet::Module.find(args[0], compiler.environment.to_s)
module_path.path
else
diff --git a/spec/unit/puppet/parser/functions/get_module_path_spec.rb b/spec/unit/puppet/parser/functions/get_module_path_spec.rb
index d8340f4..0a769eb 100644
--- a/spec/unit/puppet/parser/functions/get_module_path_spec.rb
+++ b/spec/unit/puppet/parser/functions/get_module_path_spec.rb
@@ -1,42 +1,44 @@
-#!/usr/bin/env rspec
-require 'puppet'
-require 'fileutils'
+#! /usr/bin/env ruby -S rspec
require 'spec_helper'
+
describe Puppet::Parser::Functions.function(:get_module_path) do
- include PuppetSpec::Files
+ Internals = PuppetlabsSpec::PuppetInternals
- def get_scope(environment = 'production')
- scope = Puppet::Parser::Scope.new
- scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => environment))
- scope
+ def scope(environment = "production")
+ Internals.scope(:compiler => Internals.compiler(:node => Internals.node(:environment => environment)))
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/)
+ expect { scope.function_get_module_path([]) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+ expect { 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/)
+ expect { 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) }
+ let(:modulepath) { "/tmp/does_not_exist" }
+ let(:path_of_module_foo) do
+ mod = mock("Puppet::Module")
+ mod.stubs(:path).returns("/tmp/does_not_exist/foo")
+ mod
+ end
+
+ before(:each) { Puppet[:modulepath] = modulepath }
+
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
+ Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
+ scope.function_get_module_path(['foo']).should == path_of_module_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
+ Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
+ scope.function_get_module_path(['foo']).should == path_of_module_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
+ it 'should respect the environment' do
+ pending("Disabled on Puppet 2.6.x") if Puppet.version =~ /^2\.6\b/
+ Puppet.settings[:environment] = 'danstestenv'
+ Puppet::Module.expects(:find).with('foo', 'danstestenv').returns(path_of_module_foo)
+ scope('danstestenv').function_get_module_path(['foo']).should == path_of_module_foo.path
end
end
end